datatracker/ietf/stats/management/commands/fetch_meeting_attendance.py
Jennifer Richards 8d12071bf5
refactor: Move cron jobs to celery tasks (#6926)
* refactor: Factor out helper from fetch_meeting_attendance.py

* feat: Define fetch_meeting_attendance_task task

Equivalent to the fetch_meeting_attendance management command

* chore: Disable fetch_meeting_attendance in bin/daily

* feat: Log errors in fetch_meeting_attendance_task

* feat: Enable a result backend for celery

Ignore results by default, but enable the backend so we
can manage tasks

* feat: Define daily task in ietf.utils.tasks

* refactor: Make bin/send-review-reminders into a task

* refactor: Make bin/send-scheduled-mail into a task

* chore: Update copyright years

* refactor: Make bin/rfc-editor-index-updates into a task

* refactor: Accept date type in rfc index update fn

* chore: Update comment

* fix: Annotate param as Optional

* fix: Revert treating skip_older_than_date as str

Misunderstood the comment, "fixed" a non-bug. Oops.

* feat: mgmt command to create periodic tasks

* feat: add summary of tasks to mgmt cmd

* style: black

* fix: Remove debug statements

* feat: Enable/disable tasks

* chore: Disable periodic tasks by default

* chore: Revert changes to daily and every15m

* fix: Call intended function

* chore: Add task descriptions
2024-01-22 12:04:16 -06:00

47 lines
1.9 KiB
Python

# Copyright The IETF Trust 2017-2019, All Rights Reserved
# Copyright 2016 IETF Trust
import syslog
from django.core.management.base import BaseCommand, CommandError
from django.utils import timezone
import debug # pyflakes:ignore
from ietf.meeting.models import Meeting
from ietf.stats.utils import fetch_attendance_from_meetings
logtag = __name__.split('.')[-1]
logname = "user.log"
syslog.openlog(str(logtag), syslog.LOG_PID, syslog.LOG_USER)
class Command(BaseCommand):
help = "Fetch meeting attendee figures from ietf.org/registration/attendees."
def add_arguments(self, parser):
parser.add_argument("--meeting", help="meeting to fetch data for")
parser.add_argument("--all", action="store_true", help="fetch data for all meetings")
parser.add_argument("--latest", type=int, help="fetch data for latest N meetings")
def handle(self, *args, **options):
self.verbosity = options['verbosity']
meetings = Meeting.objects.none()
if options['meeting']:
meetings = Meeting.objects.filter(number=options['meeting'], type="ietf")
elif options['all']:
meetings = Meeting.objects.filter(type="ietf").order_by("date")
elif options['latest']:
meetings = Meeting.objects.filter(type="ietf", date__lte=timezone.now()).order_by("-date")[:options['latest']]
else:
raise CommandError("Please use one of --meeting, --all or --latest")
for meeting, stats in zip(meetings, fetch_attendance_from_meetings(meetings)):
msg = "Fetched data for meeting {:>3}: {:4d} processed, {:4d} added, {:4d} in table".format(
meeting.number, stats.processed, stats.added, stats.total
)
if self.stdout.isatty():
self.stdout.write(msg+'\n') # make debugging a bit easier
else:
syslog.syslog(msg)