Episódio 30 - Agendamento Inteligente com JSON Declarativo
Nos episódios anteriores, criamos um mecanismo robusto para interpretar comandos em formato JSON, utilizando estruturas como TSafeThreadInterface e TTaskChain para executar operações de forma segura, paralela e cancelável. Agora chegou a hora de dar um passo importante: transformar esse mecanismo em um agendador inteligente.
⌛️ Por que um Agendador?
Imagine poder descrever em um arquivo JSON quais tarefas devem ser executadas, em qual ordem, com quais condições e em que momento do dia. Sem precisar recompilar o código. Apenas alterando o JSON.
Isso significa:
- Agendar limpeza de dados aos domingos às 3h da manhã
- Executar backup completo somente se o anterior tiver sucesso
- Atualizar relatórios apenas se não houver requisições ativas
- Tudo controlado por expressões lógicas simples no JSON
⚛️ A Estrutura do JSON Agendador
{
"agenda": [
{
"acao": "LimparCache",
"horario": "03:00",
"dias": ["Domingo"],
"condicao": "true"
},
{
"acao": "BackupCompleto",
"apos": "LimparCache",
"condicao": "result.LimparCache == 'sucesso'"
},
{
"acao": "AtualizarRelatorios",
"condicao": "sistema.RequisicoesAtivas == 0"
}
]
}
Cada bloco representa uma tarefa agendada. Podemos definir:
horario: hora fixadias: dias da semanaapos: depende de outra tarefacondicao: expressão que deve ser verdadeira para executar
🔄 Como isso se conecta com TSafeThreadInterface e TTaskChain?
Cada item da agenda é transformado em uma tarefa assíncrona. O mecanismo analisa o JSON, avalia as condições, resolve dependências e utiliza TTaskChain para garantir a ordem e o controle total da execução.
Cada execução produz um resultado que pode ser armazenado em uma estrutura result, permitindo condições em cascata. O agendador é, ao mesmo tempo:
- Declarativo
- Assíncrono
- Encadeado
- Cancelável
- Observável
🚀 Benefícios reais
- Agilidade para clientes mudarem o comportamento do sistema sem recompilar
- Padronização de tarefas complexas com mínimo de código
- Isola lógica de negócio das implementações
- Facilita testes simulando agendamentos
- Permite criar interfaces visuais baseadas no JSON
No próximo episódio, vamos mostrar como carregar dinamicamente essas tarefas usando arquivos externos e criar uma interface simples para monitorar execução, editar e validar agendamentos.
Estamos muito perto de criar uma linguagem declarativa visual para automação de tarefas em Delphi. Tudo começou com um problema simples de travamento na UI... e olha onde fomos parar.