cleanup von abgeschlossenen jobs
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user