Modem and WAN: reads fiber light levels, PON and WAN state from the BGW320 without a login, with a WAN / Fiber panel, Rx trend, and alerts. WAN outages and RPDU restarts come from the UniFi log, because real outages lasted about 2 minutes against a 5 minute poll.
Device pages and search: dashboard search by hostname, IP, MAC, model, or interface, and one page per device. All Link Debug data moved into expandable rows; /links redirects home. The dashboard is reordered.
Monitoring fixes: a dead host now alerts (it previously just vanished), Prometheus outages alert, failed Pulse pings count as unknown, and new ports no longer show false traffic spikes.
UTC database sessions: a non-UTC database server shifted displayed ages and timed suppression expiries.
Effects on deploy
New tickets are possible immediately if a configured host has already stopped reporting.
Modem features stay off until modem is added to the production config.json. Device pages work without it.
The modem_samples table is created at monitor startup, which needs CREATE on the database user.
The UniFi log is read from first run onward, so past outages don't create tickets.
Testing
188 tests pass; flake8 and ESLint are clean.
Run end to end with live UniFi, Prometheus, and modem data against a temporary database with ticketing off, and checked in a browser on desktop and mobile. Replaying the real Nov 4 log found both outages and the RPDU restart.
Not tested on production. scripts/demo/capture.py was updated but not run.
Follow-ups
Retake README screenshots after the layout settles. The Link Debug images are removed; the dashboard images are out of date.
## Summary
- **Modem and WAN:** reads fiber light levels, PON and WAN state from the BGW320 without a login, with a WAN / Fiber panel, Rx trend, and alerts. WAN outages and RPDU restarts come from the UniFi log, because real outages lasted about 2 minutes against a 5 minute poll.
- **Device pages and search:** dashboard search by hostname, IP, MAC, model, or interface, and one page per device. All Link Debug data moved into expandable rows; `/links` redirects home. The dashboard is reordered.
- **Monitoring fixes:** a dead host now alerts (it previously just vanished), Prometheus outages alert, failed Pulse pings count as unknown, and new ports no longer show false traffic spikes.
- **UTC database sessions:** a non-UTC database server shifted displayed ages and timed suppression expiries.
## Effects on deploy
- New tickets are possible immediately if a configured host has already stopped reporting.
- Modem features stay off until `modem` is added to the production `config.json`. Device pages work without it.
- The `modem_samples` table is created at monitor startup, which needs `CREATE` on the database user.
- The UniFi log is read from first run onward, so past outages don't create tickets.
## Testing
- 188 tests pass; flake8 and ESLint are clean.
- Run end to end with live UniFi, Prometheus, and modem data against a temporary database with ticketing off, and checked in a browser on desktop and mobile. Replaying the real Nov 4 log found both outages and the RPDU restart.
- Not tested on production. `scripts/demo/capture.py` was updated but not run.
## Follow-ups
- Retake README screenshots after the layout settles. The Link Debug images are removed; the dashboard images are out of date.
- Topology diagram redesign.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Modem and WAN:
- Poll the BGW320 status pages read-only for light levels, PON and WAN
state, with a WAN / Fiber panel, 7-day Rx trend, and alerts on WAN down,
optical limits, and Rx drift
- Read WAN outages and Smart Power restarts from the UniFi system log,
since outages can be over between 5 minute polls
Device pages:
- Add device search to the dashboard and a page per host, switch, router,
AP, PDU, or modem
- Move all Link Debug data into expandable rows there; /links redirects
- Collect UDM ports and UniFi device details (firmware, load, WAN, outlets)
- Reorder the dashboard
Monitoring fixes:
- Alert when a configured host stops reporting: its series disappear
rather than reporting down, so a dead host never raised an alert
- Alert on Prometheus outages instead of blanking the dashboard
- Treat a failed Pulse ping as unknown rather than host unreachable
- Stop new switch ports reporting lifetime bytes as one interval's rate
- Run database sessions in UTC: other server time zones shifted displayed
ages and timed suppression expiries
Also log every avatar 404 reason, add a favicon, and correct the WAN link
labels (1G on Port 9, not 10G SFP+).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jared
merged commit e32499b7f6 into main2026-11-04 23:47:37 -05:00
jared
deleted branch device-pages-and-wan-monitoring2026-11-04 23:47:37 -05:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
/linksredirects home. The dashboard is reordered.Effects on deploy
modemis added to the productionconfig.json. Device pages work without it.modem_samplestable is created at monitor startup, which needsCREATEon the database user.Testing
scripts/demo/capture.pywas updated but not run.Follow-ups
🤖 Generated with Claude Code