[EF-05] Alertes de la source en zone argent #165
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.
Dependencies
No dependencies set
Reference
g2/enervision#165
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-05, ENF-07
Épreuve servie
EC05 · Data, ETL et BI
Charge estimée
1 j.h
Ce qu'on veut obtenir
Les alertes servies par la source s'arrêtent aujourd'hui en zone bronze : 11 546 objets collectés au fil de l'eau depuis le 3 septembre, que rien ne transforme. Ce ticket les fait entrer en zone argent comme quatrième table, pour que la zone or puisse ensuite les charger dans
public.alerteet que le tableau de bord cesse de les afficher depuis des fixtures.Le collecteur délègue déjà un traitement à cette zone :
collector/alertes.py:78range une alerte à l'horodatage illisible sousdt=inconnu, en écrivant que « la zone argent la replacera d'après son contenu ». Personne ne l'a écrit.Critères d'acceptation
silver.alerteest écrite pour une journée donnée, une ligne par alerte présente en bronze.dt=inconnuest replacée sur la journée de son horodatage.Comment on le vérifie
Hors périmètre
Le chargement de
public.alerteen base — c'est la zone or, #35. Les alertes produites par nos propres règles (source = 'regle'), qui relèvent du #39. Le découpagemessage→titre/descriptionqu'attendAlerteOut, qui est une décision d'affichage.État : la table est écrite, testée et documentée ; la zone or ne la lit pas encore
Branche
marvin/165-alertes-zone-argent, quatre commits.silver.alerteest la quatrième table de la zone argent.Les critères, un par un
silver.alerteest écrite pour une journée donnée, une ligne par alerte présente en bronze. Vérifié sur les alertes réelles du 2026-09-06, sept sites, en lecture seule : 2 984 alertes retenues, soit exactement le nombre d'objets que bronze porte pour ce jour, et 2 984alert_iddistincts. Aucune perte, aucun doublon.Les cinq types et les quatre sévérités sont écrits tels que la source les sert ; une valeur étrangère fait échouer le job.
verifier_enumerations_alerteslèveValeurEtrangereavant l'écriture et nomme l'alerte fautive — même parti pris quegold.agregation._controler_enumerations. Attrapée au chargement, la faute serait sortie deux jobs plus loin sur un numéro de ligne. Les vingt combinaisons type × sévérité de la source passent, un cas le garde.Une alerte rangée sous
dt=inconnuest replacée sur la journée de son horodatage.charger_alerteslit deux partitions par site — celle du jour etdt=inconnu— puis retient chaque alerte sur la date de SON contenu, jamais sur le segmentdt=de sa clé. C'est la promesse quecollector/alertes.pydélègue à cette zone depuis le #107 et que personne n'avait écrite. Corollaire testé : une alerte lue sousdt=inconnumais datée d'un autre jour est écartée, elle appartient à la passe de ce jour-là, qui la retrouvera au même endroit. Rien ne se perd, rien ne se duplique.Chaque ligne porte sa clé bronze.
bronze_keyrenseignée sur 100 % des lignes lues en réel — le lignage ENF-07 vaut pour les alertes comme pour les mesures.Rejouer la même journée réécrit la partition sans créer de doublon. Déduplication par
alert_iden ceinture de celle que bronze garantit déjà par le nom d'objet. Et la partition est réécrite même vide : une journée dont les alertes ont disparu de bronze doit voir la sienne se vider, sinon la zone or chargerait indéfiniment celles d'un rejeu antérieur. Un cas le garde.Les preuves
Et la chaîne complète du job sur bronze réel, sans rien écrire :
Trois choses que l'écriture a révélées
1. Le nom de fichier de test annoncé plus haut ne pouvait pas marcher.
tests/unit/collector/test_alertes.pyporte déjà ce nom, les répertoires de test n'ont pas d'__init__.py, et pytest refuse deux modules homonymes : la collecte de la suite entière échoue, alors que le fichier passe isolément — donc ça serait tombé en CI, pas en local. Les deux correctifs globaux, poser des__init__.pyou passer en--import-mode=importlib, casseraient l'import des aides_echantillonset_doubles, qui sont des modules de premier niveau partout dans la suite. Le fichier s'appelle donctest_alertes_silver.py, et la raison est écrite en tête. La ligne « Comment on le vérifie » du ticket est corrigée en conséquence.2. L'horodatage d'une alerte ne se tronque pas à la minute. Une mesure l'est parce qu'elle vit sur une grille. Une alerte n'a pas de grille, et
public.alerteest unique sur(site_id, horodatage, type, source): tronquer ferait de deux alertes du même type à douze secondes d'écart une seule alerte, et la seconde disparaîtrait sans que rien ne le dise.3. Un tiers à la moitié des alertes de la source ont une valeur EN DESSOUS de leur seuil. Sur 500 alertes échantillonnées, quel que soit le type —
threshold34/102,spike48/114,outage38/96,anomaly44/86,sensor53/102. Une alerte « Seuil de consommation dépassé » avecvalue = 70.34etthreshold = 135.0, ça se verra sur l'écran Qualité. C'est la donnée que la source sert, et l'historiser telle quelle est exactement ce que demande l'EF-05 — mais @justine, ça vaut un coup d'oeil avant la démo, et peut-être une ligne au §3 du pipeline, qui recense déjà deux anomalies connues de la source.Ce que ce ticket ne fait pas, et qui reste ouvert
public.alertereste vide :gold.agregationne lit passilver.alerte, et rien ne charge la table en base. C'était le hors-périmètre annoncé, mais il faut un ticket pour le porter, sans quoi l'écran Qualité et le pavé « alertes ouvertes » du #24 resteront sur fixtures. Le §14 du pipeline le note.marvin referenced this issue2026-09-07 10:48:16 +00:00