Watchtower NOC Dashboard
A real-time network operations center dashboard built for Polk State College's IT department. Watchtower aggregates data from LibreNMS, Netdisco, Proxmox, and Speedtest into a unified monitoring interface with interactive topology maps, live device status, and WebSocket-driven updates. It replaces the need for expensive commercial NMS platforms by combining open-source tools into a single, purpose-built dashboard.
The Numbers: Cost Avoidance
Sources: SolarWinds NPM Pricing, NTA Pricing, NCM Pricing, SAM Pricing. Prices as of January 2026, SLA 100 tier.
Architecture
Features
Draggable network map with expandable clusters, device status indicators, and animated connection links
ReactFlow + Zustand + WebSocketVisual switch port layout with real-time status colors and hover tooltips
Custom React componentsScheduled WAN health tests with CSV history and external link coloring
Ookla CLI + Redis cacheAggregate traffic across ports matching a pattern (e.g., all lab ports)
SNMP ifOctets aggregationWebSocket pushes live device status, health metrics, and link changes without polling
FastAPI WebSocket + APSchedulerAutomatic discovery of physical connections via CDP/LLDP, merged with static topology.yaml
LibreNMS API + Redis cacheSwitch between Physical (cable connections) and Logical (VLAN relationships) topology views
ReactFlow layout transformsLive dashboard of VMs, containers, and storage pools for selected hypervisor nodes
Proxmox API integrationFind switch ports by searching SNMP descriptions (ifAlias)
LibreNMS API queryExport topology as Mermaid diagram for documentation with built-in viewer
Frontend Mermaid generatorReal-time alerts from device status changes with acknowledgment
Derived from device stateData Flow Example
When a switch goes offline, here is what happens end-to-end:
Key Technical Decisions
API Surface
GET /api/topology- Full topology (nodes + edges)GET /api/devices- All monitored devices with statusGET /api/devices/{id}/ports- Port details for a deviceGET /api/speedtest- Latest speedtest resultsGET /api/speedtest/history- Historical speedtest CSVGET /api/proxmox/nodes- Proxmox cluster overviewGET /api/proxmox/nodes/{node}- VMs and containers for a nodeGET /api/port-groups- Configured port group aggregationsGET /api/alerts- Active alertsPOST /api/alerts/{id}/ack- Acknowledge an alertGET /api/mermaid- Topology as Mermaid diagramPOST /api/auth/login- Authenticate and receive JWTPOST /api/auth/logout- Invalidate sessionGET /api/settings- Current configurationPUT /api/settings- Update configuration
WS /ws- Real-time topology updates, device status changes, alerts
WebSocket messages use JSON with a type field: topology_update, device_status, speedtest_result, alert.
Development Roadmap
- FastAPI backend
- React frontend
- Basic topology
- L2/L3 toggle
- VLAN filtering
- Cluster nodes
- LibreNMS polling
- Proxmox panel
- Netdisco data
- CDP/LLDP links
- Dynamic topology
- Collision detection
- Speedtest
- Port groups
- Port search
- Mermaid export
- CSV logging
- Collapsible widgets
- JWT auth
- User sessions
- Login/logout flow
- Config editor
- Polling controls
- Theme options
- Discord webhooks
- Email alerts
- Escalation rules
- User roles
- Permission levels
- Admin panel
- InfluxDB integration
- Time-series metrics
- Historical charts
Current Status
- FastAPI backend with Redis caching
- React frontend with ReactFlow topology
- LibreNMS + Netdisco + Proxmox integrations
- WebSocket real-time updates
- CDP/LLDP auto-discovery
- L2/L3 topology view toggle
- Cisco-style port grid visualization
- Speedtest widget with CSV export
- Port group traffic monitoring
- Mermaid diagram export
- JWT authentication and user sessions
- Settings UI with config editor
- Historical data with InfluxDB
- Remote notifications (Discord, email)
- Role-based access control