Aller au contenu

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étriques
  • admin/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 sessionStorage
  • admin/monitoring.html (dashboard admin) — ✅ CORRIGÉ : bug clé sessionStorage L1494 (adminTokenmonitoring_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 racine
  • admin-users.html — ✅ CORRECT : guard superadmin, adminFetch() partout, XSS protégé (esc()), validation mot de passe, superadmin non supprimable dans l'UI
  • index.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 pas passwordHash
  • AdminUserService.java — ✅ CORRECT : BCrypt partout, superadmin protégé, bootstrap avec resync mot de passe
  • UserController.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 sur http://localhost:8080
  • Cause : server.js n'avait pas de route GET /config.js — Express servait les fichiers statiques de public/ mais config.js n'existait pas en tant que fichier physique
  • Fix : Ajout route dynamique dans server.js : app.get('/config.js', ...) retournant window.__CONFIG__ = ${JSON.stringify(PUBLIC_CONFIG)}
  • Impact : Rebuild image perfshop-monitoring v31

Correction bug #2 — Chaos backend toujours à 0% (monitoring admin)

  • Symptôme : Grille chaos backend affiche toutes les anomalies à 0% / Inactif même avec du chaos actif
  • Cause : Deux problèmes imbriqués : (1) URL /api/admin/chaos/public/status retourne { 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.js critique, warning parsing resp.backend
  • dev/monitoring.md — section 4 onglets → architecture deux niveaux + 7 onglets admin, endpoints enrichis
  • dev/deploy.md — correction "Monitoring restart suffit" → rebuild obligatoire si server.js modifié

🤖 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%