Add AT&T modem monitoring and device pages; replace Link Debug #4

Merged
jared merged 1 commits from device-pages-and-wan-monitoring into main 2026-11-04 23:47:37 -05:00
Owner

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

## 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)
jared added 1 commit 2026-11-04 23:40:27 -05:00
Add AT&T modem monitoring and device pages; replace Link Debug
Lint / Python (flake8) (pull_request) Successful in 2m6s
Lint / JS (eslint) (pull_request) Successful in 18s
Lint / Notify on failure (pull_request) Skipped
Lint / Deploy (pull_request) Skipped
Security / Python Security (bandit) (pull_request) Successful in 2m11s
Test / Python Tests (pytest) (pull_request) Successful in 2m20s
Lint / JS (eslint) (push) Successful in 10s
Lint / Python (flake8) (push) Successful in 1m58s
Lint / Notify on failure (push) Skipped
Security / Python Security (bandit) (push) Successful in 1m58s
Lint / Deploy (push) Successful in 4s
Test / Python Tests (pytest) (push) Successful in 58s
e32499b7f6
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 main 2026-11-04 23:47:37 -05:00
jared deleted branch device-pages-and-wan-monitoring 2026-11-04 23:47:37 -05:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/gandalf#4