ADR 0081 – État des sauvegardes dans la barre d'état
Accepté (2026-10-16, mode autonome)
ADR 0081 – État des sauvegardes dans la barre d’état
Statut : Accepté (2026-10-16, mode autonome)
Idée de la vague 3 du document d’idées, reportée par l’ADR 0019 (« état des sauvegardes dans l’application ») : voir sans ouvrir un terminal que la dernière sauvegarde est récente et bonne.
Décision
- Le service
backupécrit déjàstatus.json(ADR 0019). Il en publie désormais une copie lisible par tous (chmod 644, écriture par fichier temporaire puis renommage) à chaque écriture de l’état et au démarrage du planificateur (un volume neuf ne reste pas vide), dans le dossier donné parBACKUP_STATUS_PUBLIC_DIR(volume nommébackup-status, monté en lecture seule dans l’application). Sans cette variable, rien ne change. Un échec de la copie ne fait jamais échouer une sauvegarde. - Le dossier des sauvegardes lui-même (
umask 077, contient tous les documents en clair) n’est pas monté dans l’application : elle ne voit que cette copie. GET /api/backup/status(lecture seule) lit ce fichier (app.backup.status-path,APP_BACKUP_STATUS_PATH; vide en développement :configured: false, aucune pastille). Santé résumée, avec les mêmes règles que lehealthcheckdu service : seuls les étatsoketrunningsont sains (failed:FAILED,warning:WARNING, autre :UNKNOWN) ;NEVERsans réussite ;STALEsi la dernière réussite dépasseBACKUP_MAX_AGE_HOURS(26 h, comparé à la seconde) ;WARNINGsi le dernier test de restauration a échoué ou si une copie hors site existe dans l’état et que sa dernière réussite est absente ou plus vieille queBACKUP_OFFSITE_MAX_AGE_HOURS(50 h) ; sinonOK(une sauvegarde en cours garde la santé de la dernière réussite). Fichier absent :NEVER(« pas encore publié ») ; illisible, de plus de 64 Ko ou chemin qui est un dossier :UNKNOWN. Le détail (message, instantané, test de restauration, copie hors site) est renvoyé tel que le service l’a écrit.- La barre d’état affiche une pastille : « Sauvegarde il y a 3 h » discrète quand tout va bien, en gras avec un point d’alerte sinon (« Sauvegarde en échec », « Sauvegarde ancienne (il y a 2 j) », « Aucune sauvegarde »…), le détail en infobulle et au clic sur la pastille (clavier et toucher compris), dates en heure locale. Lecture au démarrage, au retour sur l’onglet et toutes les 15 minutes quand l’onglet est visible.
Alternatives écartées
- Monter
/backupsdans l’application : donnerait à l’application (et à une faille de l’application) la lecture de toutes les sauvegardes en clair. - Sonde HTTP du service
backupvers l’application (ou inverse) : un port et un secret de plus pour un fichier de quelques centaines d’octets. - Actuator
health: la santé des sauvegardes ne doit pas rendre l’application « non prête » ni être publique. - Page dédiée : la pastille suffit tant que tout va bien ; le détail reste dans
docs/sauvegardes.md.
Limites connues
- Sans le volume partagé (backend lancé sur l’hôte en développement), la pastille est absente.
- Aucune notification : la pastille se lit, elle ne prévient pas (l’alerte reste au déploiement, ADR 0019).
- Hors ligne, l’âge affiché (« il y a 3 h ») ne bouge plus jusqu’à la relecture suivante.