fix(convex): mover cron jobs para API HTTP + crontab do Linux

Problema:
- Cron jobs do Convex criam registros em _scheduled_job_logs
- Convex self-hosted carrega TODAS as versoes em memoria
- 1488 execucoes/dia = ~45k registros/mes acumulando
- Uso de memoria chegando a 19GB, causando 12 OOM kills/dia

Solucao:
- Criar endpoints HTTP em /api/cron/* para substituir crons
- Desabilitar crons no Convex (comentados em crons.ts)
- Chamar endpoints via crontab do Linux

Novos arquivos:
- src/app/api/cron/chat-cleanup/route.ts
- src/app/api/cron/usb-cleanup/route.ts
- scripts-static/* (copiado da VPS para versionamento)

Documentacao:
- docs/OPERATIONS.md secao 12 com instrucoes do crontab

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
rever-tecnologia 2025-12-10 08:51:32 -03:00
parent e2dde8510a
commit 178c7d7341
10 changed files with 1357 additions and 19 deletions

View file

@ -103,13 +103,22 @@ npx convex dev --once --configure=new
Depois disso, o job “Deploy Convex functions” funciona em modo não interativo.
## 5) VPS — Acesso e Serviços
## 5) VPS — Acesso e Servicos
- Acesso
- Host: `31.220.78.20`
- Usuário: `root`
- Chave SSH (repo raiz): `./codex_ed25519` (Atenção: manter permissões 600)
- Exemplo: `ssh -i ./codex_ed25519 root@31.220.78.20`
- Host: `154.12.253.40`
- Usuario: `root`
- Chave SSH (repo raiz): `./codex_ed25519` (Atencao: manter permissoes 600)
- Exemplo (Git Bash/Linux):
```bash
# Preparar chave (copiar e ajustar permissoes)
cp "./codex_ed25519" ~/.ssh/codex_ed25519
sed -i 's/\r$//' ~/.ssh/codex_ed25519
chmod 600 ~/.ssh/codex_ed25519
# Conectar
ssh -i ~/.ssh/codex_ed25519 root@154.12.253.40
```
- Opcional (endurecimento): desabilitar login por senha após validar a chave.
- Diretórios principais
@ -393,3 +402,58 @@ ssh root@154.12.253.40 "docker service logs sistema_convex_backend 2>&1 | grep -
- Este e um bug interno do Convex self-hosted que pode ser corrigido em versoes futuras
- A solucao de adicionar logs obrigatorios e um workaround que nao afeta performance
- Se novos cron jobs forem adicionados, **sempre incluir um console.log no inicio**
## 12) Cron Jobs — Movidos para Linux crontab
### Problema
Os cron jobs do Convex criam registros em `_scheduled_job_logs` que acumulam versoes em memoria. O Convex self-hosted carrega **todas as versoes de todos os documentos** em RAM, causando uso excessivo de memoria (~19GB para 60k docs).
### Solucao Implementada (2025-12-10)
Os cron jobs foram movidos do Convex para endpoints HTTP no Next.js, chamados via crontab do Linux:
| Cron Job Original | Endpoint HTTP | Frequencia |
|-------------------|---------------|------------|
| `auto-end-inactive-chat-sessions` | `/api/cron/chat-cleanup` | A cada 1 min |
| `cleanup-stale-usb-policies` | `/api/cron/usb-cleanup` | A cada 30 min |
### Configuracao do Crontab na VPS
```bash
# Acessar a VPS
ssh -i ~/.ssh/codex_ed25519 root@154.12.253.40
# Editar crontab
crontab -e
# Adicionar as linhas:
CRON_SECRET="seu_token_secreto_aqui"
# Encerrar sessoes de chat inativas (a cada minuto)
* * * * * curl -s "https://tickets.esdrasrenan.com.br/api/cron/chat-cleanup" -H "x-cron-secret: $CRON_SECRET" >/dev/null 2>&1
# Limpar policies USB pendentes (a cada 30 min)
*/30 * * * * curl -s "https://tickets.esdrasrenan.com.br/api/cron/usb-cleanup" -H "x-cron-secret: $CRON_SECRET" >/dev/null 2>&1
```
### Autenticacao
Os endpoints usam o header `x-cron-secret` para autenticacao. O valor deve ser igual a variavel de ambiente `CRON_SECRET` ou `REPORTS_CRON_SECRET` configurada no Next.js.
### Verificar se esta funcionando
```bash
# Testar endpoint manualmente
curl -s "https://tickets.esdrasrenan.com.br/api/cron/chat-cleanup" \
-H "x-cron-secret: SEU_TOKEN" | jq
# Verificar logs do cron
grep CRON /var/log/syslog | tail -20
```
### Codigo-fonte
- `src/app/api/cron/chat-cleanup/route.ts`
- `src/app/api/cron/usb-cleanup/route.ts`
- `convex/crons.ts` (crons originais comentados)