98 lines
3.4 KiB
Markdown
98 lines
3.4 KiB
Markdown
# 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:
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
## Variaveis de ambiente
|
|
|
|
Veja `.env.example`.
|
|
|
|
As principais:
|
|
|
|
- `VFM_DEFAULT_PASSWORD`: senha inicial do usuario `admin` na primeira carga do sistema.
|
|
- `VFM_APP_SECRET`: opcional, substitui o segredo salvo em `app_secret.key`.
|
|
- `VFM_LICENSE_MASTER_KEY`: chave mestre do licenciamento. Em producao, use esta variavel e remova a dependencia da chave legada.
|
|
- `VFM_ENV`: use `production` para obrigar `VFM_LICENSE_MASTER_KEY` no startup.
|
|
- `VFM_LOG_LEVEL`: nivel de log, por exemplo `INFO` ou `DEBUG`.
|
|
- `PORT`: porta HTTP da aplicacao.
|
|
|
|
## Execucao
|
|
|
|
```bash
|
|
python monitor.py
|
|
```
|
|
|
|
O sistema sobe em `http://0.0.0.0:8080` por padrao.
|
|
|
|
## Geracao de licenca
|
|
|
|
Modo interativo:
|
|
|
|
```bash
|
|
python generator.py
|
|
```
|
|
|
|
Modo por argumentos:
|
|
|
|
```bash
|
|
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 para `web_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_KEY` passa 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:
|
|
|
|
```bash
|
|
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.
|