Ir al contenido

API de alarmas y salud

dtvsold revisa el router cada minuto y mantiene un registro de alarmas en su base de datos: una fila por cada condición en falla, identificada por una clave estable (por ejemplo bond0/eno2/link). Una alarma se activa después de 2 revisiones fallidas seguidas (un servicio crítico caído y el servicio DHCP se activan de inmediato) y se borra después de 2 revisiones correctas. Cada activación y borrado también se registra como un evento del historial. Las alarmas borradas y los eventos con más de 90 días de antigüedad se eliminan.

Qué se revisa: todo lo que informa GET /alerts (DHCP, VLAN, pools de direcciones, clientes desconocidos, CGNAT, anti-spoofing, el recolector de OLT y las advertencias de fibra, la licencia) además del propio router: miembros del bond sin enlace o fuera del agregador LACP, el enlace de subida caído o sin ruta predeterminada, puertos con direcciones o VLAN sin portadora, enlaces inestables (flapping), servicios y temporizadores del router fallidos o detenidos, discos llenándose (advertencia al 90 %, crítico al 95 %), CPU, memoria, procesos terminados por falta de memoria (OOM), temperaturas, seguimiento de conexiones (conntrack) y errores de puertos.

Ambos endpoints son de solo lectura y no tienen forma /api?action=. El equivalente en la CLI es dtvsol alarms. Autenticación y errores: consulte la descripción general de la API.

Campo Significado
area olt, onu, network, server o services (derivado de source).
key Identificador estable de la condición.
source La revisión: p. ej. link, uplink, bond, interface, nic, cpu, memory, temp, conntrack, disk, service, timer, dhcp, dhcp-pool, stranger, cgnat, spoof, olt, fiber, licence.
level critical, warning o info.
text Descripción legible por personas.
detail Datos adicionales de la revisión (objeto o null).
first_seen, last_seen YYYY-MM-DD HH:MM:SS.
cleared Cuándo se borró, o null mientras está activa.
count Entero que se guarda con la fila de la alarma.

Las alarmas activas, primero las críticas y luego las más antiguas. Con all=1, las alarmas borradas en los últimos 7 días se muestran después de las activas. Con history=N, en su lugar se devuelven las últimas N activaciones y borrados (los más recientes primero).

Nombre En Tipo Notas
all query boolean 1 agrega las alarmas borradas en los últimos 7 días.
history query integer Devuelve los últimos N eventos de activación/borrado (1–1000; 50 cuando no es un número positivo). Tiene prioridad sobre all.
Ventana de terminal
curl -s "http://ROUTER-IP:8880/alarms?all=1" -H "X-API-Key: YOUR_API_KEY"
{
"count": 1,
"generated": "2026-09-28 10:40:00",
"checked": {
"at": "2026-09-28 10:39:58",
"took_ms": 412,
"errors": [],
"health": {"cpu": {"…": "…"}, "memory": {"…": "…"}, "ports": ["…"]}
},
"alarms": [
{
"area": "network",
"key": "bond0/eno2/link",
"source": "link",
"level": "warning",
"text": "bond0: member eno2 has no link",
"detail": null,
"first_seen": "2026-09-28 09:12:00",
"last_seen": "2026-09-28 10:39:58",
"cleared": null,
"count": 1
}
]
}

count es el número de alarmas activas (las borradas que devuelve all=1 no se cuentan). checked describe la última revisión ejecutada (null antes de la primera); checked.errors enumera lo que no pudo revisar.

Forma de historial:

Ventana de terminal
curl -s "http://ROUTER-IP:8880/alarms?history=20" -H "X-API-Key: YOUR_API_KEY"
{
"count": 2,
"generated": "2026-09-28 10:40:00",
"events": [
{"area": "services", "at": "2026-09-28 10:05:00", "kind": "clear", "level": "warning",
"key": "dhcp-pool/vlan100", "source": "dhcp-pool", "text": "…"},
{"area": "services", "at": "2026-09-28 09:30:00", "kind": "raise", "level": "warning",
"key": "dhcp-pool/vlan100", "source": "dhcp-pool", "text": "…"}
]
}

Errores: 405 para cualquier método distinto de GET; 500 con {"ok": false, "code": 500, "error": …} cuando no se puede leer la base de datos.

Las lecturas actuales de cada área, que se muestran junto a las alarmas de esa área en la pestaña Alarms del monitor. Todo se lee de datos que el demonio ya conserva; nada de esto consulta a una OLT.

Nombre En Tipo Notas
area query string olt, onu, network, server o services. Omítalo para obtener todas las áreas.

Qué contiene cada área:

  • server: de la última revisión de alarmas: cpu, load, memory, temps, disks, conntrack, uptime_s, units (los servicios del router) y measured (cuándo).
  • network: ports (tasas y errores de la última revisión), bonds (modo, miembros, estado del enlace, pertenencia al agregador LACP, fallos de enlace), uplinks (activo / portadora) y default_routes.
  • olt: por cada OLT registrada: estado del recolector (ok, at, age_s, took_ms, error), número de puertos PON, puertos en uso, ports_dark (puertos PON cuyas ONT están todas fuera de línea), tarjetas, ONT y ONT en línea, errores.
  • onu: por OLT: total de ONT, conteos por estado, causas de desconexión, luz recibida por bandas (good de −8 a −25 dBm, weak de −25 a −27 dBm, too_weak por debajo de −27 dBm, too_strong por encima de −8 dBm) y las cinco ONT más débiles.
  • services: interfaces servidas por DHCP, número de clientes heredados, servicios por estado, CGNAT (enabled, iface, assigned, capacity, free) y anti-spoofing (enabled, mode, paquetes IPv4/IPv6/ARP descartados, last_hour).
Ventana de terminal
curl -s "http://ROUTER-IP:8880/health?area=onu" -H "X-API-Key: YOUR_API_KEY"
{
"ok": true,
"generated": "2026-09-28 10:41:00",
"area": "onu",
"health": {
"olts": [
{
"olt": "olt-1",
"at": "2026-09-28 10:40:12",
"total": 412,
"states": {"online": 398, "offline": 14},
"offline_causes": {"power off": 9, "fiber cut": 5},
"light": {"good": 390, "weak": 6, "too_weak": 2, "too_strong": 0},
"weakest": [{"fsp": "0/1/3", "ont_id": 12, "rx_dbm": -28.4, "description": "…"}]
}
]
}
}

Sin area, la respuesta es {"ok": true, "generated": …, "areas": {"olt": …, "onu": …, "network": …, "server": …, "services": …}}.

Errores: 400 ("area is one of olt, onu, network, server, services", es decir, el área debe ser una de esas) para un área desconocida; 405 para cualquier método distinto de GET.

Este sitio fue escrito con ayuda de IA y revisado por nuestro equipo.