Case study · Unvoid
On-premise monitoring for OT networks
I built a Go application that runs on site, monitors system health and pushes live updates to an Angular UI.
TODOadd a real result, e.g. sites running it or update latency
01Problem
The application has to run inside industrial sites, not in the cloud. It watches system health and traffic on OT networks.
Operators need to see changes as they happen, without reloading the page.
02Constraints
- On-premise only. Installs and upgrades had to work on Debian machines without a cloud service behind them.
- Industrial protocols over IPv4, which had to be dissected and understood before the data was useful.
- Local storage only, so the database had to stay fast under constant writes.
03What I did
- I wrote the backend in Go with Gin and GORM, and packaged it as Debian packages with GoReleaser.
- I built asynchronous services that monitor system health in the background.
- I added WebSocket communication so the UI updates in real time.
- I built Angular services and RxJS streams to handle both synchronous and asynchronous data in the UI.
- I designed the SQLite storage with sharding and write-ahead logging (WAL) to keep reads and writes from blocking each other.
04Trade-offs
SQLite instead of a database server. It means nothing extra to install or run on site, at the cost of designing around a single-writer model.
WebSockets instead of polling. More moving parts, but the UI shows changes as soon as they happen.
05Result
TODO: describe the result. How many sites run it, what it replaced, or what it made possible.