No C compiler needed — the project uses modernc.org/sqlite, a pure-Go SQLite driver (CGO_ENABLED=0).
git clone https://github.com/decoded-cipher/netmon.git
cd netmon
make run # go run ./cmd/netmon
# or
make build && ./netmonDashboard: http://localhost:8080
cmd/netmon/ main.go — entry point, HTTP server setup
internal/
monitor/ Background workers: ping (60s) and speed test (30m)
monitor.go Monitor struct, worker goroutines, ping cycle orchestration
ping.go runPing, cross-platform output parsing, DNS measurement
speed.go measureDownload, measureUpload
network/ Cross-platform network identity detection
network.go Detect(), DefaultGateway(), SSID helpers per OS
server/ HTTP layer
handlers.go JSON API handlers
version.go Version check against GitHub releases
store/ SQLite persistence
store.go Schema, migrations, CRUD for all tables
web/ Vue 3 + Vite frontend
src/ Components, composables, and utilities
web.go embed.FS — bundles web/dist into the binary at build time
- Backend changes — edit files under
internal/. Runmake vetandmake buildto verify. - Frontend changes — edit files under
web/src/. Runmake devto get hot-reload (Vite proxies/api/*to the Go backend). - Adding a new metric — add a column to the
measurementstable instore.go, updateMeasurementstruct,SaveMeasurement, andGetHistory; wire it throughmonitor.go → runPingCycle(); add a chart in the Vue components.
- Fork the repo and create a branch from
master - Keep changes focused — one logical change per PR
- Run
make vetbefore pushing - Describe why the change is needed in the PR description, not just what changed
Open an issue with:
- OS and Go version (
go version) - Steps to reproduce
- Relevant log output (the structured log lines from the terminal)