Files
ranking/backend/SCHEDULER.md
Frederico Castro c6aaf66e87 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
2025-12-10 01:55:55 -03:00

1.5 KiB

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

# 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:

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:

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.