docs(14-03): complete site dashboard integration plan

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jason Staack
2026-03-19 06:55:41 -05:00
parent a9db9e4bfe
commit 0079db6534
4 changed files with 145 additions and 17 deletions

View File

@@ -17,15 +17,15 @@
### Site Dashboard ### 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-01**: Operator can view a site list page showing all sites with health rollup (device count, online %, alert count)
- [ ] **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-02**: Operator can click into a site to see a device health grid (status, CPU, memory, uptime for all devices at that site)
- [ ] **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-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
- [ ] **DASH-04**: Site dashboard shows wireless link topology (which CPEs connect to which APs) with signal quality indicators - [x] **DASH-04**: Site dashboard shows wireless link topology (which CPEs connect to which APs) with signal quality indicators
### Sectors ### Sectors
- [x] **SECT-01**: Operator can define sectors within a site (name, optional azimuth/bearing) - [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-02**: Operator can assign APs to sectors
- [ ] **SECT-03**: Sector view shows aggregate client count, bandwidth, and signal statistics per sector - [x] **SECT-03**: Sector view shows aggregate client count, bandwidth, and signal statistics per sector
### Wireless Collection ### Wireless Collection
@@ -101,12 +101,12 @@
| SITE-05 | Phase 11 | Complete | | SITE-05 | Phase 11 | Complete |
| SITE-06 | Phase 11 | Complete | | SITE-06 | Phase 11 | Complete |
| DASH-01 | Phase 11 | Complete | | DASH-01 | Phase 11 | Complete |
| DASH-02 | Phase 14 | Pending | | DASH-02 | Phase 14 | Complete |
| DASH-03 | Phase 14 | Pending | | DASH-03 | Phase 14 | Complete |
| DASH-04 | Phase 14 | Pending | | DASH-04 | Phase 14 | Complete |
| SECT-01 | Phase 14 | Complete | | SECT-01 | Phase 14 | Complete |
| SECT-02 | Phase 14 | Complete | | SECT-02 | Phase 14 | Complete |
| SECT-03 | Phase 14 | Pending | | SECT-03 | Phase 14 | Complete |
| WRCL-01 | Phase 12 | Complete | | WRCL-01 | Phase 12 | Complete |
| WRCL-02 | Phase 12 | Complete | | WRCL-02 | Phase 12 | Complete |
| WRCL-03 | Phase 12 | Complete | | WRCL-03 | Phase 12 | Complete |

View File

@@ -37,7 +37,7 @@ v9.7 transforms TOD from a flat device list into a site-aware fleet management p
- [x] **Phase 11: Site Data Model + Foundation** - Sites CRUD, device assignment, site list with health rollup (completed 2026-03-19) - [x] **Phase 11: Site Data Model + Foundation** - Sites CRUD, device assignment, site list with health rollup (completed 2026-03-19)
- [x] **Phase 12: Per-Client Wireless Collection** - Poller extension to collect registration table and per-interface RF stats (completed 2026-03-19) - [x] **Phase 12: Per-Client Wireless Collection** - Poller extension to collect registration table and per-interface RF stats (completed 2026-03-19)
- [x] **Phase 13: Link Discovery + Registration Ingestion** - Backend NATS consumer, MAC resolution, AP-CPE link state machine (completed 2026-03-19) - [x] **Phase 13: Link Discovery + Registration Ingestion** - Backend NATS consumer, MAC resolution, AP-CPE link state machine (completed 2026-03-19)
- [ ] **Phase 14: Site Dashboard + Sector Views + Wireless UI** - Site detail page, sector-centric view, per-station wireless tables - [x] **Phase 14: Site Dashboard + Sector Views + Wireless UI** - Site detail page, sector-centric view, per-station wireless tables (completed 2026-03-19)
- [ ] **Phase 15: Signal Trending + Site Alerting** - Signal history charts, degradation detection, site/sector alert rules - [ ] **Phase 15: Signal Trending + Site Alerting** - Signal history charts, degradation detection, site/sector alert rules
## Phase Details ## Phase Details
@@ -101,7 +101,7 @@ Plans:
3. Site dashboard displays wireless link topology showing which CPEs connect to which APs with signal quality indicators 3. Site dashboard displays wireless link topology showing which CPEs connect to which APs with signal quality indicators
4. Device detail page shows a per-station wireless table (connected clients with MAC, signal, CCQ, TX/RX rates, distance, uptime) and per-interface RF stats 4. Device detail page shows a per-station wireless table (connected clients with MAC, signal, CCQ, TX/RX rates, distance, uptime) and per-interface RF stats
5. Operator can define sectors within a site, assign APs to sectors, and view aggregate stats per sector 5. Operator can define sectors within a site, assign APs to sectors, and view aggregate stats per sector
**Plans:** 2/3 plans executed **Plans:** 3/3 plans complete
Plans: Plans:
- [ ] 14-01-PLAN.md — Sector backend (migration, model, service, router), site_id device filter, wireless data APIs, frontend API clients - [ ] 14-01-PLAN.md — Sector backend (migration, model, service, router), site_id device filter, wireless data APIs, frontend API clients
@@ -128,7 +128,7 @@ Plans:
| Category | Requirements | Phase | Count | | Category | Requirements | Phase | Count |
|----------|-------------|-------|-------| |----------|-------------|-------|-------|
| Sites | SITE-01, SITE-02, SITE-03, SITE-04, SITE-05, SITE-06 | 11 | 3/3 | Complete | 2026-03-19 | DASH-01 | 11 | 1 | | Sites | SITE-01, SITE-02, SITE-03, SITE-04, SITE-05, SITE-06 | 11 | 3/3 | Complete | 2026-03-19 | DASH-01 | 11 | 1 |
| Site Dashboard | DASH-02, DASH-03, DASH-04 | 14 | 2/3 | In Progress| | SECT-01, SECT-02, SECT-03 | 14 | 3 | | Site Dashboard | DASH-02, DASH-03, DASH-04 | 14 | 3/3 | Complete | 2026-03-19 | SECT-01, SECT-02, SECT-03 | 14 | 3 |
| Wireless Collection | WRCL-01, WRCL-02, WRCL-03, WRCL-04, WRCL-05, WRCL-06 | 12 | 2/2 | Complete | 2026-03-19 | LINK-01, LINK-02, LINK-03, LINK-04 | 13 | 3/3 | Complete | 2026-03-19 | WRUI-01, WRUI-02, WRUI-03 | 14 | 3 | | Wireless Collection | WRCL-01, WRCL-02, WRCL-03, WRCL-04, WRCL-05, WRCL-06 | 12 | 2/2 | Complete | 2026-03-19 | LINK-01, LINK-02, LINK-03, LINK-04 | 13 | 3/3 | Complete | 2026-03-19 | WRUI-01, WRUI-02, WRUI-03 | 14 | 3 |
| Signal Trending | TRND-01, TRND-02 | 15 | 2 | | Signal Trending | TRND-01, TRND-02 | 15 | 2 |
| Site Alerting | ALRT-01, ALRT-02 | 15 | 2 | | Site Alerting | ALRT-01, ALRT-02 | 15 | 2 |

View File

@@ -3,13 +3,13 @@ gsd_state_version: 1.0
milestone: v9.7 milestone: v9.7
milestone_name: Tower & Site Management milestone_name: Tower & Site Management
status: unknown status: unknown
stopped_at: Completed 14-02-PLAN.md stopped_at: Completed 14-03-PLAN.md
last_updated: "2026-03-19T11:48:58.364Z" last_updated: "2026-03-19T11:55:25.846Z"
progress: progress:
total_phases: 5 total_phases: 5
completed_phases: 3 completed_phases: 4
total_plans: 11 total_plans: 11
completed_plans: 10 completed_plans: 11
--- ---
# Project State # Project State
@@ -45,6 +45,7 @@ Plan: 3 of 3
| Phase 13 P03 | 3min | 2 tasks | 6 files | | Phase 13 P03 | 3min | 2 tasks | 6 files |
| Phase 14 P01 | 3min | 2 tasks | 15 files | | Phase 14 P01 | 3min | 2 tasks | 15 files |
| Phase 14 P02 | 3min | 2 tasks | 9 files | | Phase 14 P02 | 3min | 2 tasks | 9 files |
| Phase 14 P03 | 3min | 2 tasks | 6 files |
## Accumulated Context ## Accumulated Context
@@ -82,6 +83,7 @@ Decisions are logged in PROJECT.md Key Decisions table.
- [Phase 14]: Shared signalColor helper in separate module for reuse across wireless components - [Phase 14]: Shared signalColor helper in separate module for reuse across wireless components
- [Phase 14]: Wireless links grouped by AP hostname with nested CPE rows for topology clarity - [Phase 14]: Wireless links grouped by AP hostname with nested CPE rows for topology clarity
- [Phase 14]: Sidebar Wireless Links href is tenant-scoped for non-super_admin users - [Phase 14]: Sidebar Wireless Links href is tenant-scoped for non-super_admin users
- [Phase 14]: Used fleet summary API for CPU/memory data since devicesApi.list does not return health metrics
### Pending Todos ### Pending Todos
@@ -95,6 +97,6 @@ None yet.
## Session Continuity ## Session Continuity
Last session: 2026-03-19T11:48:58.361Z Last session: 2026-03-19T11:55:25.843Z
Stopped at: Completed 14-02-PLAN.md Stopped at: Completed 14-03-PLAN.md
Resume file: None Resume file: None

View File

@@ -0,0 +1,126 @@
---
phase: 14-site-dashboard-sector-views-wireless-ui
plan: 03
subsystem: ui
tags: [react, tanstack-query, tailwind, site-dashboard, sectors, wireless]
requires:
- phase: 14-site-dashboard-sector-views-wireless-ui
provides: sectorsApi, wirelessApi, devicesApi with site_id filter, WirelessLinksTable with siteId prop, signalColor helper
provides:
- Tabbed site dashboard with Health Grid, Sectors, and Links views
- SiteHealthGrid component with device status cards, CPU/memory bars, uptime
- SiteSectorView with collapsible sector sections, AP cards, CPE lists, aggregate stats, sector assignment
- SectorFormDialog for create/edit sectors
- SiteLinksTab wrapping WirelessLinksTable with site filtering
affects: [site-management, fleet-views]
tech-stack:
added: []
patterns:
- useState-based tab switching consistent with device detail page pattern
- Fleet summary data merged with device list for CPU/memory metrics on health grid
- Collapsible sector sections with inline aggregate stats (client count, avg signal, link count)
key-files:
created:
- frontend/src/components/sites/SiteHealthGrid.tsx
- frontend/src/components/sites/SiteSectorView.tsx
- frontend/src/components/sites/SectorFormDialog.tsx
- frontend/src/components/sites/SiteLinksTab.tsx
modified:
- frontend/src/routes/_authenticated/tenants/$tenantId/sites/$siteId.tsx
- frontend/src/lib/api.ts
key-decisions:
- "Used fleet summary API for CPU/memory data since devicesApi.list does not return health metrics"
- "Sector assignment dropdown uses sentinel value '__unassigned__' since Radix Select requires string values"
patterns-established:
- "Site dashboard tab pattern: useState with conditional rendering (health/sectors/links)"
- "Sector section pattern: collapsible cards with inline aggregate wireless stats"
requirements-completed: [DASH-02, DASH-03, DASH-04, SECT-03]
duration: 3min
completed: 2026-03-19
---
# Phase 14 Plan 03: Site Dashboard Integration Summary
**Tabbed site dashboard with device health grid, sector-organized AP/CPE view with aggregate wireless stats, and site-filtered wireless links**
## Performance
- **Duration:** 3 min
- **Started:** 2026-03-19T11:50:42Z
- **Completed:** 2026-03-19T11:54:14Z
- **Tasks:** 2
- **Files modified:** 6
## Accomplishments
- Site detail page upgraded from placeholder to full tabbed dashboard with three views
- Health Grid shows per-device cards with status dots, CPU/memory progress bars, and uptime
- Sector View groups APs by sector with collapsible sections, connected CPE lists, aggregate stats, and sector assignment dropdown
- Operators can create, edit, and delete sectors; reassign devices between sectors
## Task Commits
Each task was committed atomically:
1. **Task 1: Create SiteHealthGrid, SectorFormDialog, SiteSectorView, and SiteLinksTab components** - `d89233b` (feat)
2. **Task 2: Replace site detail page placeholder with tabbed dashboard** - `a9db9e4` (feat)
## Files Created/Modified
- `frontend/src/components/sites/SiteHealthGrid.tsx` - Device health grid with status, CPU/memory bars, uptime
- `frontend/src/components/sites/SiteSectorView.tsx` - Sector-organized view with AP cards, CPE lists, aggregate stats
- `frontend/src/components/sites/SectorFormDialog.tsx` - Sector create/edit dialog following SiteFormDialog pattern
- `frontend/src/components/sites/SiteLinksTab.tsx` - Wrapper for WirelessLinksTable with siteId filtering
- `frontend/src/routes/_authenticated/tenants/$tenantId/sites/$siteId.tsx` - Tabbed dashboard replacing placeholder
- `frontend/src/lib/api.ts` - Added sector_id/sector_name to DeviceResponse, site_id/sector_id to DeviceListParams
## Decisions Made
- Used fleet summary API for CPU/memory data since devicesApi.list does not return health metrics
- Sector assignment dropdown uses sentinel value '__unassigned__' since Radix Select requires string values
## Deviations from Plan
### Auto-fixed Issues
**1. [Rule 3 - Blocking] Added sector_id and sector_name to DeviceResponse type**
- **Found during:** Task 1 (SiteSectorView needs sector_id to group devices)
- **Issue:** Backend returns sector_id and sector_name on devices but frontend TypeScript type was missing them
- **Fix:** Added sector_id and sector_name to DeviceResponse interface
- **Files modified:** frontend/src/lib/api.ts
- **Verification:** TypeScript type matches backend schema
- **Committed in:** d89233b (Task 1 commit)
**2. [Rule 3 - Blocking] Added site_id and sector_id to DeviceListParams**
- **Found during:** Task 1 (SiteHealthGrid needs to filter devices by site)
- **Issue:** DeviceListParams missing site_id/sector_id even though backend accepts them
- **Fix:** Added site_id and sector_id to DeviceListParams interface
- **Files modified:** frontend/src/lib/api.ts
- **Verification:** devicesApi.list now accepts site_id filter parameter
- **Committed in:** d89233b (Task 1 commit)
---
**Total deviations:** 2 auto-fixed (2 blocking)
**Impact on plan:** Both fixes necessary for type correctness. Plan 01 added these backend fields but the frontend types were not updated to match.
## Issues Encountered
None
## User Setup Required
None - no external service configuration required.
## Next Phase Readiness
- Phase 14 complete: all three plans delivered
- Site dashboard fully functional with health grid, sector management, and wireless links
- Foundation ready for future enhancements (real-time updates, alert integration)
---
*Phase: 14-site-dashboard-sector-views-wireless-ui*
*Completed: 2026-03-19*
## Self-Check: PASSED