Mise en production : le tableau de bord répond de nouveau (#267) #273
No reviewers
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
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!273
Loading…
Reference in a new issue
No description provided.
Delete branch "develop"
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?
Correctif chaud. L'écran
/graphiquesest hors service en production depuis le déploiement demaindu 10/09 (#271) : les quatre fenêtres rendent 500 et l'écran affiche « Aucune source n'a répondu » sur les sept sites.Un seul changement depuis #271 : la #272, relue et approuvée par Marvin, fusionnée dans
develop.float * Decimaldans_seau_impute—SEUIL_SEAU_IMPUTEest unfloat,sum(releves_pris_en_compte)rend unDecimal/parc/mesurescomprispytest tests/unit/api— 248 passedÀ vérifier après déploiement :
https://app.g2.enervision/graphiquestrace les sept sites sur les quatre fenêtres.Motif de l'urgence : soutenance EC02 demain 11/09 à 10h45.
Les quatre fenêtres du tableau de bord rendaient 500 en production depuis le déploiement de main du 10/09 : l'écran affichait « Aucune source n'a répondu » sur les sept sites, les sept appels de courbe échouant ensemble. File "enervision_api/dashboard/repository.py", line 732, in _seau_impute return minutes_imputees >= SEUIL_SEAU_IMPUTE * minutes_retenues TypeError: unsupported operand type(s) for *: 'float' and 'decimal.Decimal' Les deux comptes n'ont pas le même type. « minutes_imputees » vient d'un count(*) filter, donc un bigint, donc un int. « minutes_retenues » vient d'un sum(releves_pris_en_compte) : PostgreSQL élargit la somme d'un bigint en numeric, et psycopg rend un Decimal. Or Decimal refuse d'être multiplié par un float, et SEUIL_SEAU_IMPUTE en est un. La garde « if not minutes_retenues or not minutes_imputees » masquait la faute sur les seaux sans imputation. Elle n'en masquait aucun ce jour-là : les vingt-cinq seaux de la fenêtre 24 h comme les huit de la fenêtre 7 j portaient tous au moins une minute reconstituée. Pourquoi la suite unitaire était verte : la fausse connexion rendait « minutes_retenues » et « minutes_ecartees » en int nu là où la base rend un Decimal — elle prenait pourtant soin de modéliser le numeric de « moyenne_kw ». Le jeu d'essai est corrigé, et il suffit à faire tomber les deux cas préexistants du #267 sur la ligne fautive. Un troisième cas nomme les deux types explicitement, pour que la couverture ne se perde pas si quelqu'un simplifie la fixture un jour. Le cas d'intégration qui aurait attrapé ceci existe (tests/integration/test_lectures_tableau_de_bord.py, la part imputée autour du seuil) mais ne tourne pas : il est marqué skipif sans base, et la chaîne ne lance que « pytest tests/unit ». Ce trou-là dépasse ce correctif et n'est pas refermé ici.