Session 12 — Revue de code pages monitoring & chaos-admin + corrections bugs production¶
Durée : ~4 heures
Conversations : 1
Objectif initial : Revue de code complète des pages HTML monitoring et chaos-admin
Objectif final : Pages auditées, bugs production corrigés, auth admin unifiée (table admin_users)
✅ Réalisations Session 12¶
Revue de code — monitoring/public/
index.html(page élèves) — ✅ CORRECT : 3 tabs Backend/Frontend/Vue Générale, bouton ⚙️ Admin, config.js correct (./config.js), aucun résidu chaos, 5 setIntervals métriquesadmin/index.html(login admin) — ✅ CORRECT : config.js../config.js, fallback URL production, guard redirection si déjà auth, POST/api/admin/login, stockage 3 clés sessionStorageadmin/monitoring.html(dashboard admin) — ✅ CORRIGÉ : bug clé sessionStorage L1494 (adminToken→monitoring_admin_token) qui empêchait silencieusement le clear des logs métier
Revue de code — chaos-admin/public/
login.html— ✅ CORRECT : auth dual POST, stockage 6 clés sessionStorage, config.js racineadmin-users.html— ✅ CORRECT : guard superadmin,adminFetch()partout, XSS protégé (esc()), validation mot de passe, superadmin non supprimable dans l'UIindex.html(chaos principal) — ✅ CORRECT : guard auth, bouton Administration conditionnel superadmin, logout vide 6 clés + appel/api/admin/logout, refresh auto 5s
Revue de code — backend
AdminController.java— ✅ CORRECT : auth dual-path session+token,isSuperAdmin()sur tous les endpoints accounts,adminToDto()n'expose paspasswordHashAdminUserService.java— ✅ CORRECT : BCrypt partout, superadmin protégé, bootstrap avec resync mot de passeUserController.java— ✅ CORRECT : failles S3/S9/A9 intentionnelles correctement encadrées et documentées
Correction bug #1 — config.js 404 (monitoring admin)
- Symptôme :
Refused to execute script from '.../config.js' because its MIME type ('text/html') is not executable+ toutes les requêtes chaos tombent surhttp://localhost:8080 - Cause :
server.jsn'avait pas de routeGET /config.js— Express servait les fichiers statiques depublic/maisconfig.jsn'existait pas en tant que fichier physique - Fix : Ajout route dynamique dans
server.js:app.get('/config.js', ...)retournantwindow.__CONFIG__ = ${JSON.stringify(PUBLIC_CONFIG)} - Impact : Rebuild image
perfshop-monitoringv31
Correction bug #2 — Chaos backend toujours à 0% (monitoring admin)
- Symptôme : Grille chaos backend affiche toutes les anomalies à
0% / Inactifmême avec du chaos actif - Cause : Deux problèmes imbriqués : (1) URL
/api/admin/chaos/public/statusretourne{ backend:{...}, frontend:{...} }(objet wrappé) — (2) le code itérait sur les clés racine au lieu des clés d'anomalies → aucun match - Tentative incorrecte : Changement URL vers
/api/chaos/public/status→ 404 (route inexistante) - Fix final : URL restaurée + extraction
resp.backend:const chaos = resp.backend || resp
Documentation MkDocs
monitoring/dashboard.md— réécriture complète : architecture deux niveaux, 7 onglets admin, section auth sessionStorage, route/config.jscritique, warning parsingresp.backenddev/monitoring.md— section 4 onglets → architecture deux niveaux + 7 onglets admin, endpoints enrichisdev/deploy.md— correction "Monitoring restart suffit" → rebuild obligatoire siserver.jsmodifié
🤖 Erreurs imputables à Claude AI — Session 12¶
❌ Erreur S12-1 — Mauvaise analyse de la route /api/chaos/public/status¶
Ce que j'ai proposé : Correction de l'URL vers /api/chaos/public/status en affirmant que la route /api/admin/chaos/public/status "n'existait pas".
Ce qui s'est passé : La première URL était valide — ChaosController combine @RequestMapping("/api/admin/chaos") + @GetMapping("/public/status"). La nouvelle URL était inexistante → 404 en production.
Pourquoi c'était une erreur : Mauvaise combinaison @RequestMapping de classe + @GetMapping de méthode. Le bon réflexe : vérifier la combinaison complète avant de déclarer une route inexistante.
Temps perdu : ~15 min | Sévérité : ⭐⭐⭐
❌ Erreur S12-2 — Fix incomplet : URL sans extraction resp.backend¶
Ce que j'ai proposé : Le premier fix ne corrigeait que l'URL sans extraire resp.backend de la réponse wrappée.
Ce qui s'est passé : Même avec la bonne URL, la réponse { backend:{...}, frontend:{...} } était itérée au niveau racine → beChaosDesc ne matchait aucune clé → toujours 0%.
Pourquoi c'était une erreur : J'aurais dû analyser la structure complète de la réponse JSON avant de proposer un fix. Le Syndrome du Fix Théorique Sans Validation Empirique — fix partiel non testé mentalement jusqu'au bout.
Temps perdu : inclus dans S12-1 (~15 min total) | Sévérité : ⭐⭐
📊 Récapitulatif Session 12¶
| # | Erreur | Temps perdu | Sévérité |
|---|---|---|---|
| S12-1 | Route /api/chaos/public/status déclarée inexistante à tort |
~15 min | ⭐⭐⭐ |
| S12-2 | Fix URL sans extraction resp.backend (fix partiel) |
inclus S12-1 | ⭐⭐ |
| TOTAL | ~15 min |
Pattern : Le Syndrome du Fix Théorique Sans Validation Empirique (S12-2) sous forme de fix partiel. Le bon réflexe : tracer la donnée de bout en bout (URL → réponse JSON → parsing → affichage) avant de proposer un correctif.
🎓 Conclusion Session 12¶
✅ Revue de code complète — 3 pages monitoring + 3 pages chaos-admin + 3 classes Java — aucun problème bloquant
✅ Bug config.js résolu — route /config.js dynamique ajoutée dans server.js, rebuild monitoring v31
✅ Bug chaos backend 0% résolu — extraction resp.backend + URL correcte restaurée
✅ Documentation MkDocs mise à jour — 3 fichiers : dashboard.md (réécriture), monitoring.md, deploy.md
Ratio temps productif / temps total : ~94%