UPS Monitor — Architecture & Technical Reference
Espejo del de Wireless (su router es el GEMELO declarado:
deep_discover_service.py). Nace de la ronda del 23-08-2026 (task #255):bib_context_query(topic="ups")devolvía 30 endpoints y CERO documentación.
El contrato de nombres de métrica
El Agente compone los nombres de serie de VictoriaMetrics a partir de las CLAVES de los cubos de OIDs:
monitoring_oids→ seriesnmp_extras_{clave}(bucle extras, suelo 60 s).fast_poll_oids→ seriesnmp_fast_{clave}(bucle rápido).
La precedencia de OIDs al armar el payload del Sentinel
(terminal/api/sentinel.py): VendorProfile (prioridad) → target.config["monitoring_oids"].
MonitoringTarget NO tiene campo propio de OIDs.
Los 4 tipos de OID que el Agente implementa
Dispatch en terminal/agent/sentinel/snmp_extras.py::snmp_poll_oids; la fuente
de la verdad del lado servidor es AGENT_SUPPORTED_OID_TYPES
(monitoring/api/schemas.py), aplicada al ESCRIBIR config y fijada por el test
tests/network/test_vendor_profile_oid_types.py:
| type | Cómo lee | Para qué |
|---|---|---|
gauge (default) | SNMP GET escalar | CPU, temperatura, batería |
walk_sum | WALK + suma | clientes por radio |
walk_count | WALK + cuenta filas | 1 fila = 1 cliente |
walk_first | WALK + PRIMERA fila | columnas de tabla sin índice fijo (upsOutputTable: load %, voltajes) — implementado en v1.82.5; antes lo declaraban los 14 perfiles de SAI y caía a un GET que nunca resuelve (5 de 8 gráficas muertas de fábrica, sin error en ningún log) |
⚠️ Un type no implementado = métrica que no nace jamás, en silencio. Por eso
hay triple candado: validate-on-write en TargetConfigIn, el test de contrato
contra los perfiles sembrados Y contra los tipos que ofrece el prompt del MIB
assistant (network/services/mib_assistant.py — el origen del desajuste).
Guardia de frescura (v1.82.5, gemela de la #225 de Wireless)
deep_snmp_data es una FOTO (deep discovery) con fecha en
deep_snmp_updated_at (migración network/0060, expuesta como deep_data_as_of)
— pero la fecha solo dice cuándo se tomó: el juez de “es del AHORA” es el estado
vivo del target (_has_current_ups_data: last_status == "up"). Sin target
vivo: _ups_status = unknown (SIN fallback “hay foto ⇒ online”) y las 7 lecturas
de métricas devuelven {}. En un SAI, servir la foto vieja como presente es
mentir en un dato de seguridad eléctrica.
Frontend
static/js/pages/ups/UpsChartRegistry.js: 8 gráficas (defaults:
battery_charge, output_load, input_voltage, battery_temperature). Con
walk_first sin implementar, output_load/input_voltage —la mitad de la vista
por defecto— no podían pintar para NINGÚN fabricante. El .exe del Agente con
el fix viaja en el release ≥2.20.
Véase también
- [[crearack-tech—architecture—wireless-monitor]]
- [[crearack—ups—dashboard-and-charts]]