54ad365b4db689885e6476e93dfd0f8a51758221
V-Fire Monitor
Aplicacao Flask para monitoramento de centrais Notifier via Modbus/TCP, com painel web, descoberta de pontos, integracao com Zabbix e licenciamento por hardware.
O que mudou nesta refatoracao
- Persistencia JSON com escrita atomica e migracao de configuracao legada.
- Login com hash de senha em vez de senha em texto puro no arquivo de configuracao.
- Chave secreta do Flask persistida localmente, sem valor fixo no codigo.
- Validacao de payloads da API e respostas de erro consistentes.
- Logging basico para diagnostico, no lugar de falhas silenciosas.
- Polling Modbus e discovery por blocos, reduzindo chamadas individuais.
- Frontend com tratamento de erro e textos corrigidos.
- Gerador de licenca com argumentos de linha de comando e validacao de data.
Estrutura
monitor.py: entrypoint simples da aplicacao Flask.vfire_monitor/__init__.py: app factory e bootstrap da aplicacao.vfire_monitor/core.py: regras de negocio, persistencia, licenca e engine de monitoramento.vfire_monitor/routes.py: rotas web e APIs.generator.py: gerador de serial de licenca.templates/: telas do login e dashboard.tests/: suite inicial de testes automatizados.config_nodes.json: configuracao persistida da aplicacao.mapa_dispositivos.json: mapa de dispositivos descobertos.license.key: serial instalado localmente.app_secret.key: segredo de sessao gerado automaticamente na primeira execucao.
Requisitos
- Python 3.10+
- Conectividade com as centrais via Modbus/TCP
- Acesso ao servidor Zabbix, quando a integracao estiver habilitada
Instalacao:
pip install -r requirements.txt
Variaveis de ambiente
Veja .env.example.
As principais:
VFM_DEFAULT_PASSWORD: senha inicial do usuarioadminna primeira carga do sistema.VFM_APP_SECRET: opcional, substitui o segredo salvo emapp_secret.key.VFM_LICENSE_MASTER_KEY: chave mestre do licenciamento. Em producao, use esta variavel e remova a dependencia da chave legada.VFM_ENV: useproductionpara obrigarVFM_LICENSE_MASTER_KEYno startup.VFM_LOG_LEVEL: nivel de log, por exemploINFOouDEBUG.PORT: porta HTTP da aplicacao.
Execucao
python monitor.py
O sistema sobe em http://0.0.0.0:8080 por padrao.
Geracao de licenca
Modo interativo:
python generator.py
Modo por argumentos:
python generator.py --hwid "UUID-DO-CLIENTE" --cliente "Cliente" --expira 2026-12-31
Observacoes operacionais
- A senha do painel fica armazenada como hash em
config_nodes.json. - Se existir configuracao antiga com
web_password, ela e migrada automaticamente paraweb_password_hash. - Em ambiente de desenvolvimento, o sistema ainda aceita a chave de licenca legada embutida para manter compatibilidade.
- Em ambiente de producao (
VFM_ENV=production),VFM_LICENSE_MASTER_KEYpassa a ser obrigatoria e o sistema falha no startup sem ela. - Bootstrap continua sendo carregado via CDN. Se o ambiente nao tiver acesso externo, copie os assets localmente e ajuste os templates.
Testes
Executar:
pytest
Proximos passos recomendados
- Adicionar testes cobrindo polling Modbus e integracao com Zabbix com doubles dedicados.
- Separar configuracao e logging em modulos proprios se a aplicacao continuar crescendo.
- Trocar Bootstrap via CDN por assets locais se o ambiente alvo nao tiver acesso externo.
Languages
Python
48.1%
Shell
23.1%
HTML
20.6%
CSS
6.7%
JavaScript
1.5%