Pular para o conteúdo
use-cases / daily-rollups-no-orchestrator / hero
ROLLUPS DIÁRIOS · SEM ORQUESTRADOR

Rollups diários sem um orquestrador

Toda noite à 1h, uma entrada de cron dá curl numa URL exec. O script roda seu SQL de rollup na URL sqlite e grava a tabela diária de volta. Sem Postgres do Airflow, sem arquivo de DAG, sem dashboard de scheduler com 14 widgets, sem plantão para o próprio orquestrador.

Leia a documentação
use-cases / daily-rollups-no-orchestrator / mechanism

Duas URLs e um agendamento de cinco campos

O pipeline inteiro é uma entrada de cron apontando para uma URL exec. A entrada de cron é um POST em /users/root/entries. A URL exec é um pequeno script que abre a URL sqlite, roda o SQL de rollup e devolve as novas linhas. Esse é o DAG inteiro.

POST /users/root/entries
O AGENDAMENTO
// toda noite às 01:00 UTC
POST /users/root/entries
{
  "schedule": "0 1 * * *",
  "command":  "curl -fsS https://exec.containers.hoody.com/scripts/rollup/run"
}
1H · CURL
exec.containers.hoody.com/scripts/rollup/run
O PIPELINE
// o corpo do pipeline inteiro
import { Database } from "bun:sqlite";

const db = new Database("events.db");
db.run(`INSERT INTO rollup_daily
         SELECT date_trunc('day', created_at), count(*)
         FROM   events GROUP BY 1;`);

return { ok: true, rows: db.query("SELECT * FROM rollup_daily").all() };

Se o rollup falhar, os logs do cron dizem. Se você precisar reprocessar ontem, dá curl na URL exec à mão com um parâmetro de data. Não há um segundo sistema pra aprender, banco de dados de scheduler pra manter vivo, arquivo de DAG pra commitar. O orquestrador é uma entrada de cron apontando pra uma URL.

use-cases / daily-rollups-no-orchestrator / powers

O que você não teve que construir

O Hoody Kit entrega o scheduler, o runtime e o storage como serviços HTTP simples. O pipeline é a chamada curl entre eles — nada mais.

SEM DAEMON DE ORQUESTRADOR

O scheduler é uma entrada HTTP

O hoody-cron guarda agendamentos como recursos em /users/root/entries. Sem banco Postgres de metadata pra fazer backup, sem contêiner de scheduler pra manter saudável, sem repositório de DAG pra implantar. POST numa linha, e a execução dispara.

SEM FIAÇÃO DE RUNTIME

O script é uma URL

O hoody-exec roda o script de rollup sob demanda em exec.containers.hoody.com/scripts/rollup/run. O cron dá curl, recebe um 200, loga a resposta. Sem fila de worker, sem broker, sem grafo de tarefas serializado.

SEM PIPELINE DE LOGS

O histórico de execução é o corpo da resposta

Toda chamada exec devolve as novas linhas como JSON e é logada pelo cron com status, timestamp e stdout. Reprocessamentos, falhas e re-execuções vivem todos nas mesmas duas URLs — nada extra pra mandar pra um agregador de logs.

use-cases / daily-rollups-no-orchestrator / backfill

Se uma execução falhar — ou você precisar reprocessar

O pipeline são duas URLs e um param de data. Reexecutar ontem tem o mesmo formato da execução noturna, só que com ?date=2026-04-30 na URL exec. Sem UI de replay, sem manhas de scheduler.

  1. 01 · DETECTAR

    os logs do cron dizem que falhou

    Se a execução da 1h retornou um non-2xx, o registro de última execução da entrada no hoody-cron mostra o código de saída e o corpo da resposta capturado. Sem serviço de alerta separado pra ligar — GET na entrada e leia.

  2. 02 · REPROCESSAR

    curl na URL exec com ?date=

    O script aceita um parâmetro de data. Passe a data de ontem e ele recomputa a linha de rollup daquele dia, substituindo a quebrada com um INSERT OR REPLACE. Um comando, sem UI de re-trigger de DAG.

  3. 03 · VERIFICAR

    a resposta é a nova linha

    O exec devolve a linha de rollup recém-escrita como JSON. Compare com o que você esperava e siga em frente. Nada mais pra checar — a URL do dashboard serve a mesma tabela que você acabou de escrever.

// reexecutar o rollup de ontem à mãocurl -fsS https://exec.containers.hoody.com/scripts/rollup/run?date=2026-04-30
use-cases / daily-rollups-no-orchestrator / capacity

O formato do pipeline

Três números descrevem o sistema inteiro. Compare com como uma implantação de Airflow está no seu repo hoje.

  1. CAMPOS · AGENDAMENTO CRON5

    minuto, hora, dia-do-mês, mês, dia-da-semana. Essa é a superfície de configuração inteira para quando uma execução dispara.

  2. URLS · ENTRY + EXEC2

    um POST pra registrar o agendamento, um GET que roda o script. Esse é o pipeline implantável inteiro.

  3. DAEMONS · SEM ORQUESTRADOR0

    sem processo de scheduler pra manter vivo, sem banco de metadata, sem pool de workers. O Hoody Kit guarda os agendamentos e roda o script.

Os números descrevem o modelo cron + exec no Hoody Kit. Seu pipeline existente provavelmente tem mais peças móveis; essa é a graça da comparação.

use-cases / daily-rollups-no-orchestrator / punchline

O orquestrador é uma entrada de cron apontando para uma URL.

ANTES · UMA STACK DE SCHEDULERDEPOIS · UMA LINHA DE CRON
ANTESairflow webserver + scheduler + worker + postgres + dags/rollup_daily.pyCINCO PROCESSOS, UM BANCO DE METADATA E UM REPO DE ARQUIVOS DE DAG
AGORA0 1 * * * curl -fsS https://exec.containers.hoody.com/scripts/rollup/runUMA LINHA. UMA URL. UM AGENDAMENTO.
Leia a documentação
use-cases / daily-rollups-no-orchestrator / replaces

O que isso substitui

A camada de orquestração colapsa em um cron de uma linha. O DAG vive no seu script.

  • Apache AirflowUm Postgres + Redis + scheduler + worker para uma query
  • PrefectConta na nuvem, instalação de agente, registro de flow
  • DagsterPythônico, mas ainda um serviço que você roda
  • LuigiUm motor de grafo pra agendar seu SQL noturno
  • Agendamentos do GitHub ActionsFixados na main, sem contexto por tenant
  • dbt CloudUm SaaS pra envolver uma CLI pra envolver um SELECT
  • Schedulers Python customizadosUm while-loop e um try/except, chamados de "robusto"
use-cases / daily-rollups-no-orchestrator / cta

Pare de rodar um orquestrador. Rode uma entrada de cron.

Leia a documentação
use-cases / daily-rollups-no-orchestrator / related

Leia os outros