El vigilante de actividad
Un sistema puede estar perfectamente sano y no producir nada. Un cron que lleva tres días fallando, una cola con trabajo de anteayer, un puesto con el presupuesto agotado desde el día 8: todo eso devuelve 200, no escribe un solo error en el log y no entrega. El reloj dispara y Docker mantiene el proceso vivo, pero ninguna de las dos cosas responde a la pregunta que importa.
El vigilante la responde con SQL, cada seis horas (VIGILANTE_HORAS, 0 lo apaga). No gasta
tokens y no opina: las señales son hechos contables.
Las seis señales
Sección titulada «Las seis señales»| Señal | Qué mira | Gravedad |
|---|---|---|
| Crones rotos | Aprobados con 2 o más fallos seguidos | grave |
| Cola atascada | Mensajes esperando más de 2 h | grave |
| Presupuestos agotados | Puesto con el gasto del mes por encima de su tope | grave |
| Solicitudes paradas | Recursos pedidos hace más de 2 días | aviso |
| Entregas sin verificar | Trabajo hecho que nadie dio por bueno (3 días) | aviso |
| Tareas encalladas | Tareas en curso desde hace más de 3 días | aviso |
Grave significa que algo está parado y no se arregla solo. Aviso, que va lento.
Qué hace con lo que encuentra
Sección titulada «Qué hace con lo que encuentra»- Lo escribe en
organtia.vigilancia, una fila por pasada. Sin histórico no se distingue un problema puntual de algo que lleva una semana repitiéndose. - Avisa al tablero en vivo si es grave.
- Se lo deja al CEO en su bandeja de avisos, para que en su próximo turno se ocupe. Detectar sin que nadie actúe no arregla nada. Solo lo grave: si cada cosa lenta llegara a dirección, la bandeja se convertiría en ruido y se dejaría de leer, que es peor que no tenerla.
Se consulta en GET /vigilante.json:
{ "nivel": "aviso", "resumen": "1 aviso(s): 1 solicitud(es) de recurso esperando más de 2 días", "hallazgos": [ { "clave": "solicitudes_paradas", "nivel": "aviso", "detalle": ["Acceso al ERP (alta), pedida el 01-11"] } ]}Cómo está hecho, y por qué así
Sección titulada «Cómo está hecho, y por qué así»- Un hilo propio, no un cron de Agno: no hace falta despertar a ningún modelo para contar filas, y un cron gastaría turnos en algo que es una consulta.
- Una sonda rota no ciega a las demás: si una consulta revienta, se registra y las otras cinco siguen mirando. Un vigilante que se calla cuando falla una parte es peor que no tenerlo.
- Una señal existe cuando hay casos, no cuando la consulta se ejecutó:
_sondacuenta las filas yrevisardescarta las que traen cero. Sin esto, el primer vigilante anunciaba «0 crones con fallos» con gravedad grave — es el fallo que se coló y que las pruebas cazaron. - Nunca lanza: el bucle captura todo y sigue. Si el vigilante se muere, se muere el único que mira.
