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:
curo1305
2026-05-25 18:50:50 +02:00
parent f868a4e0c7
commit f89f787656
2 changed files with 103 additions and 2 deletions
+11 -2
View File
@@ -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"