diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml
index 86bf87f..2de5125 100644
--- a/.gitea/workflows/deploy.yml
+++ b/.gitea/workflows/deploy.yml
@@ -34,7 +34,20 @@ jobs:
- name: Build e deploy container
run: |
cd /opt/wifi-etl
- docker compose -f infra/docker-compose.yml up -d --build
+
+ # Tentar com docker compose (v2)
+ if command -v docker &> /dev/null && docker compose version &> /dev/null; then
+ echo "Usando docker compose v2..."
+ docker compose up -d --build
+ # Fallback para docker-compose (v1)
+ elif command -v docker-compose &> /dev/null; then
+ echo "Usando docker-compose v1..."
+ docker-compose -f infra/docker-compose.yml up -d --build
+ else
+ echo "✗ Nem docker compose nem docker-compose encontrado"
+ exit 1
+ fi
+
echo "✓ Container iniciado"
- name: Aguardar inicialização
diff --git a/README.md b/README.md
index c6aca38..c8f111e 100644
--- a/README.md
+++ b/README.md
@@ -243,31 +243,6 @@ WHERE online_time::date = CURRENT_DATE - 1;
---
-## 🏗️ Arquitetura (versão simplificada)
-
-```mermaid
-flowchart TD
-
- A[Cron (5min)] --> B[main.py]
-
- B --> C{Watermark
last_run < 1h?}
- C -->|Sim| D[Usa watermark
(delta only)]
- C -->|Não| E[Extrai tudo]
-
- D --> F[Ruijie API
page=1..N]
- E --> F
-
- F --> G[transform_ruijie
normalize_mac]
- F --> H[transform_wifeed
normalize_mac + CPF]
-
- G --> I[PostgreSQL
sessions + users]
- H --> I
-
- I --> J[Update watermarks
last_run_at + last_value]
-```
-
----
-
## 📊 Modelo de Dados
```
@@ -328,11 +303,10 @@ watermarks
- [x] CI/CD (push → deploy)
- [ ] Retry com backoff nas APIs
- [ ] Testes unitários (pytest)
-- [ ] Métricas Prometheus
---
## 📝 Licença
-Proprietário — uso interno.
+Proprietário — Sothis
diff --git a/docs/DEPLOY.md b/docs/DEPLOY.md
deleted file mode 100644
index 2b6e926..0000000
--- a/docs/DEPLOY.md
+++ /dev/null
@@ -1,213 +0,0 @@
-# Deploy WiFi-ETL em Produção
-
-## Arquitetura
-
-- **Aplicação**: `/opt/wifi-etl` (clone do repositório)
-- **Config**: `.env` copiado de `/home/desenvolvimento/.envs/wifi_etl/.env`
-- **Container**: Rodando via `docker compose` (cron + ETL)
-- **Runner**: Self-hosted na VM (pull automático na mudança de código)
-
-## Setup Inicial (uma única vez na VM)
-
-### 1. Configurar Self-Hosted Runner no Gitea
-
-Na **VM de produção**:
-
-```bash
-# Criar diretório para o runner
-mkdir -p ~/gitea-runner
-cd ~/gitea-runner
-
-# Baixar runner Gitea (Linux x86_64)
-# Substitua URL pela sua instância Gitea
-wget https://seu-gitea.com/api/v1/repos/seu-usuario/wifi-etl/actions/runners/download/linux_x86_64
-
-# Ou use curl:
-# curl -LO https://seu-gitea.com/api/v1/repos/seu-usuario/wifi-etl/actions/runners/download/linux_x86_64
-
-# Descompactar
-unzip linux_x86_64
-chmod +x act_runner
-
-# Gerar token no Gitea:
-# 1. Vá para: Repositório → Settings → Actions → Runners
-# 2. Clique "Create Runner"
-# 3. Copie o Token gerado
-
-# Registrar runner (substitua o token)
-./act_runner register \
- --instance https://seu-gitea.com \
- --token seu_token_aqui
-
-# Rodar em background
-nohup ./act_runner daemon > runner.log 2>&1 &
-
-# OU criar systemd service (recomendado):
-sudo tee /etc/systemd/system/gitea-runner.service > /dev/null << 'EOF'
-[Unit]
-Description=Gitea Runner
-After=network.target
-
-[Service]
-Type=simple
-User=ubuntu
-WorkingDirectory=/home/ubuntu/gitea-runner
-ExecStart=/home/ubuntu/gitea-runner/act_runner daemon
-Restart=always
-RestartSec=10
-
-[Install]
-WantedBy=multi-user.target
-EOF
-
-sudo systemctl enable gitea-runner
-sudo systemctl start gitea-runner
-sudo systemctl status gitea-runner
-```
-
-### 2. Preparar diretório da aplicação
-
-```bash
-# Criar diretório
-mkdir -p /opt/wifi-etl
-
-# Primeiro clone manual (depois é automático)
-cd /opt/wifi-etl
-git clone https://seu-gitea.com/seu-usuario/wifi-etl.git .
-```
-
-## Fluxo de Deploy Automático
-
-```
-1. git push main (local → Gitea)
- ↓
-2. Gitea dispara workflow (push event)
- ↓
-3. Runner na VM executa
- ↓
-4. git pull /opt/wifi-etl (atualiza código)
- ↓
-5. Copiar .env
- ↓
-6. docker compose up -d --build
- ↓
-7. Validar CRON status
- ↓
-8. Testar conexão BD
- ↓
-DONE! ✓
-```
-
-## Deploy Manual (se necessário)
-
-```bash
-# Na VM
-cd /opt/wifi-etl
-git pull origin main
-cp /home/desenvolvimento/.envs/wifi_etl/.env ./.env
-docker compose -f infra/docker-compose.yml up -d --build
-
-# Aguardar inicialização
-sleep 5
-docker logs -f wifi_etl_worker
-```
-
-## Verificações Pós-Deploy
-
-```bash
-# Status do container
-docker ps -a | grep wifi_etl
-
-# Logs em tempo real
-docker logs -f wifi_etl_worker
-
-# Validar cron rodando
-docker exec wifi_etl_worker ps aux | grep cron
-
-# Testar banco de dados
-docker exec wifi_etl_worker python3 << 'EOF'
-import psycopg2, os
-try:
- conn = psycopg2.connect(
- host=os.getenv('DB_HOST'),
- port=int(os.getenv('DB_PORT', 5432)),
- dbname=os.getenv('DB_NAME'),
- user=os.getenv('DB_USER'),
- password=os.getenv('DB_PASSWORD')
- )
- print("✓ Database conectado")
- conn.close()
-except Exception as e:
- print(f"✗ Erro: {e}")
-EOF
-
-# Ver logs de ETL
-docker exec wifi_etl_worker tail -50 /var/log/wifi-etl.log
-```
-
-## Troubleshooting
-
-### Container não inicia
-```bash
-docker logs wifi_etl_worker
-docker exec wifi_etl_worker env | grep DB_
-```
-
-### Cron não funciona
-```bash
-docker exec -it wifi_etl_worker bash
-cat /etc/cron.d/wifi-etl # Verificar arquivo
-tail -20 /var/log/syslog # Verificar logs
-```
-
-### Banco não conecta
-```bash
-# Verificar variáveis de ambiente
-docker exec wifi_etl_worker env | grep DB_
-
-# Testar conexão
-docker exec wifi_etl_worker python3 -m \
- psycopg2 "postgresql://user:pass@host:port/db"
-```
-
-### Runner não pegando mudanças
-```bash
-cd ~/gitea-runner
-./act_runner status
-
-# Ver logs
-tail -50 runner.log
-
-# Restart
-pkill act_runner
-nohup ./act_runner daemon > runner.log 2>&1 &
-```
-
-## Revertir Deploy
-
-```bash
-# Parar container
-docker-compose -f /opt/wifi-etl/infra/docker-compose.yml down
-
-# Remover para forçar rebuild
-docker rmi wifi-etl:latest
-
-# Ou voltar para commit anterior
-cd /opt/wifi-etl
-git reset --hard HEAD~1
-# Depois fazer deploy novamente
-```
-
-## ETL Schedule
-
-Roda a cada **5 minutos** em produção:
-
-```
-*/5 * * * * /usr/local/bin/python /app/main.py
-```
-
-Logs: `/var/log/wifi-etl.log` (dentro do container)
-
----
-
-**Last updated**: 2026-04-22
diff --git a/docs/PROD_SETUP.md b/docs/PROD_SETUP.md
deleted file mode 100644
index 4433ae3..0000000
--- a/docs/PROD_SETUP.md
+++ /dev/null
@@ -1,196 +0,0 @@
-# 🖥️ Setup do Servidor de Produção
-
-## 1. Sistema Operacional
-
-Ubuntu 22.04+ ou Debian 12 recomendados.
-
-```bash
-# Atualiza
-sudo apt update && sudo apt upgrade -y
-
-# Instala Docker
-sudo apt install -y docker.io docker-compose-plugin
-
-# Habilita e inicia
-sudo systemctl enable docker
-sudo systemctl start docker
-
-# Adiciona usuário deploy ao grupo docker (se usar usuário não-root)
-sudo usermod -aG docker $USER
-# Faça logout/login ou: newgrp docker
-```
-
----
-
-## 2. Estrutura de Diretórios
-
-```bash
-# Cria diretório da aplicação
-sudo mkdir -p /opt/wifi-etl
-sudo chown $USER:$USER /opt/wifi-etl # ou usuário deploy
-cd /opt/wifi-etl
-```
-
----
-
-## 3. SSH Key (para CI/CD acessar)
-
-No **servidor de produção**, gere uma chave para o deploy (ou use existente):
-
-```bash
-# Como usuário deploy (ou root)
-ssh-keygen -t rsa -b 4096 -C "deploy@wifi-etl" -f ~/.ssh/id_rsa_wifi_etl -N ""
-
-# Exiba a chave pública (adicionar no Gitea como Deploy Key ou user key)
-cat ~/.ssh/id_rsa_wifi_etl.pub
-# Copie o conteúdo → Gitea Settings → Deploy Keys → Add Key
-```
-
-**No Gitea (repositório):**
-- Settings → Deploy Keys → Add Deploy Key
-- Cole a chave pública
-- Marque "Allow write access" (para permitir deploy via SSH)
-
----
-
-## 4. Docker Network (opcional — o compose cria automáticamente)
-
-```bash
-docker network create wifi-etl-net
-```
-
----
-
-## 5. Banco de Dados (VM separada ou mesmo servidor)
-
-Se o DB estiver na mesma VM (não recomendado p/ prod):
-
-```bash
-docker run -d \
- --name wifi-db \
- -e POSTGRES_PASSWORD=$DB_PASSWORD \
- -e POSTGRES_DB=$DB_NAME \
- -p 5432:5432 \
- postgres:15-alpine
-```
-
-Se DB for externo: pule — apenas configure `DB_HOST` no `.env` do ETL.
-
----
-
-## 6. Variáveis de Ambiente no Servidor
-
-No servidor, crie `/opt/wifi-etl/.env`:
-
-```bash
-cat > /opt/wifi-etl/.env << 'EOF'
-DB_HOST=localhost # ou IP do DB externo
-DB_PORT=5432
-DB_NAME=wifi_etl
-DB_USER=postgres
-DB_PASSWORD=sua_senha_aqui
-
-RUIJIE_BASE_URL=https://cloud-eu.ruijienetworks.com
-RUIJIE_APPID=open52d4899cdbe2
-RUIJIE_SECRET=10493c81e8e94f56b8710d78ed2527c7
-RUIJIE_ACCESS_TOKEN=
-RUIJIE_GROUP_ID=9290679
-
-WIFEED_BASE_URL=https://api.wifeed.com.br
-WIFEED_CLIENT_ID=60e40ee2-f39f-4556-8a22-840a2e3fa686
-WIFEED_CLIENT_SECRET=dRpd6FB2hjbyvcA
-
-LOG_LEVEL=INFO
-EOF
-
-chmod 600 /opt/wifi-etl/.env
-```
-
----
-
-## 7. Deploy Inicial (manual)
-
-Após primeiro push na `main` (CI/CD automático), ou manual:
-
-```bash
-cd /opt/wifi-etl
-
-# Copie arquivos do repositório (ou o CI/CD faz isso)
-# Você precisará de:
-# - docker-compose.prod.yml
-# - infra/init.sql (schema)
-
-# 1) Crie schema no DB
-# Se DB local:
-docker exec -i wifi-db psql -U postgres -d wifi_etl < infra/init.sql
-
-# Se DB externo:
-psql -h $DB_HOST -U $DB_USER -d $DB_NAME -f infra/init.sql
-
-# 2) Teste imagem local (antes do CI/CD)
-docker build -f infra/Dockerfile -t wifi-etl:test .
-docker run --rm \
- -e DB_HOST=... -e DB_PASSWORD=... \
- -e RUIJIE_APPID=... -e RUIJIE_SECRET=... \
- -e WIFEED_CLIENT_ID=... -e WIFEED_CLIENT_SECRET=... \
- wifi-etl:test
-
-# 3) Se OK, o CI/CD fará deploy automático no próximo push na main.
-```
-
----
-
-## 8. Monitoramento
-
-```bash
-# Logs do container
-docker logs wifi-etl-worker -f
-
-# Estatísticas
-docker stats wifi-etl-worker
-
-# graceful restart
-docker restart wifi-etl-worker
-```
-
----
-
-## 9. Backup do Banco
-
-```bash
-# Diário via cron no servidor do DB
-0 2 * * * pg_dump -U postgres wifi_etl > /backup/wifi_etl_$(date +\%Y-\%m-\%d).sql
-```
-
----
-
-## 10. Troubleshooting
-
-| Problema | Solução |
-|---|---|
-| `permission denied` ao conectar SSH | Adicione chave pública ao `~/.ssh/authorized_keys` do usuário deploy |
-| Container sobe e para | Verifique logs: `docker logs wifi-etl-worker` — falta `.env` ou erro de conexão DB |
-| DBconnection refused | Verifique `DB_HOST`, firewall, `pg_hba.conf` |
-| Token Ruijie expirado | Delete `RUIJIE_ACCESS_TOKEN` do `.env` — ETL renova automaticamente |
-| Watermark não avança | `onlineTime` deve ser > watermark anterior; verifique formato (epoch ms) |
-
----
-
-## 📋 Checklist Deploy
-
-- [ ] Docker instalado no servidor
-- [ ] Usuário `deploy` criado (ou use root)
-- [ ] SSH key pair gerado; **public key** adicionada ao Gitea Deploy Keys
-- [ ] Diretório `/opt/wifi-etl` criado
-- [ ] `.env` copiado para `/opt/wifi-etl/` (ou use variáveis do CI/CD)
-- [ ] `infra/init.sql` executado no banco
-- [ ] Firewall: porta 5432 (DB) acessível do servidor ETL
-- [ ] Gitea Variables configuradas (DB, Ruijie, WiFeed)
-- [ ] Gitea Secret `SSH_PRIVATE_KEY` configurado
-
----
-
-Após push em `main`, o workflow Gitea fará:
-1. Build → artifact
-2. SSH deploy → servidor
-3. Container reiniciado