Runtime Analytics — Diagnostico y Correccion de Metricas
Section titled “Runtime Analytics — Diagnostico y Correccion de Metricas”Resumen
Section titled “Resumen”El AI-LAB Command Center (/ops/) mostraba metricas incorrectas:
- Health Score en 20/critical en vez de ~70/good
- 0/2 GPUs y 0/2 nodos online cuando ambos nodos GPU estaban operativos
- “Gateway down” y “High latency” como razones del health score
Bug 1: health_score.py leia nodos incorrectos
Section titled “Bug 1: health_score.py leia nodos incorrectos”El fichero cluster_state.json contiene dos listas distintas de nodos:
nodes[]— usada por el heartbeat/exponential backoff. Los nodos se marcan comoonline: falseystatus: "backoff_skip"tras fallos consecutivos, incluso cuando ya estan operativos de nuevo.discovered_nodes[]— generada por el descubrimiento periodico. Contiene el estado real de cada nodo con latencia, modelos y capacidades.
health_score.py y runtime_analytics.py leian de nodes[], obteniendo siempre 0 nodos online.
Solucion
Section titled “Solucion”Ambos modulos ahora leen de discovered_nodes[] con fallback a nodes[]:
discovered = state.get("discovered_nodes", [])nodes = discovered if discovered else state.get("nodes", [])Impacto
Section titled “Impacto”| Antes | Despues |
|---|---|
| 0/2 GPUs online | 2/2 GPUs online |
| -60 penalty | 0 penalty |
Bug 2: Gateway health check endpoint incorrecto
Section titled “Bug 2: Gateway health check endpoint incorrecto”health_score.py verificaba el gateway con:
curl http://localhost:8008/health # -> HTTP 404El gateway OpenAI-compatible no tiene endpoint /health. La raiz / tambien devuelve 404. El chequeo fallaba siempre, restando -15 puntos con la razon “Gateway down”.
Solucion
Section titled “Solucion”Cambiado a /metrics que es un endpoint real del gateway:
curl http://localhost:8008/metrics # -> HTTP 200Impacto
Section titled “Impacto”| Antes | Despues |
|---|---|
| ”Gateway down” (-15) | Sin penalizacion |
Bug 3: runtime_analytics.py nodos siempre 0
Section titled “Bug 3: runtime_analytics.py nodos siempre 0”El get_aggregated() en runtime_analytics.py usaba state.get("nodes", []) (mismo problema que Bug 1), por lo que el dashboard mostraba “Nodos Online: 0” y “Total: 0”.
Solucion
Section titled “Solucion”Misma correccion que Bug 1: usar discovered_nodes prioritariamente.
Impacto
Section titled “Impacto”| Antes | Despues |
|---|---|
| Nodos Online: 0 | Nodos Online: 2 |
| Total: 0 | Total: 3 |
Archivos Modificados
Section titled “Archivos Modificados”runtime/analytics/health_score.py— corregido acceso a nodos + endpoint health checkruntime/analytics/runtime_analytics.py— corregido acceso a nodosruntime/state/live_api.py— anadido handler CORSdo_OPTIONSpara peticiones cross-origin
Resultado Final
Section titled “Resultado Final”Health Score: 70/good (antes 20/critical) GPUs online: 2/2 Nodos online: 2/3 (1 nodo 1.250 offline por configuracion) Razones: ninguna