V0.8.1 — Suivi du stockage et du débit d'écriture
Publiée le 18/10/2026.
Documentation fonctionnelle
Ce que change la version pour les collaborateurs
Pourquoi
L'enregistrement continu (0.8.0) écrivait sur un volume Docker sans vue d'ensemble : pas d'espace disque visible, conservation figée à 1 h, aucun débit pour savoir si une conservation plus longue tient. L'Administrateur découvrait le problème quand l'écriture passait en erreur.
Ce qu'on peut faire maintenant
- Ouvrir l'onglet Enregistrement pour suivre l'espace disque du volume (total / libre / utilisé) sans passer par la liste des Caméras.
- Régler la conservation Site (1–24 h) et un seuil de place libre ; un bandeau avertit sous le seuil sans couper l'enregistrement.
- Lire les débits d'écriture (mesurés sur les segments quand c'est possible) pour les Caméras qui enregistrent, plus une projection si toutes les Caméras actives enregistraient, avec une tenue estimée confrontée à la conservation.
- Voir un résumé par Caméra (nom, état, débit) sur Enregistrement ; garder le geste ON/OFF et le détail chemin / âge dans Administration.




Documentation technique
Spec versionnée : docs/specs/v0.8.1-suivi-du-stockage-et-du-debit-decriture.md
Issue parente : #121
V0.8.1 — Suivi du stockage et du débit d'écriture
Problem Statement
L'enregistrement continu (0.8.0) écrit des segments sur un volume Docker nommé, avec une conservation fixe d'une heure et sans vue d'ensemble. L'Administrateur ne voit ni l'espace disque disponible sur ce volume, ni le débit d'écriture (réel ou projeté), ni s'il peut allonger la conservation sans saturer. Il ne peut pas régler la durée de conservation ni un seuil de place libre : il découvre le problème quand l'écriture échoue (en erreur).
Solution
On livre une page Enregistrement (nouvel onglet) qui sert de tableau de bord et de lieu des réglages Site :
- Espace disque du volume des enregistrements (total / libre / utilisé), via le filesystem déjà monté.
- Seuil d'octets libres (défaut 1 Go, plancher bas ~100 Mo) : signal seul sur cette page quand on passe en dessous ; pas d'action automatique.
- Conservation Site globale 1–24 h (défaut 1 h) poussée en
recordDeleteAfterMediaMTX (fenêtre glissante : les segments trop vieux partent au fil de l'eau, ce n'est pas un cron horaire). - Débits : mesurés à partir des segments récents quand c'est possible, sinon repli sur le débit d'encodage connu, sinon « inconnu » ; deux lectures — Caméras qui enregistrent et projection si toutes les Caméras actives enregistraient — avec durée estimée tenable compte tenu de la place libre, confrontée à la conservation réglée.
- Résumé par Caméra : nom, état d'enregistrement, débit (mesuré ou estimé). L'interrupteur et l'indicateur détaillé (chemin, âge du segment) restent dans Administration.
Disque vraiment plein (0 Mo libres) : inchangé par rapport à 0.8.0 — échec d'écriture, indicateur en erreur, interrupteurs inchangés. Multi-disque / bind / choix de volume → version ultérieure (0.8.3 envisagée). Relecture UI → 0.8.2.
User Stories
Page et navigation
- En tant qu'Administrateur, je veux un onglet Enregistrement à côté d'Administration et Live, pour ouvrir le suivi stockage sans passer par la liste des Caméras.
- En tant qu'Administrateur, je veux voir sur cette page l'espace total, libre et utilisé du volume des enregistrements, pour savoir où j'en suis.
- En tant qu'Administrateur, je veux que l'interrupteur d'enregistrement reste dans Administration, pour ne pas déplacer le geste ON/OFF déjà appris.
Conservation et seuil
- En tant qu'Administrateur, je veux régler la durée de conservation du Site entre 1 h et 24 h (défaut 1 h), pour garder plus ou moins d'historique selon la place.
- En tant qu'Administrateur, je veux que cette durée s'applique à toutes les Caméras via le pont (même levier qu'en 0.8.0), pour un seul curseur Site.
- En tant qu'Administrateur, je veux régler un seuil d'octets libres (défaut 1 Go), pour décider d'une marge avant le mur.
- En tant qu'Administrateur, je veux un signal clair sur la page Enregistrement quand la place libre passe sous le seuil, pour réagir (raccourcir la conservation, couper des enregistrements) sans coupure automatique.
- En tant qu'Administrateur, je ne veux pas qu'un passage sous le seuil coupe l'enregistrement tout seul, pour garder la main.
- En tant qu'Administrateur, je veux qu'un disque vraiment plein se comporte comme en 0.8.0 (écriture en échec, en erreur), pour ne pas inventer un second filet magique dans cette version.
Débits et estimation
- En tant qu'Administrateur, je veux voir le débit d'écriture actuel des Caméras qui enregistrent (mesuré sur les segments récents si possible), pour connaître la charge réelle.
- En tant qu'Administrateur, je veux une projection du débit si toutes les Caméras actives enregistraient, pour dimensionner avant d'allumer tout le monde.
- En tant qu'Administrateur, je veux qu'à défaut de segments récents le Site se repose sur le débit d'encodage connu, ou affiche « inconnu », pour ne pas bloquer la page au démarrage d'un enregistrement.
- En tant qu'Administrateur, je veux une estimation de durée d'historique tenable avec la place libre (au débit actuel et au débit « toutes actives »), confrontée à la conservation réglée, pour savoir si mon réglage est réaliste.
- En tant qu'Administrateur, je veux un résumé par Caméra (nom, état, débit) sur la page Enregistrement, pour relier les chiffres aux Caméras sans dupliquer tout l'indicateur Admin.
Vocabulaire et décisions
- En tant que mainteneur, je veux que le glossaire définisse Conservation (durée), Seuil de place disque et Débit d'écriture (enregistrement), pour un vocabulaire stable.
- En tant que mainteneur, je veux un ADR qui tranche mesure sur segments + réglages Site (conservation / seuil) sur le volume actuel, pour ne pas rouvrir le débat à chaque ticket.
Implementation Decisions
- Nouvel onglet / route Enregistrement ; Administration conserve interrupteur + indicateur détaillé (état, chemin, âge).
- Métriques disque :
statvfs(ou équivalent) sur la racine du volume des enregistrements déjà montée dans l'API — pas le disque hôte entier. - Réglages Site persistés en base (conservation en heures 1–24, seuil en octets libres, défauts 1 h et 1 Go, plancher seuil ~100 Mo) ; API de lecture / mise à jour authentifiée comme le reste du Site.
- Changement de conservation → pousser
recordDeleteAfterau pont pour les chemins concernés (remplace la constante 1 h de 0.8.0 au runtime) ; le fichier de config du pont peut rester aligné sur le défaut 1 h. - Débit mesuré : taille des segments récents sous
camera-\<id>// fenêtre de temps ; repli encodage (ex. débit max ONVIF si connu) ; sinon inconnu. - Deux agrégats : somme (ou équivalent) pour enregistrement ON ; projection pour toutes les Caméras actives.
- Estimation : place libre / débit → durée ; comparer à la conservation réglée (indication visuelle OK / trop ambitieux).
- Sous le seuil : état / bandeau (et pastille d'onglet si simple) sur la page Enregistrement uniquement.
- Pas de coupe automatique au seuil ; disque plein = comportement 0.8.0.
- Glossaire + ADR nouveau (n'écrase pas ADR 0011).
- Hors CI Sonar comme critère de merge ; bugs #86 / #95 hors périmètre.
Testing Decisions
Un bon test vérifie un comportement observable (API, pont, fichiers, UI), pas le détail interne de MediaMTX couche par couche.
Seams :
- API réglages Site : GET/PATCH conservation et seuil (bornes, défauts) ; refus hors bornes.
- API (ou même ressource) métriques : espace volume, sous seuil ou non, débits / estimations dérivés de fixtures de segments ou encodage.
- Pont : après changement de conservation, chemins avec
recordDeleteAfteraligné (assertion sur la config poussée, comme pour record ON/OFF en 0.8.0). - Fichiers : débit mesuré à partir de segments de test sous
camera-\<id>/; repli sans segments. - UI : onglet Enregistrement ; affichage espace / seuil / conservation ; résumé Caméras ; interrupteur toujours en Administration.
- Tests humains : régler conservation et seuil, constater signal sous seuil (volume de test ou fixture), lire débits / estimation sur Caméra simulée qui enregistre.
Out of Scope
- Relecture / parcours des enregistrements (0.8.2).
- Plages horaires d'enregistrement.
- Bind mount, second disque, choix du volume cible (0.8.3 envisagée).
- Coupe automatique ou purge d'urgence au seuil ou au disque plein.
- Notifications hors UI (mail, etc.).
- Correction des bugs #86 et #95.
Changements apportés aux versions antérieures
| Version | Élément | Avant | Après | À annoter |
|---|---|---|---|---|
| 0.8.0 | Conservation des segments | Fixe 1 h (recordDeleteAfter: 1h), non réglable depuis l'UI | Conservation Site 1–24 h (défaut 1 h), poussée au pont | v0.8.0, ADR 0011, #115 |
Further Notes
- Intention feuille de route (hors livrable 0.8.1, à écrire via
/afr) : 0.8.3 stockage cible (disques / bind) ; 1.0.0 socle minimal livrable + refonte UI globale. - Le volume nommé Compose reste la seule cible ; cette version mesure et signale dessus, elle ne change pas où vivent les octets.