Jalon : la clé de signature au coffre, l'API et le tableau de bord démarrent #173

Merged
lenaic merged 6 commits from develop into main 2026-09-07 14:19:18 +00:00
Owner

Six commits, dont le seul qui compte pour le serveur : la clé de signature de l'API est au coffre (#171).

Ce que ça débloque

Le déploiement du 07/09 à 13h52 est sorti en failed=0 et a sauté la pile api, exactement comme le rôle est fait pour le faire :

vault_api_jwt_secret absente ou plus courte que 32 caractères : api.env n'est
pas écrit, la pile api sera sautée, et le reste du socle part quand même.

Cette pile porte deux conteneurs, ev-api et ev-dashboard-build. Le serveur a donc aujourd'hui la chaîne de données complète et rien à montrer : app.g2.enervision/api répond 502, rien n'écoute sur le port 8000.

Avec la clé, api.env est rendu, la pile démarre, l'API sert la base et le tableau de bord est construit.

Le reste

L'écran Qualité du tableau de bord (#156) : disponibilité par site, part de points imputés, et le bouton Réessayer qui ne recharge que son propre bloc.

À quoi s'attendre pendant le déploiement

Il sera long, cinq à dix minutes. app_compose_wait_timeout est à 600 s pour cette raison : au premier passage ev-api construit son environnement Python depuis PyPI et ev-dashboard-build fait un npm ci puis un vite build. Les passages suivants sont courts, l'environnement vit dans un volume nommé.

PostgreSQL sera recréé, comme à chaque passage : le volume survit, les connexions tombent. Le collecteur écrit dans MinIO et non en base, ce qui a été mesuré sur les deux déploiements d'aujourd'hui, huit passes réussies et zéro erreur pendant la bascule.

Critères de sortie

  • Le déploiement sort en failed=0, et la pile api n'est pas sautée
  • https://app.g2.enervision/api/v1/sites répond 200, et non 502
  • https://app.g2.enervision sert le tableau de bord, les quatre écrans compris
  • ev-api et ev-dashboard-build sont dans docker ps
  • La relève de la minute n'a pas de trou pendant la bascule

Si ça tourne mal

main revient à son commit précédent et le déploiement se rejoue. Le socle est reconstructible, ça a été fait deux fois aujourd'hui.

Six commits, dont le seul qui compte pour le serveur : **la clé de signature de l'API est au coffre** (#171). ## Ce que ça débloque Le déploiement du 07/09 à 13h52 est sorti en `failed=0` et a sauté la pile `api`, exactement comme le rôle est fait pour le faire : ``` vault_api_jwt_secret absente ou plus courte que 32 caractères : api.env n'est pas écrit, la pile api sera sautée, et le reste du socle part quand même. ``` Cette pile porte **deux** conteneurs, `ev-api` et `ev-dashboard-build`. Le serveur a donc aujourd'hui la chaîne de données complète et rien à montrer : `app.g2.enervision/api` répond **502**, rien n'écoute sur le port 8000. Avec la clé, `api.env` est rendu, la pile démarre, l'API sert la base et le tableau de bord est construit. ## Le reste L'écran Qualité du tableau de bord (#156) : disponibilité par site, part de points imputés, et le bouton Réessayer qui ne recharge que son propre bloc. ## À quoi s'attendre pendant le déploiement **Il sera long, cinq à dix minutes.** `app_compose_wait_timeout` est à 600 s pour cette raison : au premier passage `ev-api` construit son environnement Python depuis PyPI et `ev-dashboard-build` fait un `npm ci` puis un `vite build`. Les passages suivants sont courts, l'environnement vit dans un volume nommé. PostgreSQL sera recréé, comme à chaque passage : le volume survit, les connexions tombent. Le collecteur écrit dans MinIO et non en base, ce qui a été mesuré sur les deux déploiements d'aujourd'hui, huit passes réussies et zéro erreur pendant la bascule. ## Critères de sortie - [ ] Le déploiement sort en `failed=0`, et la pile `api` n'est **pas** sautée - [ ] `https://app.g2.enervision/api/v1/sites` répond **200**, et non 502 - [ ] `https://app.g2.enervision` sert le tableau de bord, les quatre écrans compris - [ ] `ev-api` et `ev-dashboard-build` sont dans `docker ps` - [ ] La relève de la minute n'a pas de trou pendant la bascule ## Si ça tourne mal `main` revient à son commit précédent et le déploiement se rejoue. Le socle est reconstructible, ça a été fait deux fois aujourd'hui.
lenaic self-assigned this 2026-09-07 14:12:20 +00:00
- api/glossaire.js, TracabiliteDetail.vue : develop avait fait le même
  déplacement de METHODE/QUALITE en parallèle, avec une seule fonction
  libelleMethode (pas de libellé court séparé). On garde sa forme, plus
  simple et sans consommateur du libellé court dans cette branche.
- stores/graphique.js, GraphiquesView.vue(.test.js) : develop a ajouté
  afficherTousLesSites() et un message distinct par type de panne
  (référentiel en panne + Réessayer, parc vide, session expirée). On
  garde ces ajouts et on conserve le silence sur 401 de cette branche
  (chargerSites ne pose plus jamais erreurSites sur une session expirée),
  ce qui rend l'ancien message « Session expirée » de develop inatteignable
  derrière la modale de reprise — retiré avec son test.
- graphiqueUtils.js(.test.js) : formaterPct (cette branche) et
  graduationsY (develop) cohabitent, ajouts indépendants.
dashboard : Réessayer sur l'écran Qualité ne recharge que son propre bloc
All checks were successful
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 8s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 25s
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 38s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 5m17s
a9bb05c75f
chargerSynthese, chargerSites et chargerAlertes deviennent publics dans
stores/qualite.js (au lieu d'être privés et appelés seulement via
Promise.all dans charger()). Les boutons « Réessayer » de SyntheseQualite
et TableauQualite ciblent maintenant leur bloc, comme le fait déjà
SyntheseParc. Avant ce correctif, cliquer Réessayer sur un bloc en échec
rappelait store.charger() en entier et faisait clignoter les autres blocs
— déjà affichés avec leurs données — retour à leur état « Chargement… ».
Fusionne develop : résout les conflits de la #156
All checks were successful
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 8s
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 39s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 33s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 5m10s
04a66e1303
Les huit fichiers en conflit avaient déjà leur version à jour côté
develop (méthode de reconstitution scindée libellé/description,
formaterJour, gestion de session expirée dans le store graphique,
tests d'alertes/glossaire) — cette branche avait simplement pris du
retard. Résolu en gardant la version develop partout, sauf le test
GraphiquesView.test.js où les deux mêmes cas existaient en double
(ordre différent) : gardée une seule fois, dans l'ordre de develop.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SKNWNe8igWLfyV6f9Zfnx3
Merge pull request 'dashboard : écran Qualité — disponibilité par site et part de points imputés (#24)' (#156) from marvin/24-ecran-qualite into develop
Some checks failed
Intégration / Contrôles statiques du dépôt (push) Successful in 8s
Intégration / Workflows — lint et audit de sécurité (push) Successful in 22s
Intégration / Tableau de bord — dépendances, tests et construction (push) Successful in 37s
Intégration / Python — qualité, tests et dépendances (push) Has been cancelled
2e56aaf6b2
Reviewed-on: https://10.105.200.41/g2/enervision/pulls/156
Reviewed-by: gabriel <gabriel@noreply.10.105.200.41>
infra: la clé de signature de l'API entre au coffre (#113)
Some checks failed
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 7s
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 43s
Infra Ansible / Playbooks Ansible valides (pull_request) Has been cancelled
Intégration / Python — qualité, tests et dépendances (pull_request) Has been cancelled
Intégration / Workflows — lint et audit de sécurité (pull_request) Has been cancelled
683ef069fb
Sans vault_api_jwt_secret, le rôle app n'écrit pas api.env et la pile api est
sautée : ni ev-api ni ev-dashboard-build ne démarrent. Le déploiement du 07/09
à 13h52 l'a signalé et est sorti en failed=0, comme prévu.

token_urlsafe(48), 64 caractères. Le fichier reste chiffré en AES256.
Merge pull request 'infra : la clé de signature de l'API entre au coffre (#113)' (#171) from lenaic/113-cle-signature-api into develop
Some checks failed
Infra Ansible / Playbooks Ansible valides (push) Has been cancelled
Intégration / Contrôles statiques du dépôt (push) Successful in 6s
Intégration / Workflows — lint et audit de sécurité (push) Successful in 24s
Intégration / Tableau de bord — dépendances, tests et construction (push) Successful in 36s
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 39s
Intégration / Contrôles statiques du dépôt (pull_request) Failing after 4s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 19s
Infra Ansible / Playbooks Ansible valides (pull_request) Successful in 1m12s
Intégration / Python — qualité, tests et dépendances (push) Successful in 5m20s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 5m18s
58f4c70645
Reviewed-on: https://10.105.200.41/g2/enervision/pulls/171
Reviewed-by: gabriel <gabriel@noreply.10.105.200.41>
gabriel approved these changes 2026-09-07 14:13:09 +00:00
lenaic merged commit 4689705868 into main 2026-09-07 14:19:18 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
g2/enervision!173
No description provided.