refactor: Substitui APScheduler por asyncio nativo para OCP
- Remove dependência apscheduler - Implementa loop asyncio com sleep calculado - Compatível com ambientes sem cron (OCP/Kubernetes) - Documenta solução em SCHEDULER.md
This commit is contained in:
60
backend/SCHEDULER.md
Normal file
60
backend/SCHEDULER.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# Scheduler de Ranking - Solução para OCP
|
||||
|
||||
## Problema
|
||||
|
||||
Em ambientes OpenShift Container Platform (OCP), não é possível usar cron dentro dos PODs.
|
||||
|
||||
## Solução Implementada
|
||||
|
||||
Loop asyncio nativo Python sem dependências externas.
|
||||
|
||||
### Características
|
||||
|
||||
- **100% Python nativo** - Usa apenas `asyncio` e `datetime`
|
||||
- **Portável** - Funciona em qualquer ambiente Docker/Kubernetes/OCP
|
||||
- **Sem dependências** - Removemos `apscheduler` do requirements.txt
|
||||
- **Simples** - Loop infinito com sleep calculado até próximo horário
|
||||
|
||||
### Funcionamento
|
||||
|
||||
```python
|
||||
# Calcula tempo até próxima execução (ex: 3h da manhã)
|
||||
proxima_execucao = datetime.now().replace(hour=3, minute=0, second=0)
|
||||
if agora >= proxima_execucao:
|
||||
proxima_execucao += timedelta(days=1)
|
||||
|
||||
# Aguarda assincronamente
|
||||
await asyncio.sleep(segundos_ate_proxima)
|
||||
|
||||
# Executa job
|
||||
await job.executar(limpar_antes=True)
|
||||
```
|
||||
|
||||
### Configuração
|
||||
|
||||
Padrão: **3h da manhã** (horário do servidor)
|
||||
|
||||
Para alterar: edite `backend/src/interface/api/app.py` linha 23:
|
||||
|
||||
```python
|
||||
await scheduler.iniciar(hora_alvo=3) # Altere para outra hora
|
||||
```
|
||||
|
||||
### Logs
|
||||
|
||||
```
|
||||
Próxima execução do ranking: 11/12/2025 03:00:00
|
||||
Scheduler do ranking iniciado: job rodará diariamente às 3h
|
||||
```
|
||||
|
||||
### Execução Manual
|
||||
|
||||
Se precisar rodar fora do schedule:
|
||||
|
||||
```bash
|
||||
curl -X POST "http://localhost:8000/api/v1/ranking/processar?limpar=true"
|
||||
```
|
||||
|
||||
### Migração para OCP
|
||||
|
||||
Nenhuma configuração adicional necessária. O container já está pronto.
|
||||
Reference in New Issue
Block a user