API Rust — Conso : /api/conso en parité avec Python (t_bdd87bd2) #1679

Merged
hermes-fusion merged 1 commit from hermes/api-conso-rust into main 2026-10-15 00:15:04 +02:00
Collaborator

Porté de _tableau/serveur_conso.py et _tableau/conso_analyse.py (carte t_bdd87bd2 du chantier t_abdd8136).

La route. GET /api/conso est dans le match de main.rs ; le module vit dans rust/service/src/conso/
(mod.rs : les deux sources, le seuil des Réglages, le garde de 60 s et le 502 des deux sources muettes ;
analyse.rs + analyse/tickets.rs + analyse/series.rs : le portage de conso_analyse.py).
Variables : SERVICE_CONSO_130 (défaut le conso.json du collecteur du 130), SERVICE_CONSO_PC
(/opt/studio/conso-pc.json), SERVICE_REGLAGES (/opt/studio/reglages.json).

Aucun champ d'API changé : mêmes clés, mêmes textes, mêmes TYPES de nombres (0 n'est pas 0.0), mêmes
ordres de tableaux, mêmes codes (200, 502). Rien à signaler à svelte.

Preuves

  • cargo test --release --locked : 77 tests, 0 échec, 0 avertissement (service/tests/conso.rs : 8 tests).
  • cargo build --release --locked : propre, aucun nouvel avertissement.
  • python3 _tableau/test_conso_parite.py : 13 entrées, 0 échec — le JSON doré est RECALCULÉ avec le Python
    d'aujourd'hui par le chemin de production (serveur_conso.Conso.conso).
  • python3 _tableau/lancer-tests.py --tout --sans-couverture : 163 bancs verts, 0 rouge.
  • python3 _tableau/garde_fous.py : rien à redire (plafond de 600 lignes tenu, aucun doublon).
  • python3 _tableau/test_100_svelte_rust.py : vert — la route y est dite portée, la mesure la dit encore
    « python » parce que serveur.py la sert jusqu'au lot 3 (le manque hors onglet reste porté par t_9a4ba598).
  • curl sur le binaire réel, avec les fichiers RÉELS du 132 (conso-pc.json, reglages.json) :
    • état du jour : 502, corps identique au document de Python au caractère près
      (« collecteur du 130 injoignable : [Errno 113] No route to host ; passes Multica non relevées : multica
      agent list : code 2 ») ;
    • relevé complet : 200, 772 passes, document identique (total_24h, total_7j, top, gaspillages,
      courbes, alertes, types compris) ;
    • POST /api/conso → 405 ; le relevé du PC modifié n'apparaît qu'après les 60 s du garde.
  • 42 mutations du module font sortir le banc en 1 (aucune laissée en place) ; elles ont fait ajouter un cas
    (« cinq passes nées d'un commentaire espacées de 700 s ») que le corpus ne voyait pas.

Ce qui reste Python. serveur.py garde sa route /api/conso : son relais vers le service fait partie du
lot 3. La page de la section, elle, est déjà Svelte : Processus.svelte monte Conso.svelte dans le panneau
Processus (et l'Accueil lit la même route) — aucun .svelte touché.

Remarque d'environnement. Le collecteur du LXC 130 est injoignable depuis le 132 comme depuis le PC
(No route to host) et Multica ne répond pas : c'est l'état du jour, pas une suite de ce portage. Le
déployeur relit le collecteur AVANT ses routes, il s'arrête donc avant de juger /api/conso.

Porté de `_tableau/serveur_conso.py` et `_tableau/conso_analyse.py` (carte t_bdd87bd2 du chantier t_abdd8136). **La route.** `GET /api/conso` est dans le `match` de `main.rs` ; le module vit dans `rust/service/src/conso/` (`mod.rs` : les deux sources, le seuil des Réglages, le garde de 60 s et le 502 des deux sources muettes ; `analyse.rs` + `analyse/tickets.rs` + `analyse/series.rs` : le portage de `conso_analyse.py`). Variables : `SERVICE_CONSO_130` (défaut le `conso.json` du collecteur du 130), `SERVICE_CONSO_PC` (`/opt/studio/conso-pc.json`), `SERVICE_REGLAGES` (`/opt/studio/reglages.json`). **Aucun champ d'API changé** : mêmes clés, mêmes textes, mêmes TYPES de nombres (`0` n'est pas `0.0`), mêmes ordres de tableaux, mêmes codes (200, 502). Rien à signaler à `svelte`. **Preuves** - `cargo test --release --locked` : 77 tests, 0 échec, 0 avertissement (`service/tests/conso.rs` : 8 tests). - `cargo build --release --locked` : propre, aucun nouvel avertissement. - `python3 _tableau/test_conso_parite.py` : 13 entrées, 0 échec — le JSON doré est RECALCULÉ avec le Python d'aujourd'hui par le chemin de production (`serveur_conso.Conso.conso`). - `python3 _tableau/lancer-tests.py --tout --sans-couverture` : 163 bancs verts, 0 rouge. - `python3 _tableau/garde_fous.py` : rien à redire (plafond de 600 lignes tenu, aucun doublon). - `python3 _tableau/test_100_svelte_rust.py` : vert — la route y est dite portée, la mesure la dit encore « python » parce que `serveur.py` la sert jusqu'au lot 3 (le manque hors onglet reste porté par t_9a4ba598). - `curl` sur le binaire réel, avec les fichiers RÉELS du 132 (`conso-pc.json`, `reglages.json`) : - état du jour : **502**, corps identique au document de Python au caractère près (« collecteur du 130 injoignable : [Errno 113] No route to host ; passes Multica non relevées : multica agent list : code 2 ») ; - relevé complet : **200**, 772 passes, document identique (total_24h, total_7j, top, gaspillages, courbes, alertes, types compris) ; - `POST /api/conso` → 405 ; le relevé du PC modifié n'apparaît qu'après les 60 s du garde. - 42 mutations du module font sortir le banc en 1 (aucune laissée en place) ; elles ont fait ajouter un cas (« cinq passes nées d'un commentaire espacées de 700 s ») que le corpus ne voyait pas. **Ce qui reste Python.** `serveur.py` garde sa route `/api/conso` : son relais vers le service fait partie du lot 3. La page de la section, elle, est déjà Svelte : `Processus.svelte` monte `Conso.svelte` dans le panneau Processus (et l'Accueil lit la même route) — aucun `.svelte` touché. **Remarque d'environnement.** Le collecteur du LXC 130 est injoignable depuis le 132 comme depuis le PC (`No route to host`) et Multica ne répond pas : c'est l'état du jour, pas une suite de ce portage. Le déployeur relit le collecteur AVANT ses routes, il s'arrête donc avant de juger `/api/conso`.
Conso : /api/conso porté en Rust, en parité avec serveur_conso.py et conso_analyse.py
All checks were successful
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Successful in 32s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 30s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 33s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 14s
2a164b621d
Cause. Le chantier « tableau 132 : 100 % Svelte et 100 % Rust » (t_abdd8136) veut la section
Consommation Claude servie par le service Rust : la route est aujourd'hui dans `serveur_conso.py`
(les deux sources, le seuil des Réglages, le garde de 60 s) et le calcul dans `conso_analyse.py`,
que le service ne portait pas.

Remède. `rust/service/src/conso/` : `mod.rs` porte les deux sources (le collecteur du 130 et le
relevé poussé par le PC), la lecture du seuil d'alerte des Réglages, le garde de 60 s et le 502 des
deux sources muettes ; `analyse.rs`, `analyse/tickets.rs` et `analyse/series.rs` portent
`conso_analyse.py` — coût, rattachement à l'agent et à la cause, classement, gaspillages, courbes,
alertes. La route est dans le `match` de `main.rs`, avec `SERVICE_CONSO_130`, `SERVICE_CONSO_PC` et
`SERVICE_REGLAGES`.

Le portage garde les TYPES de nombres (`0` n'est pas `0.0` : `sum` et `max` de Python gardent le type
de leurs termes), l'arrondi décimal de `round(x, 2)`, l'ordre des tableaux et le tri stable qui
tranche les égalités. Parité mesurée par `rust/service/tests/conso.rs` contre le JSON doré de treize
entrées, que `_tableau/test_conso_parite.py` recalcule avec le Python d'aujourd'hui par le chemin de
production (`serveur_conso.Conso.conso`) ; éprouvée aussi par `curl` sur la route du binaire réel,
avec les fichiers du 132 — 502 dans l'état du jour (collecteur du 130 éteint) et 200 sur un relevé
complet de 772 passes, corps identique au document de Python. Le document est gardé 60 s, comme
Python.

La section est déjà Svelte (`Processus.svelte` monte `Conso.svelte` dans le panneau Processus) :
aucun `.svelte` touché. `serveur.py` garde sa route jusqu'au lot 3 ; `test_100_svelte_rust.py` dit
ce qui reste Python et pourquoi.
hermes-fusion deleted branch hermes/api-conso-rust 2026-10-15 00:15:04 +02:00
Collaborator

Fusionnée automatiquement par fusion-auto (forge) : CI verte (Rust et Front Svelte), PR relue (étiquette relu), sans conflit.

Fusionnée automatiquement par `fusion-auto` (forge) : CI verte (Rust et Front Svelte), PR relue (étiquette `relu`), sans conflit.
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
foXaCe/studio!1679
No description provided.