FEAT: Purge des logs agents — job Hangfire récurrent + rétention configurable #53
Labels
No labels
bug
chore
design
dx:ci
dx:database
dx:dotnet
dx:infra
dx:security
dx:tests
dx:ui
etape-1
etape-2
etape-3
etape-4
etape-5
etape-6
etape-7
feature
priority-high
priority-low
priority-medium
security
spec
tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
nonobis/Heimdall#53
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Les logs agents remontés au central ne doivent pas s'accumuler indéfiniment en base (volume : 1 agent × niveau Warning ≈ centaines d'entrées/jour ; Information = milliers). Un système de purge est exigé dès la mise en place (ticket FEAT stockage). Complémentaire du ticket #8 (jobs rétention/cleanup) qui ne couvre pas les logs.
Référence spec
S'inscrit dans l'étape 6 (ops/maintenance) ; la spec impose la rétention/cleanup pour les données volumineuses (cf. #8, #15). Pas de table de logs dans la spec → politique de rétention à définir avec valeurs par défaut raisonnables.
État actuel
JobSetup.ConfigureRecurringJobs: heartbeat-monitor, agent-failover, daily-digest, weekly-digest — pas de job de purge des logsSettings(SettingsController : heartbeat.interval.seconds déjà appliqué live par l'agent)À faire
AgentLogs.RetentionDays(défaut 7 jours) + optionnellementAgentLogs.MaxEntriesPerAgent(défaut 50 000) — stockés dans la table Settings existante (patternheartbeat.interval.seconds)AgentLogCleanupJob(nouveau,src/Heimdall.Infrastructure/Jobs/) : DELETE en batch par âge (TimestampUtc < cutoff), par agent si MaxEntries dépassé, en lots bornés (ex. 10 000/lot) pour limiter la charge ; log du nombre d'entrées purgéesJobSetup:agent-log-cleanup, cron quotidien0 3 * * *(3h, creux)AgentId,TimestampUtc) suffit pour le DELETE par âge ; vérifier le plan avec EXPLAIN si volume réelCritères d'acceptation
agent-log-cleanupsupprime les entrées plus vieilles queRetentionDaysFichiers concernés
src/Heimdall.Infrastructure/Jobs/AgentLogCleanupJob.cs(nouveau)src/Heimdall.Infrastructure/BackgroundJobs/JobSetup.cssrc/Heimdall.Infrastructure/(pattern settings existant) +src/Heimdall.Web/Controllers/SettingsController.cssi exposition APItests/Heimdall.Integration.Tests/