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]]
Referenciado desde
- Incidente 24-08-2026 · el cortacircuitos mixto silenció el SNMP vivo del CCIB 15 minutos
- Incidente 24-08-2026 · el motor SNMP quedaba corrupto tras cuelgues seguidos — timeout duro + autocuración (Agente 2.21.2→2.21.3)
- POST /api/monitoring/targets/{target_id}/tcp/check — Sonda TCP Bajo Demanda
- Remate de la sonda TCP: supresión inteligente de falsos positivos (v1.63.4)
- Sonda TCP — Equipos que bloquean ICMP dejan de salir "down" falsos
- tcp_service: Sonda TCP con Guardia SSRF