ADR 0006 — Tarefas em segundo plano com Celery + Redis¶
Status: Aceita · Data: 09/11/2026
Contexto¶
O sistema roda rotinas periódicas: consultar as OLTs, detectar ONUs pendentes, ler o sinal (RX), enviar relatórios e alertas. Rotinas em cron ou shell script costumam precisar de arquivos .lock para não rodar duas vezes ao mesmo tempo, não têm nova tentativa automática, e mudar um horário exige mexer no servidor.
Decisão¶
- Celery como executor, Redis como fila e django-celery-beat como agendador.
- Os horários ficam no banco e são editáveis em
/admin/(Periodic tasks), sem mexer em cron. - Consultas às OLTs rodam no
worker, separadas doweb. Uma OLT lenta não trava as telas.
Alternativas consideradas¶
- systemd timers ou cron + management commands: simples, mas sem nova tentativa automática, sem fila e com o problema de execução duplicada.
- Fila sobre o próprio PostgreSQL (Procrastinate, django-q2): um container a menos, mas com ecossistema menor.
Consequências¶
Dois containers extras (worker, beat) e o Redis. Cada tarefa deve poder rodar duas vezes sem efeito colateral (idempotente).