CreaRack-SL

Servicio Sentinel-Runtime del Local Agent (terminal/agent/core/sentinel_runtime.py)

Propósito

core/sentinel_runtime.py es el módulo del Local Agent que gestiona el ciclo de vida completo del Modo Sentinel (el agente actuando como sonda primaria de monitorización SNMP/TCP de un site). Nace en la v2.25.1 (28-08-2026, PR #467) cuando app_main.py se trocea por la Regla 5 (tope de 500 líneas de lógica por módulo): antes esta lógica vivía mezclada dentro de app_main.py (677 líneas), ahora tiene módulo propio (209 líneas) sin ningún cambio de comportamiento — solo movimiento de código, verificado con la suite completa de tests del agente en verde.

Contrato

FunciónQué hace
start_sentinel_mode(state, auth)Arranca el SentinelScheduler (resuelto en caliente para evitar import circular con sentinel/), aplica los targets pendientes que hubieran llegado por WS antes de que el scheduler estuviera listo, y arranca el SyncManager si hay sesión autenticada.
stop_sentinel_mode(state)Para el SyncManager y el SentinelScheduler, limpia la referencia de módulo _sentinel_scheduler y marca sentinel_enabled=false en el store local.
get_sentinel_info(state)Construye la foto de estado que consumen /info, /sentinel/status y el handler WS get_status: estado del scheduler, conexión WS, métricas pendientes de sync, última sincronización.
_start_sync_for_sentinel(state, auth)Arranca o reengancha el SyncManager a un scheduler ya corriendo, evitando reconexiones duplicadas.
_auto_resume_sentinel(state)Al arrancar el proceso, si el rol guardado en SQLite era primary y sentinel_enabled=true, retoma el Modo Sentinel sin esperar orden del SaaS.
_sentinel_scheduler (referencia de módulo)Apunta al scheduler activo — la usa network/snmp.py para compartir el mismo SnmpEngine entre Sentinel y Deep Discovery, en vez de abrir un socket UDP nuevo.

Dependencias

  • Usa: core/auth.py (sesión con el SaaS), core/connector.py (estado de la conexión WS), core/store.py (TimeSeriesStore), core/sync.py (SyncManager, ver [[entity—terminal—service—sync-throttle]]), y resuelve en caliente sentinel/scheduler.py (SentinelScheduler) para evitar el ciclo de imports.
  • Le usan: app_main.py (lifespan de arranque/parada del servidor), core/saas_commands.py (handlers WS set_role, enable_sentinel, disable_sentinel, get_status), routes/health.py, routes/saas.py, routes/sentinel.py y network/snmp.py (comparte _sentinel_scheduler para el SnmpEngine).

Ejemplo de uso

from core.sentinel_runtime import start_sentinel_mode, get_sentinel_info

# Al recibir handle_set_role(role="primary") por WS:
await start_sentinel_mode(state, auth)

# Consultado por /info o el handler WS get_status:
info = get_sentinel_info(state)  # {"running": True, "mode": "sentinel", "connected": True, ...}

Véase también

  • [[entity—terminal—service—app-main]]
  • [[entity—terminal—service—saas-commands]]
  • [[entity—terminal—service—sync-throttle]]
  • [[entity—terminal—service—connector-ws-diagnostics]]
  • [[concept—terminal—local-agent]]