Todos os projetos

Estudo de caso · Unvoid

Monitoramento on-premise para redes OT

Engenheiro de software · 2025 · Go, Gin, GORM, Angular, RxJS, SQLite, GoReleaser

Construí uma aplicação em Go que roda no local, monitora a saúde do sistema e envia atualizações ao vivo para uma interface Angular.

TODOadicione um resultado real, ex.: locais usando ou latência das atualizações

01Problema

A aplicação precisa rodar dentro das plantas industriais, não na nuvem. Ela acompanha a saúde do sistema e o tráfego em redes OT.

Os operadores precisam ver as mudanças na hora, sem recarregar a página.

02Restrições

  • Apenas on-premise. Instalação e atualização precisavam funcionar em máquinas Debian, sem um serviço na nuvem por trás.
  • Protocolos industriais sobre IPv4, que precisavam ser dissecados e entendidos antes de os dados serem úteis.
  • Armazenamento apenas local, então o banco precisava continuar rápido com escritas constantes.

03O que eu fiz

  • Escrevi o backend em Go com Gin e GORM, e empacotei como pacotes Debian com GoReleaser.
  • Construí serviços assíncronos que monitoram a saúde do sistema em segundo plano.
  • Adicionei comunicação via WebSocket para a interface atualizar em tempo real.
  • Construí services Angular e streams RxJS para tratar dados síncronos e assíncronos na interface.
  • Projetei o armazenamento em SQLite com sharding e write-ahead logging (WAL), para leituras e escritas não se bloquearem.

04Trade-offs

SQLite em vez de um servidor de banco. Nada extra para instalar ou manter no local, ao custo de projetar em torno de um único escritor.

WebSockets em vez de polling. Mais partes móveis, mas a interface mostra as mudanças assim que acontecem.

05Resultado

TODO: descreva o resultado. Quantos locais usam, o que substituiu ou o que tornou possível.