FEAT: Jobs Hangfire rétention et cleanup — RetentionCheck, S3Cleanup, CleanupFaces/Plates, DatabaseMaintenance #8

Closed
opened 2026-08-10 21:02:18 +02:00 by nonobis · 0 comments
Owner

🎯 Contexte

Seuls 4 jobs récurrents sont enregistrés (JobSetup.ConfigureRecurringJobs) : heartbeat-monitor, agent-failover, daily-digest, weekly-digest. Les 5 jobs de maintenance de la spec manquent, ainsi que le dashboard Hangfire.

📚 Référence spec (MASTER_SPECIFICATION.md v2.0)

7.5 Jobs Hangfire — Central :

  • RetentionCheckJob quotidien 3h (queue default) : purge enregistrements expirés par StoragePolicy + S3 batch delete — ExecuteDelete SQL, pas de boucle mémoire (Correctif D5)
  • S3CleanupJob quotidien 4h : fichiers orphelins Alarik (pagination 1000, Correctif D6)
  • CleanupUnknownFacesJob dimanche 5h : UnknownPerson > 30 j + snapshots S3
  • CleanupLicensePlatesJob dimanche 6h : plaques non associées > 30 j
  • DatabaseMaintenanceJob hebdomadaire dimanche 7h : VACUUM events + REINDEX (VACUUM FULL mensuel) — REINDEX DATABASE CURRENT (Correctif P5)
    Phase 11 : Dashboard /hangfire accessible Admin uniquement ([Authorize(Policy = AdminJobs)])
    7.4 : queues isolées (default, email, gotify/ntfy, digest) + WorkerCount

🔍 État actuel (vérifié dans le code)

src/Heimdall.Infrastructure/Jobs/ : AgentFailoverJob, DailyDigestJob, HeartbeatMonitorJob, SendNotificationJob, WeeklyDigestJob. UseHangfireDashboard absent de Program.cs. Queues actuelles : default, heartbeat, email, ntfy, digest (WorkerCount=2).

🧩 À faire

  • Créer les 5 jobs (RetentionCheck, S3Cleanup, CleanupUnknownFaces, CleanupLicensePlates, DatabaseMaintenance)
  • Enregistrer les crons dans JobSetup.ConfigureRecurringJobs
  • Utiliser ExecuteDeleteAsync + batch S3 (dépend du ticket stockage S3)
  • Dashboard Hangfire : app.UseHangfireDashboard protégé par la policy AdminJobs
  • Tests d'exécution des jobs

🧪 Critères d'acceptation

  • /hangfire accessible Admin, 403 pour les autres
  • Jobs enregistrés avec les bons crons (3h, 4h, dim 5h/6h/7h)
  • RetentionCheck : 1 requête SQL (pas de boucle)

📁 Fichiers concernés

src/Heimdall.Infrastructure/Jobs/RetentionCheckJob.cs (nouveau), S3CleanupJob.cs (nouveau), CleanupUnknownFacesJob.cs (nouveau), CleanupLicensePlatesJob.cs (nouveau), DatabaseMaintenanceJob.cs (nouveau), src/Heimdall.Infrastructure/BackgroundJobs/JobSetup.cs, src/Heimdall.Web/Program.cs

## 🎯 Contexte Seuls 4 jobs récurrents sont enregistrés (`JobSetup.ConfigureRecurringJobs`) : heartbeat-monitor, agent-failover, daily-digest, weekly-digest. Les 5 jobs de maintenance de la spec manquent, ainsi que le **dashboard Hangfire**. ## 📚 Référence spec (MASTER_SPECIFICATION.md v2.0) **7.5 Jobs Hangfire — Central** : - `RetentionCheckJob` quotidien 3h (queue default) : purge enregistrements expirés par StoragePolicy + S3 batch delete — `ExecuteDelete` SQL, pas de boucle mémoire (Correctif D5) - `S3CleanupJob` quotidien 4h : fichiers orphelins Alarik (pagination 1000, Correctif D6) - `CleanupUnknownFacesJob` dimanche 5h : UnknownPerson > 30 j + snapshots S3 - `CleanupLicensePlatesJob` dimanche 6h : plaques non associées > 30 j - `DatabaseMaintenanceJob` hebdomadaire dimanche 7h : VACUUM events + REINDEX (VACUUM FULL mensuel) — `REINDEX DATABASE CURRENT` (Correctif P5) **Phase 11** : Dashboard `/hangfire` accessible Admin uniquement (`[Authorize(Policy = AdminJobs)]`) **7.4** : queues isolées (`default`, `email`, `gotify`/`ntfy`, `digest`) + WorkerCount ## 🔍 État actuel (vérifié dans le code) `src/Heimdall.Infrastructure/Jobs/` : AgentFailoverJob, DailyDigestJob, HeartbeatMonitorJob, SendNotificationJob, WeeklyDigestJob. `UseHangfireDashboard` absent de Program.cs. Queues actuelles : default, heartbeat, email, ntfy, digest (WorkerCount=2). ## 🧩 À faire - [ ] Créer les 5 jobs (RetentionCheck, S3Cleanup, CleanupUnknownFaces, CleanupLicensePlates, DatabaseMaintenance) - [ ] Enregistrer les crons dans `JobSetup.ConfigureRecurringJobs` - [ ] Utiliser `ExecuteDeleteAsync` + batch S3 (dépend du ticket stockage S3) - [ ] Dashboard Hangfire : `app.UseHangfireDashboard` protégé par la policy `AdminJobs` - [ ] Tests d'exécution des jobs ## 🧪 Critères d'acceptation - [ ] `/hangfire` accessible Admin, 403 pour les autres - [ ] Jobs enregistrés avec les bons crons (3h, 4h, dim 5h/6h/7h) - [ ] RetentionCheck : 1 requête SQL (pas de boucle) ## 📁 Fichiers concernés src/Heimdall.Infrastructure/Jobs/RetentionCheckJob.cs (nouveau), S3CleanupJob.cs (nouveau), CleanupUnknownFacesJob.cs (nouveau), CleanupLicensePlatesJob.cs (nouveau), DatabaseMaintenanceJob.cs (nouveau), src/Heimdall.Infrastructure/BackgroundJobs/JobSetup.cs, src/Heimdall.Web/Program.cs
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#8
No description provided.