Tag: node.js

  • A minha jornada com o NetView: de um script PHP a um sistema Node.js

    Todo dev tem aquele projeto que cresce junto com ele. O meu é o NetView, um sistema de monitoramento de rede que nasceu no início de 2023 pra resolver uma dor bem prática onde eu trabalho, e hoje virou um projeto completo com dashboard em tempo real, CLI, integração com WhatsApp e uma arquitetura modular em Node.js.

    Esse texto é um relato técnico (e pessoal) dessa jornada: de um script PHP direto ao ponto até uma aplicação extensível e em produção real. O que aprendi no caminho, os erros que corrigi e as soluções que construí estão aqui.

    💡 Todo o código, de todas as versões, está disponível no GitHub

    O começo de tudo: Vigianet

    O NetView começou em 2023 com outro nome: VigiaNet. A ideia era simples: ter uma página que mostrasse, de forma visual, o status dos principais equipamentos de rede do hospital: servidores, impressoras, dvr’s, roteadores, etc.

    A stack era bem direta:

    • index.html com Vue.js
    • Um setInterval que fazia requisição com Axios a cada 20 segundos
    • Um devices.php que fazia ping nos dispositivos e devolvia um JSON

    Mas o detalhe está na lógica. O backend PHP:

    • Mantinha uma lista de dispositivos, com nome, IP e se deveria ser monitorado 24h ou só em horário comercial.
    • Avaliava a regra de horário antes de tentar o ping.
    • Executava ping -n 1 -w 1 (Windows) via exec(), interpretava o retorno e montava um JSON com os status.
    • Dispositivos fora de horário eram marcados como tal, sem tentar ping.

    O frontend Vue.js fazia polling, processava o JSON e criava cards coloridos (verde, vermelho, cinza). Tinha até animação blink pro status offline.

    Limitações? Várias:

    • Latência de até 20s entre a queda e o aviso visual.
    • Nenhum alerta proativo.
    • Tráfego constante, mesmo sem mudanças.

    Mas, pra um projeto que nasceu como um quebra galho, era mais do que funcional. E foi minha porta de entrada pra entender monitoramento de rede.

    A primeira virada: Node.js + WebSocket

    Com o tempo, surgiu a necessidade de alertas automáticos, via WhatsApp, quando um dispositivo caía. Isso motivou a primeira grande reescrita: sai PHP, entra Node.js, WebSocket e alertas proativos.

    Nascia o NetView v2.

    A arquitetura ainda era monolítica:

    • netview_server.js era o único arquivo responsável por:
      • Iniciar servidor WebSocket
      • Ler config/devices.json
      • Executar pings periodicamente
      • Detectar mudanças de status
      • Enviar mensagens via WhatsApp (usando whatsapp-web.js)

    O frontend se conectava via WebSocket e recebia atualizações em tempo real, nada mais de polling. O dashboard era dinâmico e imediato. E foi completamente reformulado.

    Mas a v2 ainda tinha limitações:

    • Tudo centralizado num único arquivo.
    • Configurações sensíveis hardcoded.
    • Script auxiliar (achagrupo.js) pra descobrir o ID do grupo do WhatsApp.

    Funcionava. Mas adicionar um dispositivo significava editar código manualmente.

    Arquitetura de verdade: v3

    A partir da versão v3, veio a grande virada arquitetural. O código ficou mais limpo, testável, modular e o NetView virou um sistema de verdade.

    Organização por responsabilidades

    A lógica foi quebrada em módulos:

    NetViewServer: orquestrador de tudo

    PingService: cuida dos pings com backoff exponencial

    DeviceStateManager: gerencia o status e histórico

    NotificationManager: decide quando notificar

    WhatsAppClient: integra com o WhatsApp

    ConfigManager: observa e carrega a config

    Essa separação facilita testes, debugging e extensões futuras.

    Ping mais inteligente

    O ping agora tem:

    • Tentativas com backoff exponencial
    • Timeout configurável
    • Compatibilidade com Windows e Linux
    • Análise de perda de pacotes
    • Concorrência com Promise.all

    CLI Interativo

    Criei um CLI interativo com readline e chalk que permite configurar tudo sem abrir o código:

    $ node server.js --cli

    device-add → adicionar novo dispositivo

    wa-groups → listar grupos do WhatsApp

    wa-set → selecionar o grupo para notificações

    logs → ver as ultimas 20 linhas do arquivo de log

    Por que não usar o Zabbix?

    Desde que criei o NetView, vez ou outra me perguntam: “Mas o Zabbix já não faz tudo isso?”

    Sim, o Zabbix faz muito mais do que o NetView jamais pretendeu fazer. E tá tudo bem! O NetView nunca foi pensado para competir com ferramentas estabelecidas, ele nasceu para resolver uma dor específica de forma rápida e simples.

    CaracterísticaZabbixNetView
    ComplexidadeAltaBaixa
    Setup inicialHorasMinutos
    InterfaceCompleta, mas densaSimples e direta
    AlertasConfiguráveis, múltiplos canaisWhatsApp integrado, basta conectar
    ExtensibilidadeTemplates, plugins, APIsNo código
    Ideal paraAmbientes que precisam de monitoramento robusto, relatórios, SLAQuem quer algo funcionando rápido, com alertas diretos

    O NetView é mais como um “canivete suíço” para quem precisa de algo funcionando hoje, sem treinamento da equipe ou semanas de configuração. É o projeto que você monta numa tarde e deixa rodando.

    Se sua infraestrutura é crítica e você tem tempo para fazer direito, use Zabbix. Se você só quer parar de ficar perguntando “a impressora da recepção tá funcionando?”, o NetView resolve.

    Mais que um projeto, uma trilha de aprendizado

    O NetView é um reflexo da minha trajetória como dev. Começou resolvendo um problema com um script PHP. Depois virou playground com Node.js. Hoje é um sistema estável, modular, fácil de manter, e cheio de lições no meio do caminho.

    É por isso que eu gosto tanto dele. Porque ele cresceu comigo.

    O que realmente aprendi

    Esse projeto me ensinou muita coisa na prática, não só sobre código, mas sobre evolução de software:

    ✅ Como organizar sistemas em módulos coesos
    ✅ CLI com readline e UX de terminal
    ✅ Lógica de retry com backoff exponencial
    ✅ WebSocket bidirecional
    ✅ Integração com APIs não convencionais (WhatsApp Web)
    ✅ Logs com Winston, histórico com JSONL
    ✅ Hot reload de arquivos de config
    ✅ Controle de concorrência com Promises

    Mas principalmente: que software bom é software que resolve problemas reais. O NetView não é revolucionário. Não vai mudar o mundo. Mas toda vez que chego e vejo os vários cards no dashboard, sei que aquele script PHP simples de 2023 virou algo útil de verdade.

    E talvez seja isso que faz a diferença: não a complexidade do código, mas o problema que ele resolve.

  • NetView: um monitor de rede simples

    Há uns dois anos, percebi uma necessidade lá no trabalho: a gente precisava saber, de forma rápida, quais das centenas de dispositivos do parque do hospital estavam online ou offline.

    Com isso em mente, comecei a pesquisar soluções. Eu já conhecia o Zabbix, mas achava ele meio overdressed pra essa situação, era mais do que eu precisava.

    Depois de testar algumas opções, cheguei a uma conclusão: todos os sistemas que encontrei eram grandes demais pra minha necessidade. Então resolvi criar um do zero. Nada muito ambicioso. Só algo simples e direto ao ponto.

    Foi assim que nasceu o NetView. Ele é um monitor básico, que usa ICMP pra verificar os dispositivos que você indicar. O resultado aparece num dashboard com status de online ou offline. Também dá pra configurar horários em que certos dispositivos não precisam ser monitorados, algo útil pra evitar alertas desnecessários.

    Recentemente, o NetView passou por uma grande atualização e chegou à versão 2.0. A stack mudou bastante: a primeira versão usava Axios e PHP; agora, tudo foi refeito com Node.js, Vue.js, WebSockets e WhatsApp-web.js (agora também dá pra enviar os status direto no WhatsApp).

    NetView 2.0

    Se quiser dar uma olhada no código ou testar, o projeto está disponível aqui.

  • Descobrindo jogos para navegador

    Faz um bom tempo desde que tive meu primeiro contato com HTML. Comecei no Orkut, estilizando o meu perfil com tags – quem lembra de usar <b></b> pra deixar o texto assim? 😁

    Pois é. Apesar de trabalhar com web há anos, construindo sites e sistemas, basicamente só cruds, nunca tinha explorado o mundo dos jogos para navegador. E, cara, tô completamente surpreso.

    Na sexta, dia 28, comecei a escrever um joguinho usando HTML, CSS e JavaScript. A ideia? Um battle royale. Nunca tinha programado um jogo antes, então tô contando com a ajuda do Grok, a IA do X, pra ir aprendendo.

    Até agora, já implementei: sistema de partidas, bots, sistema de danos, um mapa pequeno (que vou expandir assim que aprender mais 😅) e personagens – começando a pegar o jeito das animações 3D. E sério, apesar de ter jogado muito jogo em Flash antigamente, rodando no navegador e tal, criar um jogo com HTML, CSS e JS é outra história. Eu nem imaginava que dava pra fazer algo assim.

    A stack que tô usando: HTML, CSS, JavaScript, Three.js, Node.js e Express.js.

    Assim que tiver minimamente jogável, vou subir pro servidor e chamar a galera pra testar. Tô animado.