CreaRack-SL

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) y tcp_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._targets que tengan tcp_enabled=True y tcp_port > 0.

Modelo de datos

Clase SentinelTarget en scheduler.py extendida con:

  • tcp_enabled: bool = False
  • tcp_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]]