Corp/docs/guides/CELERY.md

1.9 KiB

Celery

Celery handles notification delivery, email digests, LDAP retries, task automation, attendance synchronization, guest lifecycle jobs, attachment cleanup and payroll period opening.

Configuration

REDIS_HOST=127.0.0.1
REDIS_PORT=6379
CELERY_BROKER_URL=redis://127.0.0.1:6379/0
CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/1

Tasks use JSON serialization, late acknowledgement, prefetch multiplier 1, a 25-minute soft limit and a 30-minute hard limit. DatabaseScheduler from django-celery-beat is enabled, while the default periodic schedule is declared in backend/eusrr_backend/settings.py.

Development

cd backend
celery -A eusrr_backend worker -l info
celery -A eusrr_backend beat -l info

Run worker and Beat as separate processes. Migrations must include django_celery_beat and django_celery_results.

python manage.py migrate
celery -A eusrr_backend inspect ping

There are no active custom queue routes in the current settings. Do not start a worker restricted to notifications,emails unless matching routes have first been configured and tested.

Production

  • run one Beat instance only;
  • supervise worker and Beat with the deployment platform;
  • use an authenticated/private Redis endpoint;
  • preserve graceful shutdown so late-acknowledged tasks can finish or be redelivered;
  • monitor queue depth, task runtime, retries and worker availability;
  • deploy application code, migrations and workers as one compatible release.

Periodic jobs include daily/weekly notification digests, due task notifications, scheduled task automations, LDAP retry processing, personnel actions, attendance sync and guest visit maintenance. Check CELERY_BEAT_SCHEDULE for the exact current names and intervals.

Tests use the in-memory/eager configuration from backend/eusrr_backend/settings_test.py; tests should not require a live broker unless they explicitly exercise broker integration.