feat(phase-4-06): Celery daily audit export task + beat schedule (D-17)
- Create backend/tasks/audit_tasks.py: audit_log_daily_export task queries yesterday's AuditLog rows, writes CSV, uploads to MinIO audit-logs bucket via put_object_raw(bucket='audit-logs', ...) - All imports deferred inside _run_daily_export() to prevent circular imports - celery_app.py: add crontab import, beat entry at midnight UTC, tasks.audit_tasks.* routed to documents queue
This commit is contained in:
+11
-2
@@ -14,6 +14,7 @@ import os
|
||||
from datetime import timedelta as _timedelta
|
||||
|
||||
from celery import Celery
|
||||
from celery.schedules import crontab as _crontab
|
||||
|
||||
celery_app = Celery("docuvault")
|
||||
|
||||
@@ -28,18 +29,26 @@ celery_app.conf.result_serializer = "json"
|
||||
celery_app.conf.accept_content = ["json"]
|
||||
|
||||
# Route document tasks to the dedicated `documents` queue;
|
||||
# email tasks to the `email` queue (Phase 2 — D-03)
|
||||
# email tasks to the `email` queue (Phase 2 — D-03);
|
||||
# audit tasks to the `documents` queue (D-17 — reuse documents worker)
|
||||
celery_app.conf.task_routes = {
|
||||
"tasks.document_tasks.*": {"queue": "documents"},
|
||||
"tasks.email_tasks.*": {"queue": "email"},
|
||||
"tasks.audit_tasks.*": {"queue": "documents"},
|
||||
}
|
||||
|
||||
# Celery beat schedule: cleanup_abandoned_uploads runs every 30 minutes (D-06)
|
||||
# Celery beat schedule:
|
||||
# cleanup-abandoned-uploads — every 30 minutes (D-06)
|
||||
# audit-log-daily-export — midnight UTC daily (D-17)
|
||||
celery_app.conf.beat_schedule = {
|
||||
"cleanup-abandoned-uploads": {
|
||||
"task": "tasks.document_tasks.cleanup_abandoned_uploads",
|
||||
"schedule": _timedelta(minutes=30),
|
||||
},
|
||||
"audit-log-daily-export": {
|
||||
"task": "tasks.audit_tasks.audit_log_daily_export",
|
||||
"schedule": _crontab(hour=0, minute=0),
|
||||
},
|
||||
}
|
||||
celery_app.conf.timezone = "UTC"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user