Aller au contenu
TYPEStandard
ÉTAPEProduction
DIFFICULTÉSimple
MÉTIERAutomatiser une tâche
POURDevs backend
POURData & analytics
SERVICESCron
SERVICESSQLite
SERVICESExec
POURQUOI HOODYHTTP-natif
TYPEStandard
ÉTAPEProduction
DIFFICULTÉSimple
MÉTIERAutomatiser une tâche
POURDevs backend
POURData & analytics
SERVICESCron
SERVICESSQLite
SERVICESExec
POURQUOI HOODYHTTP-natif
TYPEStandard
ÉTAPEProduction
DIFFICULTÉSimple
MÉTIERAutomatiser une tâche
POURDevs backend
POURData & analytics
SERVICESCron
SERVICESSQLite
SERVICESExec
POURQUOI HOODYHTTP-natif
TYPEStandard
ÉTAPEProduction
DIFFICULTÉSimple
MÉTIERAutomatiser une tâche
POURDevs backend
POURData & analytics
SERVICESCron
SERVICESSQLite
SERVICESExec
POURQUOI HOODYHTTP-natif
ROLLUPS QUOTIDIENS · SANS ORCHESTRATEUR

Des rollups quotidiens sans orchestrateur

Chaque nuit à 1h, une entrée cron curl une URL exec. Le script exécute votre SQL de rollup sur l'URL sqlite et réécrit la table quotidienne. Pas de Postgres Airflow, pas de fichier DAG, pas de dashboard scheduler à 14 widgets, pas d'astreinte pour l'orchestrateur lui-même.

Lire la doc

Deux URL et une planification à cinq champs

Tout le pipeline est une entrée cron pointant sur une URL exec. L'entrée cron est un POST sur /users/root/entries. L'URL exec est un petit script qui ouvre l'URL sqlite, exécute le SQL de rollup, et renvoie les nouvelles lignes. C'est tout le DAG.

POST /users/root/entries
LA PLANIFICATION
// chaque nuit à 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
LE PIPELINE
// tout le corps du pipeline
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() };

Si le rollup échoue, les logs cron le disent. Si vous devez rejouer hier, vous curl l'URL exec à la main avec un paramètre date. Pas de second système à apprendre, pas de base scheduler à maintenir vivante, pas de fichier DAG à committer. L'orchestrateur est une entrée cron pointant sur une URL.

Ce que vous n'avez pas eu à coder

Le Hoody Kit livre le scheduler, le runtime et le stockage en services HTTP simples. Le pipeline est l'appel curl entre eux — rien d'autre.

PAS DE DAEMON ORCHESTRATEUR

Le scheduler est une entrée HTTP

hoody-cron stocke les planifications comme des ressources sur /users/root/entries. Pas de DB de métadonnées Postgres à sauvegarder, pas de conteneur scheduler à maintenir en santé, pas de repo de DAG à déployer. POST une ligne, et le run se déclenche.

PAS DE CÂBLAGE RUNTIME

Le script est une URL

hoody-exec exécute le script de rollup à la demande sur exec.containers.hoody.com/scripts/rollup/run. cron le curl, reçoit un 200, log la réponse. Pas de queue worker, pas de broker, pas de graphe de tâches sérialisé.

PAS DE PIPELINE DE LOGS

L'historique des runs est le corps de la réponse

Chaque appel exec retourne les nouvelles lignes en JSON et est loggé par cron avec statut, timestamp et stdout. Backfills, échecs et reruns vivent tous dans les deux mêmes URL — rien à expédier vers un agrégateur de logs.

Si un run échoue — ou s'il faut rejouer

Le pipeline c'est deux URL et un paramètre date. Rejouer hier a la même forme que le run nocturne, juste avec ?date=2026-04-30 sur l'URL exec. Pas d'UI de replay, pas de quirks de scheduler.

  1. 01 · DÉTECTER

    les logs cron disent que ça a planté

    Si le run de 1h a renvoyé un non-2xx, l'enregistrement last-run de l'entrée sur hoody-cron montre le code de sortie et le corps de réponse capturé. Pas de service d'alerting séparé à câbler — GET l'entrée et lis-la.

  2. 02 · BACKFILL

    curl l'URL exec avec ?date=

    Le script accepte un paramètre date. Passez la date d'hier et il recalcule la ligne de rollup de ce jour-là, remplaçant la cassée par un INSERT OR REPLACE. Une commande, pas d'UI de re-trigger DAG.

  3. 03 · VÉRIFIER

    la réponse est la nouvelle ligne

    exec retourne la ligne de rollup fraîchement écrite en JSON. Comparez avec ce que vous attendiez, puis passez à autre chose. Rien d'autre à vérifier — l'URL du dashboard sert la même table que celle que vous venez d'écrire.

// rejouer le rollup d'hier à la maincurl -fsS https://exec.containers.hoody.com/scripts/rollup/run?date=2026-04-30

La forme du pipeline

Trois nombres décrivent tout le système. Compare-les avec ce à quoi ressemble un déploiement Airflow dans votre repo aujourd'hui.

  1. CHAMPS · PLANIFICATION CRON5

    minute, heure, jour-du-mois, mois, jour-de-la-semaine. C'est toute la surface de configuration pour le moment où un run se déclenche.

  2. URL · ENTRY + EXEC2

    un POST pour enregistrer la planification, un GET qui exécute le script. C'est tout le pipeline déployable.

  3. DAEMONS · PAS D'ORCHESTRATEUR0

    pas de processus scheduler à garder vivant, pas de base de métadonnées, pas de pool de workers. Le Hoody Kit retient les planifications et exécute le script.

Les chiffres décrivent le modèle cron + exec sur Hoody Kit. votre pipeline existant a sans doute plus de pièces mobiles ; c'est tout l'intérêt de la comparaison.

L'orchestrateur est une entrée cron pointant sur une URL.

AVANT · UNE STACK SCHEDULERAPRÈS · UNE LIGNE DE CRON
AVANTairflow webserver + scheduler + worker + postgres + dags/rollup_daily.pyCINQ PROCESSUS, UNE DB DE MÉTADONNÉES ET UN REPO DE FICHIERS DAG
MAINTENANT0 1 * * * curl -fsS https://exec.containers.hoody.com/scripts/rollup/runUNE LIGNE. UNE URL. UNE PLANIFICATION.
Lire la doc

Ce que ça remplace

La couche d'orchestration s'effondre en une ligne de cron. Le DAG vit dans votre script.

  • Apache AirflowUn Postgres + Redis + scheduler + worker pour une seule requête
  • PrefectCompte cloud, install d'agent, enregistrement de flow
  • DagsterPythonique, mais toujours un service que vous faites tourner
  • LuigiUn moteur de graphe pour planifier votre SQL nocturne
  • planifications GitHub ActionsÉpinglées sur main, pas de contexte par tenant
  • dbt CloudUn SaaS qui emballe une CLI qui emballe un SELECT
  • schedulers Python maisonUne boucle while et un try/except, qualifiés de « robustes »

Arrêtez de faire tourner un orchestrateur. Faites tourner une entrée cron.

Lire la doc

Lis les autres