[EF-02] Rattrapage par lots de l'historique, conscient de l'état des capteurs #107
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Depends on
Reference
g2/enervision#107
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?
Exigence couverte
EF-02, EF-05, ENF-06
Épreuve servie
EC05 · Data, ETL et BI
Charge estimée
2 j.h
Ce qu'on veut obtenir
Constituer l'historique de la zone bronze par lots, en complément de la collecte à la minute du #33. L'API expose
GET /api/v1/readingspour ça, documenté comme servant à alimenter un pipeline ETL en batch, et l'historique remonte à plus d'un an.C'est ce qui donnera au modèle de quoi s'entraîner sans attendre des semaines de collecte en direct. Le #36 en dépend plus que du collecteur.
Critères d'acceptation
GET /api/v1/sensors/statusavant chaque site et saute ceux dont le capteurconsumptionest en défaut : l'état courant d'un capteur s'applique à tout son historique, un site en panne rend une fenêtre entièrement nulle. Critère amendé le 3 septembre, il disait « saute ceux qui sontcritical» ; le motif chiffré est en commentaire ci-dessous.limitpoints répartis sur la fenêtre demandée, donc une fenêtre de 24 heures aveclimit=24donne un point par heure. Le pas retenu est écrit dans le code, pas subi.endpoint=readings, jamais sousendpoint=current: les deux sources ne se mélangent pas, conformément à l'ADR 0005.GET /api/v1/alertssont ingérées et historisées, sans doublon après reprise.Comment on le vérifie
Tests tests/unit/collector/test_batch.py, tests/integration/collector/
Commande la commande de rattrapage documentée, jouée deux fois sur la même fenêtre
Preuve le décompte d'objets bronze identique après le second passage, et le taux de points obtenus par site
Hors périmètre
La collecte à la minute, qui est le #33. Le lot ne peut pas rendre un point par minute :
limitplafonne à 1000 et il en faudrait 1440 pour une journée.Le critère 1 est amendé, voici le chiffre qui le motive
Le critère disait « saute ceux qui sont
critical». Le code filtre sur le capteurconsumptionet collecte donc aussi des sitesdegraded. L'écart est délibéré, etOlivier a eu raison de demander qu'il figure ici plutôt que dans une demande de fusion.
Croisement de l'état annoncé et de ce que
/readingsrend réellement, 84 observationsdes sept sites, le 3 septembre :
overallconsumptionconsumption: failingn'a jamais rien rendu, 77 fois sur 77. C'est un prédicteurnégatif parfait, et le seul filtre qui se justifie.
overallne convient pas, pour deux raisons. Un site n'estokque 1,8 % du temps —relevé sur 280 observations, contre 69,6 %
criticalet 28,6 %degraded— ce quicondamnerait le rattrapage à ne presque jamais tourner. Et un site
degradeddont laconsommation va bien rend des valeurs : le filtrer sur
overalljetterait cesfenêtres-là sans raison.
L'effet est mesuré, sur dix passes visant 49 fenêtres : 2 fenêtres écrites avec
l'ancien filtre, 9 avec celui-ci.
L'inverse n'est pas vrai pour autant,
consumption: okne garantit rien : trois cas sursept n'ont rien rendu, un autre capteur en défaut suffisant à annuler la ligne. C'est le
critère 5 qui les rattrape — la fenêtre revenue sans aucune valeur est reportée, jamais
écrite comme vérité ni jetée.
Le critère 4 est précisé
Il disait « rejouer la même fenêtre ». C'était vrai des fonctions internes et faux
depuis la ligne de commande : les bornes étaient calées sur l'heure du lancement, donc
deux exécutions à une minute d'écart écrivaient deux jeux d'objets chevauchants. Corrigé,
et le critère dit désormais « la même commande », qui est ce qui compte pour cron.
Vérifié sur le serveur, deux passes de la même commande à 70 secondes d'écart :
Trois écritures sur trois, réécrites en place. La clé nouvelle vient d'un site redevenu
sain entre les deux passes, pas d'un décalage de la grille.
Le critère 7 reste ouvert
Il demande une exécution sur un an et sept sites avec le taux mesuré. Ce qui a été joué
porte sur trois jours. Le taux, lui, est déjà connu et il est bas : le simulateur bascule
ses capteurs toutes les trente secondes environ, et une passe n'attrape que les sites
sains à cet instant. Le rattrapage d'un an demandera donc plusieurs dizaines de passes,
et c'est ce que le manuel
docs/runbooks/collecteur.mddit de faire.