- Create SignalHistoryChart with recharts LineChart, green/yellow/red reference bands, and 24h/7d/30d range selector - Add expandable rows to WirelessStationTable (click station to see signal history) - Add expandable rows to WirelessLinksTable CPE rows (click link to see signal history) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
136 lines
6.7 KiB
Markdown
136 lines
6.7 KiB
Markdown
# Requirements: TOD v9.7 — Tower & Site Management
|
|
|
|
**Defined:** 2026-03-18
|
|
**Core Value:** Operators can organize their MikroTik fleet by physical site, see tower-level health with sector/CPE views, and collect full wireless radio statistics — without disrupting the flat-list MSP workflow.
|
|
|
|
## v9.7 Requirements
|
|
|
|
### Sites
|
|
|
|
- [x] **SITE-01**: Operator can create a site with name, coordinates (lat/lng), address, elevation, and notes
|
|
- [x] **SITE-02**: Operator can edit and delete sites
|
|
- [x] **SITE-03**: Operator can assign devices to a site (single and bulk assignment)
|
|
- [x] **SITE-04**: Operator can remove a device from a site (device returns to "unassigned")
|
|
- [x] **SITE-05**: Devices without a site assignment continue to work normally in all existing views
|
|
- [x] **SITE-06**: Sites are tenant-scoped — each tenant manages their own sites independently
|
|
|
|
### Site Dashboard
|
|
|
|
- [x] **DASH-01**: Operator can view a site list page showing all sites with health rollup (device count, online %, alert count)
|
|
- [x] **DASH-02**: Operator can click into a site to see a device health grid (status, CPU, memory, uptime for all devices at that site)
|
|
- [x] **DASH-03**: Operator can switch to a sector-centric view within a site dashboard showing APs grouped by sector with connected CPEs, aggregate bandwidth, and signal distribution
|
|
- [x] **DASH-04**: Site dashboard shows wireless link topology (which CPEs connect to which APs) with signal quality indicators
|
|
|
|
### Sectors
|
|
|
|
- [x] **SECT-01**: Operator can define sectors within a site (name, optional azimuth/bearing)
|
|
- [x] **SECT-02**: Operator can assign APs to sectors
|
|
- [x] **SECT-03**: Sector view shows aggregate client count, bandwidth, and signal statistics per sector
|
|
|
|
### Wireless Collection
|
|
|
|
- [x] **WRCL-01**: Poller collects per-client registration table data from APs (MAC, signal, CCQ, TX/RX rates, distance, uptime) on a 5-minute cadence
|
|
- [x] **WRCL-02**: Poller collects per-interface RF stats (noise floor, channel width, TX power, registered client count) via monitor command
|
|
- [x] **WRCL-03**: Per-client wireless data publishes to a dedicated NATS stream (separate from DEVICE_EVENTS) to prevent stream saturation
|
|
- [x] **WRCL-04**: Per-client wireless data stores in a dedicated hypertable with 30-day retention (separate from existing wireless_metrics)
|
|
- [x] **WRCL-05**: Poller handles RouterOS v6/v7 field differences gracefully (CCQ absent in v7 wifi package)
|
|
- [x] **WRCL-06**: Signal strength parsing handles RouterOS format variations (e.g., `-67@5GHz` suffix)
|
|
|
|
### Link Discovery
|
|
|
|
- [x] **LINK-01**: Backend auto-discovers AP-CPE relationships by matching registration table MAC addresses against known device interface MACs
|
|
- [x] **LINK-02**: Link state uses a temporal state machine (discovered -> active -> degraded -> down -> stale) with consecutive-miss threshold to prevent false flapping
|
|
- [x] **LINK-03**: Wireless links are stored in a materialized table for fast dashboard queries
|
|
- [x] **LINK-04**: Unmanaged wireless clients (MACs not matching any TOD device) are displayed as "unknown clients" with signal/rate data
|
|
|
|
### Wireless UI
|
|
|
|
- [x] **WRUI-01**: Device detail page shows a per-station wireless table (connected clients with MAC, signal, CCQ, TX/RX rates, distance, uptime)
|
|
- [x] **WRUI-02**: Device detail page shows per-interface RF stats (noise floor, channel width, TX power)
|
|
- [x] **WRUI-03**: Wireless links page shows all discovered AP-CPE relationships with signal quality and link state
|
|
|
|
### Signal Trending
|
|
|
|
- [x] **TRND-01**: Operator can view per-station signal history charts showing signal strength over time
|
|
- [x] **TRND-02**: System detects signal degradation trends (e.g., "signal dropped 8dB over 2 weeks")
|
|
|
|
### Site Alerting
|
|
|
|
- [x] **ALRT-01**: Operator can create site-scoped alert rules (e.g., "alert when >20% of devices at this site go offline")
|
|
- [x] **ALRT-02**: Operator can create sector-scoped alert rules (e.g., "alert when sector average signal drops below -75dBm")
|
|
|
|
## Future Requirements
|
|
|
|
### Map View
|
|
|
|
- **MAP-01**: Operator can view sites on a geographic map with health-status-colored markers
|
|
- **MAP-02**: Operator can click a map marker to drill into the site dashboard
|
|
|
|
### Advanced Wireless
|
|
|
|
- **ADV-01**: Cross-reference wireless anomalies with config change timeline
|
|
- **ADV-02**: CAPsMAN read-only discovery (discover CAPsMAN-managed APs and display status)
|
|
- **ADV-03**: On-demand spectral scan trigger with result display
|
|
|
|
### Config Restore (deferred from v9.6)
|
|
|
|
- **REST-01**: User can restore a config snapshot to a router via SSH
|
|
- **REST-02**: Restore confirmation dialog with diff preview
|
|
|
|
## Out of Scope
|
|
|
|
| Feature | Reason |
|
|
|---------|--------|
|
|
| Map/geo visualization | Deferred to future milestone — adds tile provider complexity, dashboards deliver value faster |
|
|
| Config restore via UI | Deferred from v9.6 — still out of scope |
|
|
| Subscriber/customer management | BSS territory (Sonar/Powercode) — TOD is NMS, not billing |
|
|
| RF planning / link budget calculator | Dedicated RF planning tools exist — TOD monitors deployed infrastructure |
|
|
| Automated radio parameter changes | Dangerous in production WISPs — TOD provides visibility, not automation |
|
|
| Real-time spectrum analyzer | Requires continuous high-frequency polling — offer on-demand scan instead (future) |
|
|
| CAPsMAN configuration management | Complex and version-sensitive — read-only discovery deferred |
|
|
| Spectral scan during automated polling | Takes interface offline (destructive) — never auto-poll |
|
|
|
|
## Traceability
|
|
|
|
| Requirement | Phase | Status |
|
|
|-------------|-------|--------|
|
|
| SITE-01 | Phase 11 | Complete |
|
|
| SITE-02 | Phase 11 | Complete |
|
|
| SITE-03 | Phase 11 | Complete |
|
|
| SITE-04 | Phase 11 | Complete |
|
|
| SITE-05 | Phase 11 | Complete |
|
|
| SITE-06 | Phase 11 | Complete |
|
|
| DASH-01 | Phase 11 | Complete |
|
|
| DASH-02 | Phase 14 | Complete |
|
|
| DASH-03 | Phase 14 | Complete |
|
|
| DASH-04 | Phase 14 | Complete |
|
|
| SECT-01 | Phase 14 | Complete |
|
|
| SECT-02 | Phase 14 | Complete |
|
|
| SECT-03 | Phase 14 | Complete |
|
|
| WRCL-01 | Phase 12 | Complete |
|
|
| WRCL-02 | Phase 12 | Complete |
|
|
| WRCL-03 | Phase 12 | Complete |
|
|
| WRCL-04 | Phase 12 | Complete |
|
|
| WRCL-05 | Phase 12 | Complete |
|
|
| WRCL-06 | Phase 12 | Complete |
|
|
| LINK-01 | Phase 13 | Complete |
|
|
| LINK-02 | Phase 13 | Complete |
|
|
| LINK-03 | Phase 13 | Complete |
|
|
| LINK-04 | Phase 13 | Complete |
|
|
| WRUI-01 | Phase 14 | Complete |
|
|
| WRUI-02 | Phase 14 | Complete |
|
|
| WRUI-03 | Phase 14 | Complete |
|
|
| TRND-01 | Phase 15 | Complete |
|
|
| TRND-02 | Phase 15 | Complete |
|
|
| ALRT-01 | Phase 15 | Complete |
|
|
| ALRT-02 | Phase 15 | Complete |
|
|
|
|
**Coverage:**
|
|
- v9.7 requirements: 30 total
|
|
- Mapped to phases: 30
|
|
- Unmapped: 0
|
|
|
|
---
|
|
*Requirements defined: 2026-03-18*
|
|
*Last updated: 2026-03-18 after roadmap creation*
|