Pular para o conteúdo
use-cases / mute-flaky-job / hero
CRON · MANAGED ENTRIES · PATCH

Silencie o job instável sem perdê-lo

A exportação horária de métricas vem falhando há três dias. Você está de plantão hoje à noite. Faça PATCH na entrada gerenciada do cron com enabled:false — o agendamento, o comando e o comentário ficam todos. O job está em um estado definido: presente e silenciado, esperando que alguém o conserte.

o toggle é só um PATCH · a entrada nunca sai da lista

use-cases / mute-flaky-job / mechanism

Silenciar é um único PATCH

As entradas gerenciadas do Hoody Cron são um recurso JSON: cada linha tem um id, um agendamento, um comando, um comentário e uma flag enabled. Mudar enabled para false é um PATCH. A entrada permanece no crontab para que a próxima pessoa possa lê-la e decidir o que fazer.

terminal · laptop de plantão
PATCH · silenciar
# mute the flaky entry — entry stays in the crontab
curl -X PATCH \
  https://cron.containers.hoody.com/users/me/entries/e7d3 \
  -H "Content-Type: application/json" \
  -d '["enabled": false, "comment": "flaking on monday with prod-db — see #pager"]'

# response
HTTP/1.1 200 OK
{ "id":"e7d3", "enabled":false, "schedule":"0 * * * *",
  "command":"/srv/cron/metrics-export.sh", ... }
terminal · na manhã seguinte
GET · verificar
# the entry is still on the list — just not running
curl GET https://cron.containers.hoody.com/users/me/entries

HTTP/1.1 200 OK
[
  { "id":"a1f2", "enabled":true,  ... },
  { "id":"e7d3", "enabled":false, "comment":"flaking — see #pager" },
  { "id":"9b21", "enabled":true,  ... }
]
# present and muted — the on-call hand-off has somewhere to point

O PATCH não deleta, não reescreve nem move a entrada — ele inverte um booleano. A passagem é uma linha: 'a entrada metrics-export e7d3 está silenciada, veja o hoody-cron, dá uma olhada por favor.'

use-cases / mute-flaky-job / states

Três estados, uma entrada

Uma entrada num crontab Hoody está sempre em exatamente um de três estados. Cada estado tem consequências diferentes para quem sabe o quê amanhã de manhã.

ENTRY · e7d3 · /srv/cron/metrics-export.shPATCH alterna entre estados — nunca destrutivo
ENABLED

Roda no agendamento, paga em caso de falha

A entrada está no crontab e o daemon do kernel cron a executa toda hora. Falhas acordam o plantão. Esse é o padrão para jobs saudáveis.

MUTED

Presente, pausado, anotado

enabled:false. A entrada continua no crontab para que o time possa ler seu agendamento, comando e comentário. O daemon do cron a ignora. Sem alerta às 2h da manhã, e ninguém esquece que ela existe.

DELETED

Foi-se — e o contexto também

Quando você faz DELETE, o agendamento, o comando, o comentário, o motivo — tudo isso sai do crontab. O próximo plantão não tem nada para grepar. Silenciar é a escolha que mantém a memória.

Silenciado é o estado intermediário para o qual a maioria dos schedulers não tem nome. O Hoody Cron tem, porque enabled é um campo de primeira classe na entrada gerenciada.

use-cases / mute-flaky-job / powers

Por que um estado silenciado definido importa

Quando você não consegue consertar um job hoje à noite, a pergunta é que forma a ausência dele assume até amanhã. O silenciamento torna essa forma legível.

PASSAGEM

A mensagem de plantão é uma linha

Em vez de colar uma thread do Slack ou um PR com a linha deletada, a mensagem é o id da entrada. O plantão de amanhã abre a URL do cron, lê o comentário e sabe por onde começar.

AUDITORIA

Todo silenciamento é uma linha, não uma lembrança

GET /entries retorna enabled:false junto com o comentário. Construa um painel de auditoria filtrando. Quem silenciou, por quê e há quanto tempo está no JSON, não nos DMs de alguém.

REVERSÍVEL

Reativar é o PATCH inverso

Quando o problema raiz é resolvido, mais um PATCH com enabled:true devolve a entrada ao agendamento. Sem reescrever a expressão cron, sem risco de erro de digitação, sem ciclo de commit-and-deploy.

use-cases / mute-flaky-job / capacity

O que a API do cron te dá

Os números vêm da superfície de managed-entries do Hoody Cron, não de benchmarks inventados.

  1. UM MÉTODOPATCH

    PATCH /users/[user]/entries/[id] aceita um corpo parcial. Envie ["enabled":false] sozinho — agendamento, comando e comentário ficam intocados.

  2. CAMPOS PRESERVADOS5+1

    Agendamento de cinco campos, comando, comentário, expires_at e id, todos persistem ao silenciar. O crontab do kernel ainda reflete a entrada — apenas comentada pelo serviço do cron.

  3. REESCRITAS0

    Sem edição de arquivo, sem PR, sem deploy. O round-trip do silenciamento é uma chamada HTTP a partir de qualquer terminal, inclusive o do seu celular.

Conforme a API de Managed Entries do Hoody Cron: cada entrada carrega um booleano enabled junto com agendamento, comando, comentário e expires_at opcional. PATCH aceita corpos parciais.

use-cases / mute-flaky-job / punchline

Desabilitado não é deletado — a entrada espera alguém consertá-la.

hoje à noite · de plantão · 23:14amanhã · o time · 09:00
COMO ERA O FLUXO ANTIGOvim crontab → comentar linha → commit → PR → merge → deployseis passos · perde o contexto do comentário · arrisca um typo numa noite cansada
COMO É AGORAcurl -X PATCH .../entries/e7d3 -d '["enabled":false]'um PATCH · entrada permanece na lista · a nota viaja com ela
use-cases / mute-flaky-job / replaces

O que isto substitui

As formas usuais de os times 'temporariamente' estacionarem uma linha de cron instável. Cada uma é destrutiva, com perda ou a dois PRs da produção.

  • comentar linhas do crontab à mãoPerde a flag enabled estruturada · fácil esquecer
  • deletar a entrada e 'lembrar'Agendamento, comando e motivo vão embora junto
  • comentários // FIXME manuais no códigoVivem num repo, não no agendamento que roda
  • threads do Slack como memória de plantãoPesquisáveis por uma semana · depois não é tarefa de ninguém
  • issues do GitHub para jobs silenciados-mas-não-deletadosUma issue para algo que ainda está no crontab — estado duplicado
  • configuração de cron gerenciada por TerraformPlan, apply, deploy — para um campo booleano
use-cases / mute-flaky-job / cta

Pare de deletar jobs instáveis às 2h da manhã. Silencie-os, deixe uma nota e deixe o plantão de amanhã ler o JSON.

use-cases / mute-flaky-job / related

Leia os outros