cleanup von abgeschlossenen jobs

This commit is contained in:
2026-05-22 09:14:31 +02:00
parent d61dbd46fd
commit 848e48b0dd
7 changed files with 689 additions and 31 deletions
+26
View File
@@ -16,6 +16,7 @@ from django.utils import timezone
from .models import JobLogEntry, MailMergeJob
from .services.docx_renderer import docx_to_pdf, render_docx
from .services.pdf_merge import merge_pdfs
from .services.retention import cleanup_expired_jobs
logger = logging.getLogger(__name__)
@@ -85,3 +86,28 @@ def run_mailmerge(self, job_id: str) -> str:
job.save()
_log(job, "error", f"Job fehlgeschlagen: {exc}")
raise
# ---------------------------------------------------------------------------
# Retention-Cleanup
# ---------------------------------------------------------------------------
@shared_task(name="mailmerge.cleanup_expired_jobs")
def cleanup_expired_jobs_task(retention_days: int | None = None,
dry_run: bool = False) -> dict:
"""Periodic Task: löscht abgelaufene Jobs inkl. Files.
Wird vom Beat-Scheduler aufgerufen. Ergebnis als Dict (Celery-Result-
Backend serialisiert Dataclass-Instanzen nicht out-of-the-box).
"""
result = cleanup_expired_jobs(retention_days=retention_days, dry_run=dry_run)
summary = {
"cutoff": result.cutoff.isoformat(),
"dry_run": result.dry_run,
"candidates": result.candidates,
"deleted_jobs": result.deleted_jobs,
"deleted_files": result.deleted_files,
"errors": result.errors,
}
logger.info("Retention-Cleanup-Task abgeschlossen: %s", summary)
return summary