CreaRack-SL

UPS Monitor — Architecture & Technical Reference

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 → serie snmp_extras_{clave} (bucle extras, suelo 60 s).
  • fast_poll_oids → serie snmp_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:

typeCómo leePara qué
gauge (default)SNMP GET escalarCPU, temperatura, batería
walk_sumWALK + sumaclientes por radio
walk_countWALK + cuenta filas1 fila = 1 cliente
walk_firstWALK + PRIMERA filacolumnas 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]]