feat(admin): pousse le monitoring en WebSocket au lieu du polling client #35
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/admin-monitoring-websocket"
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?
Empilée sur #33 (encore non mergée) — voir stack-branches-on-unreviewed-pr.
Contexte
Le tableau de bord
/admin/monitoringfonctionnait en polling côté client (15 s) déclenchant une sonde active côté serveur à chaque appel — deux onglets admin ouverts = deux séries de sondes indépendantes et redondantes.Décisions actées avec vous (AskUserQuestion, voir le plan approuvé) :
Backend
ExpressServer(packages/express-tools) expose désormais sonhttp.Serversous-jacent —socket.ios'attache au serveur HTTP lui-même, pas à Express/un port.getMonitoring()tel quel), diffuse à la room"monitoring", rejoue le dernier résultat en cache à tout nouvel admin qui rejoint (pas d'attente jusqu'à une minute pour un onglet fraîchement ouvert).requireAdmin, même vérification factorisée dansresolveAdminFromToken.GET /admin/api/monitoringsupprimée.server.ts(pasapp.ts) instanciesocket.io— les tests supertest n'ont pas besoin d'un serveur WebSocket.Frontend
socket.io-client, interface volontairement petite et injectable dansMonitoringPagepour rester testable sans serveur réel.MonitoringPage:dataetconnectionStateséparés — une coupure de connexion après un premier chargement affiche un badge "reconnexion en cours" sans jamais effacer le dernier board connu. Seul le tout premier chargement affiche l'état plein-écran chargement/erreur.Tests
socket.io-clientcontre un serveur réel démarré dans le test, authentification avec un admin seedé + cookie signé, vérifie la réception demonitoring:updateet le rejet sans cookie admin valide.admin-monitoring.test.ts(route/internal/tech-steps/heartbeat, sans rapport avec ce changement) sont déplacés verstech-step-worker.routes.test.ts, leur router d'origine.admin-monitoring.cy.ts(REST) est supprimé, remplacé par le test composant.Vérification
pnpm lint: cleanpnpm build(tout le monorepo) : cleanapps/apinon exécutable cette session (Postgres/Docker injoignable, même limitation que pour #33) — le nouveau test socket.io n'a donc pas pu être run-vérifié, seulement relu attentivement et passé au lint. À faire tourner pour de vrai dès qu'un accès DB est disponible avant de considérer ce point définitivement clos.🤖 Generated with Claude Code