watchtower

WIP

A NOC dashboard for network devices, interfaces, VMs, and alerts via LibreNMS.

GitHub repo → self-hosted · run from source
NOC
dashboard, not an MCP server
WS
WebSocket live updates
MIT
open source

WHAT IT DOES

Watchtower is a modern Network Operations Center dashboard. It monitors network devices, interfaces, VMs, and alerts through LibreNMS, Proxmox, and other integrations, and keeps the metrics current without a page refresh using WebSocket-driven live updates. The frontend is React 18 + TypeScript; the backend is a FastAPI service on Python 3.12 with Redis for cache, InfluxDB for time-series history, and APScheduler for polling. It is for homelab and small-network operators who want one console for device health, topology, and alerting instead of jumping between tools.

Status: work in progress. Watchtower is a self-hosted application, not an MCP server, so there is no AI-client config block. It is not published to a registry; you run it from source.

WHAT IT WATCHES

Device status
Real-time up / down / degraded state, pushed over WebSockets.
Network topology
Interactive React Flow map with link status and port detail.
Interface utilization
Bandwidth, errors, and traffic graphs per interface.
Port groups
Aggregate traffic for groups of ports matched by description.
Speedtest
Scheduled WAN speed tests with historical tracking.
Alert feed
Critical / warning / info severities with an acknowledgment workflow.
Notifications
Discord, Pushover, and email channels with configurable thresholds.
Proxmox integration
VM / LXC status, resource usage, and node details.
Historical data
InfluxDB time-series with configurable retention.
CDP / LLDP discovery
Automatic topology discovery from LibreNMS.

RUNNING IT

Prerequisites: Python 3.12+, Node.js 20+, Docker + Compose (provides Redis and InfluxDB), and a LibreNMS instance with API access. Clone the repo, build both halves, then point the config at your stack.

$ git clone https://github.com/solomonneas/watchtower.git
$ cd watchtower
 
# backend
$ cd backend && python -m venv venv && source venv/bin/activate
$ pip install -r requirements.txt -r requirements-dev.txt
 
# frontend
$ cd ../frontend && npm install && npm run build

Copy the example config, fill in your LibreNMS and Proxmox credentials, then start the services. Use docker compose up -d from the repo root to bring up Redis and InfluxDB.

$ cp config/config.example.yaml config/config.yaml
$ cp config/topology.example.yaml config/topology.yaml
 
# development
$ cd backend && uvicorn app.main:app --reload
$ cd frontend && npm run dev
 
# production (systemd)
$ sudo systemctl start watchtower

Config lives in config/config.yaml (auth, JWT secret, data sources) and config/topology.yaml (network map). The admin password hash is set on first login.