Admin & Monitoring
Routes réservées aux administrateurs — stats, ban IP, monitoring des microservices et gestion des incidents.
Gateway — /api/admin/gateway
/api/admin/gateway/statsStats rate-limiting : requêtes/min, IPs bannies, hit rate
/api/admin/gateway/ban-ipBannir une IP — body: { ip, reason? }
/api/admin/gateway/ban-ip/:ipDébannir une IP
Monitoring — /api/admin/monitoring
/api/admin/monitoringStatut de tous les services + latence + historique 24h
/api/admin/monitoring/service/:nameHistorique d'un service — query: hours=24
/api/admin/monitoring/users/chartGraphique connexions — query: period=30min|10min|hour|day|month
Services — /api/admin/services
/api/admin/servicesListe toutes les instances de microservices enregistrées
/api/admin/services/:typeInstances filtrées par type (users, messages, media…)
/api/admin/servicesEnregistrer manuellement une instance
/api/admin/services/:idActiver / désactiver — body: { enabled: boolean }
/api/admin/services/:idSupprimer et bannir définitivement une instance
Incidents — /api/admin/status/incidents
/api/admin/status/incidentsListe des incidents — query: includeResolved=true
/api/admin/status/incidentsCréer — body: { title, severity, message?, services?, status? }
/api/admin/status/incidents/:idMettre à jour (résolution, update…)
/api/admin/status/incidents/:idSupprimer un incident
Accès admin requis
/api/admin/* nécessitent un JWT avec role: "admin". Tout appel sans ce rôle retourne 403 Forbidden.Public (sans authentification)
/api/statusStatut public des services, incidents actifs et uptime 90 jours
/healthHealth check du gateway — { status: 'ok', uptime, connections }
/statsStatistiques temps réel — { connections, rooms }
{
"services": [
{ "service": "users", "status": "up", "responseTimeMs": 12 },
{ "service": "messages", "status": "up", "responseTimeMs": 8 },
{ "service": "media", "status": "degraded", "responseTimeMs": 340 }
],
"incidents": [],
"uptime": {
"users": [ { "date": "2026-04-01", "uptime": 100 }, ... ]
}
}Interne — /api/internal (microservices uniquement)
/api/internal/service/registerEnregistrer une instance — header: INTERNAL_SECRET — body: { id, serviceType, endpoint, domain, location, metrics }
/api/internal/service/heartbeatHeartbeat — body: { id, secret, metrics }
/api/internal/service/deregisterArrêt gracieux — body: { id, secret }
/api/internal/service/listLister toutes les instances — header: X-Internal-Secret
Endpoints internes
INTERNAL_SECRET. Tout appel non autorisé retourne 401. Ne jamais exposer ce secret côté client.