Antes de começar
- Um workflow em status
draft. Apenas um workflow em rascunho aceita uma edição, então escreva o gatilho antes de ativá-lo. Veja Primeiros passos com o Flowker para o caminho de criar e ativar. - O binário do worker rodando com o scheduler habilitado. A variável
SCHEDULER_ENABLEDresolve paratruea menos que você a defina comofalse, e a fila precisa deSCHEDULER_REDIS_HOST. Sem host, o binário do worker não sobe e nenhum workflow agendado dispara. Confira essa variável primeiro quando seus agendamentos nunca dispararem. Veja Variáveis do scheduler. - A permissão
readno recursoworkflowspara listar ocorrências e contagens, eupdateno mesmo recurso para executar ou descartar uma.
Passo 1: Escreva o nó de gatilho de agendamento
Gatilhos já vêm prontos. Você os descobre no catálogo e nunca cria um. Obter um gatilho do catálogo devolve o JSON Schema do gatilho de agendamento a partir da instância em execução:
type: "trigger" e estes campos no seu data:
O que a expressão cron aceita
Cinco campos, separados por espaços. Cada campo aceita*, um valor, uma lista (0,30), um intervalo (9-17) ou um passo (*/15, 9-17/2). O dia da semana vai de 0 a 7, onde tanto 0 quanto 7 significam domingo. Quando você restringe o dia do mês e o dia da semana ao mesmo tempo, o agendamento dispara em um dia que combina com qualquer um dos campos. A expressão 0 9 13 * 5 dispara no dia 13 e em toda sexta-feira.
Um minuto é a cadência mais fina que uma expressão de 5 campos consegue descrever. Para algo mais rápido, receba a chamada conforme ela chega com um gatilho de webhook.
O Flowker confere a expressão quando você salva o workflow e de novo quando você o ativa, e responde FLK-0117 quando ela não vale. Estas formas não valem:
- Uma expressão de seis campos, como
*/30 * * * * *. - Uma macro, como
@dailyou@every 5m. - Um dia ou mês por nome, como
MON,MON-FRIousun. - Um token
Lou#, como0 9 L * *ou0 9 * * 5#2. - Um valor fora do intervalo do seu campo, como
60minutos,24horas, dia do mês0ou32, mês13ou dia da semana8. - Um passo
/0.
Como o timezone funciona
Os campos do cron são hora de relógio na zona que você nomeia, e toda hora que a API devolve é UTC. Um agendamento0 9 * * * em America/Sao_Paulo reporta 12:00Z. Uma zona que observa horário de verão mantém a hora de relógio ao longo da mudança: a mesma expressão em America/New_York reporta 14:00Z no inverno e 13:00Z no verão.
Passo 2: Ative o workflow e leia a cadência
1
Salve o workflow
Envie o nó com o resto do seu workflow para Criar um workflow, ou para Atualizar um workflow se o rascunho já existe. O Flowker valida o cron aqui.
2
Confira a cadência antes de se comprometer com ela
Listar as próximas ocorrências agendadas calcula os próximos disparos direto do gatilho, então você pode lê-los enquanto o workflow ainda é um rascunho.
limit aceita de 1 a 50 e o padrão é 10. Um valor fora desse intervalo responde FLK-0304.3
Ative-o
Chame Ativar um workflow. O produtor restrito ao líder faz uma varredura em um intervalo padrão de 60 segundos. Depois de uma varredura bem-sucedida, o Flowker registra e enfileira a próxima ocorrência para o horário dela.
Passo 3: Veja quais ocorrências não rodaram
Uma ocorrência fica retida quando o motor chega a ela mais de um minuto depois do horário dela e ninguém pediu para aquele horário rodar. Causas comuns são um serviço que estava fora, uma fila que estava atrasada ou um processo que reiniciou. O Flowker nunca roda uma ocorrência retida por conta própria. Ele a segura para a sua decisão, no estado
pending-review. Uma ocorrência retida continua disponível para os endpoints de executar e descartar.
O Flowker nunca preenche retroativamente um horário que passou. Então a lista de retidas guarda os disparos que o Flowker já tinha registrado e não conseguiu rodar. Ela não guarda uma entrada para cada horário que passou durante uma indisponibilidade. A cadência em si retoma a partir do próximo horário futuro.
Uma ocorrência é ignorada quando o motor a pegou e a fechou sem rodar o workflow. O scheduler nunca roda uma ocorrência ignorada de novo. Uma ocorrência ignorada carrega um skipReason, e os endpoints de executar e descartar não a aceitam:
As duas classes não se separam pelo tempo. Uma coisa o tempo decide: um horário atrasado que você nunca pediu para rodar cai na lista de retidas, nunca na lista de ignoradas. Depois que você pede para um horário retido rodar, a idade dele para de segurá-lo. O motor então o pega como qualquer outra ocorrência, e as três razões acima podem fechá-lo. Então um
scheduledFor muito no passado é normal na lista de ignoradas, e não significa que o horário disparou na hora. O Passo 4 cobre em que a sua própria execução pode terminar.
Três leituras cobrem o quadro inteiro:
1
Liste as ocorrências retidas de um workflow
Listar ocorrências agendadas retidas devolve as mais antigas primeiro.
scheduledFor é o horário que a ocorrência representa, e status é o que decide se você pode agir sobre ela.Esta rota não aceita limit nem cursor de página, e devolve no máximo 100 ocorrências. Planeje uma recuperação em lote em torno disso: trabalhe as linhas que você recebe, depois leia a lista de novo.A contagem abaixo reporta o total em pending-review. A lista de retidas pode guardar mais linhas que essa contagem, porque ela também inclui ocorrências missed. O estado missed dura pouco: um horário atrasado o mantém enquanto o motor retém o horário como pending-review. Os endpoints de executar e descartar não aceitam esse estado, então leia a lista de novo e aja quando a linha mostrar pending-review. Descartar a lista inteira também cobre cada ocorrência pendente de revisão, não apenas as 100 que uma única leitura mostra a você.2
Liste as ocorrências ignoradas
Listar ocorrências agendadas ignoradas devolve as mais antigas primeiro, cada uma com seu Ocorrências ignoradas com
skipReason. Quando informado, limit aceita de 1 a 50. Quando omitido, o padrão é 100.active-run repetidas significam que o workflow demora mais que o intervalo entre dois disparos. Alargue a cadência ou faça o workflow terminar mais rápido.3
Conte o que está esperando em todos os workflows
Contar ocorrências pendentes de revisão responde pelo tenant inteiro em uma chamada, que é o que você consulta para um indicador de revisão. O mapa é esparso: um workflow sem nada esperando está ausente dele.Adicione
?workflowIds=<id>,<id> para limitar as contagens aos workflows que interessam a você.200 com um array occurrences vazio para um id de workflow que seu tenant não possui, então uma lista vazia significa “nada para revisar aqui”.
O Flowker expõe os dados de agendamento subjacentes por suas APIs de próximas ocorrências, de retidas e de contagem de pendentes de revisão. Consulte a documentação do Console para orientações de interface.
Passo 4: Execute ou descarte uma ocorrência retida
Executar e descartar agem sobre uma ocorrência cujo
status é pending-review. Qualquer outro estado responde FLK-0755, o que também torna uma chamada repetida segura: a segunda chamada responde o mesmo erro em vez de agir duas vezes. A sua própria execução coloca a ocorrência em um desses outros estados: ela sai de pending-review na hora.
Uma execução que você pede sai da lista de retidas de imediato, e a idade do horário não a segura mais. Isso não promete que o workflow roda:
- O workflow roda. A execução aparece em Listar execuções para aquele workflow.
- O motor fecha a ocorrência como ignorada. Ela sai da lista de retidas para a lista de ignoradas com uma das três razões acima. Uma razão
active-runsignifica que outra execução do workflow ainda estava em andamento. Uma razãoworkflow-gonesignifica que o workflow não estava ativo quando a sua execução chegou ao motor. Uma razãoexecution-duplicatesignifica que o trabalho daquele horário já tinha rodado.
workflow-gone em vez de rodá-la.
1
Execute uma ocorrência
Executar uma ocorrência retida a move para A execução cobre aquele único horário. Ela não desloca a cadência: o próximo disparo continua sendo o que o motor já planejou.
queued e enfileira uma execução forçada no mesmo caminho de execução que um disparo agendado usa. O encaminhador de tarefas adiadas confere a cada segundo por padrão. A hora real de início depende da disponibilidade de workers e da capacidade da fila.2
Descarte uma ocorrência
Descartar uma ocorrência retida a move para
discarded, que é terminal. A ocorrência nunca executa e sai da lista de retidas.3
Limpe toda a lista de retidas de um workflow
Descartar todas as ocorrências retidas descarta, em uma única escrita, cada ocorrência daquele workflow pendente de revisão, e reporta quantas ele moveu.Sem nada pendente de revisão, ele responde
200 com "discarded": 0, então uma chamada repetida é segura.Confirme que funcionou
- A cadência está saudável quando Listar as próximas ocorrências agendadas devolve horários futuros e a lista de retidas continua curta.
- Uma execução funcionou quando a ocorrência saiu da lista de retidas e a execução aparece em Listar execuções para aquele workflow.
- Um descarte funcionou quando a ocorrência saiu da lista de retidas e a contagem de pendentes de revisão daquele workflow caiu.
Mude ou pause uma cadência
Apenas um workflow em rascunho aceita uma edição, então mudar a cadência são quatro chamadas:
- Desativar o workflow. O Flowker para de registrar novas ocorrências para ele.
- Mover para rascunho.
- Atualizar o workflow com o novo valor de
cron,timezoneouenabled. - Ativar. O produtor restrito ao líder faz uma varredura em um intervalo padrão de 60 segundos. Depois de uma varredura bem-sucedida, o Flowker registra e enfileira a próxima ocorrência da nova cadência.
Uma ocorrência retida que o Flowker registrou antes da mudança continua pendente de revisão. Leia a lista de retidas depois de uma mudança de cadência e limpe o que você não quer mais.
Quando algo dá errado
Duas falhas não respondem código de erro:
- A lista de próximas mostra ocorrências, mas nada nunca roda. A API calcula a cadência por conta própria, enquanto o binário do worker é o que dispara. Confirme que o worker roda e que você definiu
SCHEDULER_REDIS_HOST. Veja Variáveis do scheduler. - O Flowker não registra nada novo para um workflow ativo. Confira
enabledno nó de gatilho:falsemantém o workflow ativo e o agendamento dele quieto.
O que vem a seguir
Como configurar um gatilho de webhook
Comece o mesmo workflow a partir de uma chamada HTTP de entrada em vez de uma cadência.
Guia de design de workflows
Construa o resto do grafo em que o gatilho entra.

