sentinel/tcp_check.py — Loop Asyncio de Sondeo TCP del Agente
Propósito
Loop asyncio en el Local Agent que prueba puertos TCP de targets de la LAN. Estado: dormido (sin bump AGENT_VERSION aún) — despierta cuando el .exe reciba actualización (tanda #196/#197).
Función principal
async def tcp_loop(sched: SentinelScheduler):
"""Sondea targets con tcp_enabled en ventana PING_FLOOR-PING_CAP."""
- Corre cada
sched._tick(1s). - Selecciona targets vencidos (cadencia configurable).
- Ejecuta sondeos en paralelo (semáforo 20, timeout 3s).
- Escribe métricas
tcp_up(0.0/1.0) ytcp_latency(ms).
Sub-función: _probe_one()
async def _probe_one(target) -> (target, bool, float):
"""Abre conexión a target.ip:tcp_port, devuelve (target, up, latency_ms)."""
- Usa
asyncio.open_connection()(DNS + SYN). - Timeout 3.0s.
- Retorna tupla: target, booleano up, latencia.
Integración
En sentinel/scheduler.py:
- Importado en
_staggered_loop(). - Tareas asyncio creadas con
asyncio.create_task(..., name="sentinel_tcp"). - Targets leídos de
sched._targetsque tengantcp_enabled=Trueytcp_port > 0.
Modelo de datos
Clase SentinelTarget en scheduler.py extendida con:
tcp_enabled: bool = Falsetcp_port: int = 0
Poblada desde MonitoringTarget via from_store_row().
Métricas
- tcp_up: 1.0 si puerto acepta, 0.0 si rechaza/timeout.
- tcp_latency: ms del handshake (solo si up).
Escriben en store SQLite, luego ingest REST del Agente envía al SaaS → sentinel_ingest.py → persiste en BD.
Constantes
TCP_TIMEOUT_S = 3.0
MAX_CONCURRENT_TCP = 20
Tests
Incluidos en tests/api/test_tcp_probe.py (cobertura de lote, metrics, circuit breaker).
Véase también
- [[entity—monitoring—service—tcp-service]]
- [[entity—monitoring—endpoint—tcp-check]]
- [[entity—monitoring—model—monitoring-target]]
- [[feature—monitoring—sonda-tcp]]
- [[concept—monitoring—cns]]