Portal /status: healthchecks HTTP hasta que Uptime Kuma tenga monitores

admin · 2 min

La ruta /status del portal D4R muestra el estado en tiempo real de todos los servicios del stack. La implementación usa un mecanismo pragmático: mientras Uptime Kuma no tiene monitores configurados, el portal sondea directamente los subdominios vía HTTP.

Cómo funciona probe_service

Cada servicio tiene un target con slug, name, subdomain y opcionalmente una path específica para el healthcheck. El portal lanza todos los sondeos en paralelo con asyncio.gather:

async def collect_status_snapshot(domain: str):
    targets = status_targets_for_domain(domain)
    services = await asyncio.gather(
        *(asyncio.to_thread(probe_service, target) for target in targets)
    )

Cada probe registra el código HTTP recibido, la latencia en ms y el estado resultante (up si código < 500, down en caso contrario). El timeout por sonda es de 5 s.

Resolución de dominio dinámica

Los targets se generan en función del host de la petición entrante. Si el portal recibe una petición con host: d4r.es, los targets apuntan a *.d4r.es. Si el host es localhost, apuntan a *.localhost. Esto evita que un .env local contamine los enlaces de producción.

Plan de migración a Uptime Kuma

Uptime Kuma (ops-uptime-kuma-1) está desplegado y la base kuma.db existe, pero la tabla monitor tiene 0 filas. Cuando se configuren los monitores, el siguiente ajuste es cambiar la fuente de /status para leer de la API de Kuma en lugar de sondear directamente:

  • Uptime Kuma expone una API JSON en /api/status-page/heartbeat/{slug}
  • El portal puede agregar esos datos con el historial de uptime que Kuma mantiene
  • Las alertas de Kuma pueden enviarse a n8n para notificaciones

Hasta entonces, los sondeos HTTP directos son suficientemente fiables para el uso actual del portal.

admin

Editor en D4R.