Files
nmon/docs/coverage.md
jleung e25143881c Device metrics API, printer fleet, profile presentation schema (v1.0.1 backend)
Profiles gain category/label/of/display/scale_by/sentinels/enum_state and component_attrs;
every pollable non-interface metric is annotated and an orphan test enforces it. New routes
GET /devices/{slug}/metrics, /metrics/graph and /printers; printer supply type/colour read at
discovery into device_components.attrs; printer_supply_empty alert; supply_replaced audit event;
docs/coverage.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lx9FNLG2CqeBbVGGd9bFsP
2026-10-23 05:33:07 +00:00

5.7 KiB

Collection coverage

What the spec's "What to collect, by device class" table (docs/spec/spec.md) asks for, against what the shipped profiles in profiles/ collect today. A metric listed here is polled, stored raw and shown on a device tab (every non-interface metric names a category; the orphan test in internal/profile/present_test.go enforces it). Gaps are stated plainly; nothing here is promised that is not collected.

Legend: yes collected and shown; partial some of it; no not collected.

Class Spec item Status Profile and metric
Every device sysUpTime yes generic: sysUpTime, hrSystemUptime
Every device hrProcessorLoad per core yes generic: hrProcessorLoad
Every device hrStorage size/used per filesystem and RAM yes generic: hrStorageUsed / hrStorageSize x hrStorageAllocationUnits (bytes, percent bar)
Every device memTotalReal / memAvailReal (UCD) yes generic: memTotalReal, memAvailReal
Servers UCD load average yes linux-netsnmp, ubiquiti-edgeos: laLoadInt
Servers swap yes linux-netsnmp: memTotalSwap, memAvailSwap
Routers, switches IF-MIB counters, ifOperStatus yes generic (Ports tab)
Routers, switches ENTITY-SENSOR-MIB temp/fan/PSU partial generic entPhySensorValue is the raw reading only: its type, scale and precision are not applied, so units are mixed (environment tab, labelled raw). No fan or PSU state. cisco-ios/cisco-nxos entSensorValue is the same
Routers, switches POWER-ETHERNET-MIB PoE per port no not in any profile
Routers, switches LLDP neighbours yes generic discovery table only (no metric)
Routers, switches BGP-4-MIB peer state and prefixes no the routing category exists but no profile fills it
Routers, switches optics DOM partial juniper-junos jnxDom* are collected but are interface metrics, so they are not on a device tab (there is no optics tab data yet); cisco entSensor DOM is not separated from the raw sensor reading
Routers, switches STP topology changes no
Routers, switches MAC/ARP table size no
Routers, switches cpmCPUTotal, jnxOperatingCPU yes cisco-ios, cisco-nxos: cpmCPUTotal5minRev; juniper-junos: jnxOperatingCPU, jnxOperatingTemp, jnxOperatingBuffer
Routers, switches Cisco memory pools yes cisco-ios: ciscoMemoryPoolUsed / Free (not as a percent; there is no total)
Switches (Ubiquiti) memory partial ubiquiti-edgeswitch, ubiquiti-unifi-switch: free / available only; CPU is a text string in that MIB and is not collected
Firewalls session count partial fortigate: fgSysSesCount (no maximum); pfsense has no vendor metrics
Firewalls VPN tunnel state no
Firewalls HA state partial fortigate: fgHaSystemMode only
Firewalls policy throughput (fgSys, panSession, pfSense) no fortigate CPU and memory only
APs, controllers client count per AP and SSID yes ubiquiti-unifi-ap: unifiVapNumStations per SSID
APs, controllers channel utilization yes ubiquiti-unifi-ap: unifiRadioCu* per radio
APs, controllers noise floor no the UniFi MIB has no such object
APs, controllers tx power yes ubiquiti-unifi-ap: unifiVapTxPower
APs, controllers AP up/down from controller no no controller integration
WISP radios, CPE signal, SNR, modulation, link capacity no no Ubiquiti airMAX, Cambium or Mimosa profile
Servers, hypervisors Proxmox push yes push receiver and the proxmox integration (not a profile)
Servers, hypervisors node_exporter, Ceph, SMART no
UPS, PDU battery charge, runtime, input/output voltage, load, output status yes apc-ups: UPS-MIB and PowerNet upsAdv/upsBasic metrics (power tab)
UPS, PDU per-outlet current (PDU MIBs), generator status no
Printers supply levels per prtMarkerSupplies yes printer: prtMarkerSuppliesLevel of prtMarkerSuppliesMaxCapacity; -3 "some remaining" and -2 "unknown" are stored and shown as words
Printers supply type and colour yes printer: prtMarkerSuppliesType and prtMarkerColorantValue, read at discovery as component attributes
Printers page count yes printer: prtMarkerLifeCount
Printers status and alerts partial printer: prtAlertSeverityLevel (severity only, not the alert description or code)
Printers paper tray levels yes printer: prtInputCurrentLevel of prtInputMaxCapacity, labelled by prtInputName
Printers hp, Brother, Xerox serial and model no serial and model are not collected; no vendor quirk profiles (printer-brother, printer-ricoh) are shipped, see below
Environment ENTITY-SENSOR-MIB partial as for routers: raw reading only
Environment temperature, humidity, door, water (NetBotz, Raritan) no no profile
Environment MikroTik health yes mikrotik-routeros: voltage, board and CPU temperature
Services ping, HTTP, DNS, TLS expiry yes checks (not profiles)

Profiles with no vendor metrics beyond generic: arista-eos, pfsense, vyos, windows-snmp.

Alerts named in the spec

Alert Status
cpu_high, memory_high, disk_full yes
ups_on_battery, ups_runtime_low yes
printer_supply_low (< 10%) yes
printer_supply_empty (level 0, critical) yes (added in v1.0.1)
temp_high (per-profile threshold) yes, for MikroTik, UPS battery and Junos sensors only
"any prtAlert of severity critical" no rule; prtAlertSeverityLevel is collected and shown, not alerted on

Printer quirk profiles (Brother, Ricoh)

Not shipped. The LibreNMS recordings (tests/snmpsim/brother*.snmprec, ricoh*.snmprec) were not used to derive a quirk set, so none is claimed. The generic printer profile matches Brother (2435) and Ricoh (367) by enterprise number.