* refactor: always use console log handler
* refactor: json for k8s, plain otherwise
* chore: remove syslog from wsgi.py
* chore: remove debug.log()
* chore: drop syslog from settings.py
* refactor: use log.log() in person.utils
* refactor: fetch_meeting_attendance->log.log()
* chore: gunicorn logs as JSON (wip)
* feat: better json log formatting
* refactor: improve log config
* feat: gunicorn access log fields
* fix: remove type hints
The gunicorn logger plays tricks with the
LogRecord args parameter to let it have string
keys instead of being a simple tuple.
The mypy tests rightly flag this. Rather
than fighting the typing, just remove the
hints and leave a comment warning not to
use the gunicorn-specific formatter with
other loggers.
* 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
* refactor: replace datetime.now with timezone.now
* refactor: migrate model fields to use timezone.now as default
* refactor: replace datetime.today with timezone.now
datetime.datetime.today() is equivalent to datetime.datetime.now(); both
return a naive datetime with the current local time.
* refactor: rephrase datetime.now(tz) as timezone.now().astimezone(tz)
This is effectively the same, but is less likely to encourage accidental
use of naive datetimes.
* refactor: revert datetime.today() change to old migrations
* refactor: change a missed datetime.now to timezone.now
* chore: renumber timezone_now migration
* chore: renumber migrations