<<<<<<< HEAD
Plataforma de monitoramento de infraestrutura com visual premium (glassmorphism, estilo Apple/Linear/Vercel), conforme o prompt original.
- ✅ Backend (FastAPI): auth JWT + RBAC, CRUD de servidores, ingestão de métricas, dashboard em tempo real, alertas (regras + avaliação automática + email), mapa de infraestrutura, gestão de usuários, relatórios em PDF (manual e automático toda segunda-feira)
- ✅ Collector service: agente Python que faz polling de Windows Exporter / Node Exporter
- ✅ Frontend (Next.js 15 + TypeScript + Tailwind): login, dashboard, lista/detalhe de servidores com gráfico de histórico, alertas, mapa de infraestrutura, usuários, relatórios, modo NOC/TV — todas as telas com o design system glass (dark/light mode, blur, cards translúcidos) definido nas Fases 5-7
- ✅ Docker Compose: Postgres+TimescaleDB, Redis, API, collector e frontend, todos orquestrados juntos
vr-monitor/
├── apps/api/ # Backend FastAPI
├── apps/web/ # Frontend Next.js
├── agent/ # Collector service (polling dos exporters)
└── infra/docker/ # Docker Compose
- Docker e Docker Compose
- (Opcional, só se quiser rodar sem Docker) Python 3.12+, Node.js 20+, Postgres 16 com extensão TimescaleDB, Redis 7
cd vr-monitor/apps/api
cp .env.example .envEdite o .env e defina dois segredos (qualquer string aleatória longa serve):
JWT_SECRET_KEYINTERNAL_SERVICE_TOKEN
(Opcional) Preencha SMTP_HOST/SMTP_USER/SMTP_PASSWORD se quiser que alertas e relatórios sejam enviados por email de verdade. Sem isso, o sistema funciona normalmente — só loga em vez de enviar.
cd vr-monitor/apps/web
cp .env.local.example .env.localO padrão (http://localhost:8000) já funciona se você não mudar as portas do Compose.
Edite vr-monitor/agent/config.yaml:
api.service_tokendeve ser idêntico aoINTERNAL_SERVICE_TOKENdo.envda API- Ajuste a lista
serverscom os hostnames e URLs reais dos seus Windows Exporter / Node Exporter (porta padrão:9100para Node Exporter,9182para Windows Exporter)
O
hostnamenoconfig.yamlprecisa ser exatamente igual aohostnamecadastrado via API — é assim que o collector sabe para qual servidor enviar cada métrica.
cd vr-monitor/infra/docker
docker compose up -d db redis
docker compose run --rm api alembic upgrade head
docker compose run --rm api python -m scripts.seed_admin "Admin" admin@empresa.com "senha-forte-123"docker compose up -d api agent web- Frontend:
http://localhost:3000 - API:
http://localhost:8000(documentação interativa em/docs)
Abra http://localhost:3000/login e entre com o admin criado no passo 4. Cadastre servidores pela própria interface (Servidores → Novo servidor) — depois disso o collector já consegue enviar métricas para eles.
Para o modo NOC/TV (sem menus, cards grandes), acesse http://localhost:3000/noc.
cd vr-monitor/infra/docker
docker compose down # mantém os dados
docker compose down -v # remove também os volumes (apaga banco e relatórios gerados)Backend:
cd vr-monitor/apps/api
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # edite DATABASE_URL e REDIS_URL para localhost
alembic upgrade head
python -m scripts.seed_admin "Admin" admin@empresa.com "senha-forte-123"
uvicorn app.main:app --reloadRequer um Postgres local com a extensão timescaledb habilitada e um Redis em localhost:6379.
Frontend:
cd vr-monitor/apps/web
cp .env.local.example .env.local
npm install
npm run devCollector:
cd vr-monitor/agent
pip install -r requirements.txt
python collector.py config.yaml# Login
curl -X POST http://localhost:8000/api/v1/auth/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=admin@empresa.com&password=senha-forte-123"
# Cadastrar um servidor
curl -X POST http://localhost:8000/api/v1/servers \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{"name":"srv-web-01","hostname":"srv-web-01.empresa.local","ip_address":"10.0.1.15","os_type":"linux","os_version":"Ubuntu 24.04"}'
# Criar uma regra de alerta (CPU > 90%)
curl -X POST http://localhost:8000/api/v1/alerts/rules \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{"metric_type":"cpu","operator":"gt","threshold":90,"severity":"critical","notify_emails":["infra@empresa.com"]}'
# Gerar um relatório manualmente
curl -X POST http://localhost:8000/api/v1/reports/generate \
-H "Authorization: Bearer <access_token>"Este ambiente de desenvolvimento não tem acesso à rede (não dá para pip install nem npm install) nem Postgres/Redis/Node disponíveis para rodar o sistema de ponta a ponta. O que foi validado aqui:
- Backend: sintaxe de 100% dos arquivos Python (
python -m py_compile), mais um teste isolado da lógica de parsing do collector (parsing do formato Prometheus + cálculo de CPU/RAM/disco). - Frontend: sintaxe de 100% dos arquivos TypeScript/TSX (via
ts.transpileModule, que não depende dos pacotes instalados) — mas isso não verifica tipos nem imports quebrados. Rodenpm install && npm run buildno seu ambiente para pegar qualquer erro de tipo antes de ir para produção.
Recomendo seguir o passo a passo acima e me avisar se algo der erro — ajusto rapidamente.
origin/master