Jobs & cycle de vie
Un job est une unité de travail. Cette page décrit ses états, transitions, événements et la sémantique de reprise.
Un job est une unité de travail. Chaque module s'exécute sous forme de job. Les jobs sont isolés, observables, reprenables.
Machine à états
┌─────────┐ pris par file ┌─────────┐ succès ┌──────┐
│ pending │ ────────────────► │ running │ ────────────► │ done │
└─────────┘ └─────────┘ └──────┘
│ │
│ annulation │ erreur fatale
▼ ▼
┌───────────┐ ┌────────┐
│ cancelled │ │ failed │
└───────────┘ └────────┘
done / failed / cancelled ──── (après 7 jours) ────► expired
| État | Signification |
|---|---|
pending |
Créé, en attente dans la file FIFO |
running |
Pris par un worker, en cours d'exécution |
done |
Terminé avec succès, résultats téléchargeables |
failed |
Échec (voir error_message) |
cancelled |
Annulé via l'UI ou l'API |
expired |
Plus de 7 jours depuis l'état terminal — fichiers de résultats purgés |
Transitions et assignation à la file sont atomiques ; un job n'est jamais pris deux fois.
Création
POST /api/jobs { "queries": [...], "zones": [...] } # crée un job scrap
POST /api/jobs/{type} { ...paramètres module } # raccourci typé
Voir API Jobs.
Observabilité
GET /api/jobs/{id} # statut, compteurs, métadonnées
GET /api/jobs/{id}/stream # SSE : status / log / done
Le flux se ferme à la fin du job. Timeout de sécurité : 6 heures. Payloads des événements : voir États & événements SSE.
Résultats
GET /api/jobs/{id}/download?format=csv|json|xlsx
GET /api/jobs/{id}/items?offset=0&limit=200
Les résultats restent 7 jours après l'état terminal, puis sont purgés. L'enregistrement du job demeure.
Erreurs & reprises
Un job failed expose error_message et error_count (items en erreur dans le job — un job peut être done avec error_count > 0).
POST /api/jobs/{id}/resume
Crée une nouvelle tentative qui repart du dernier item réussi.
Annulation
POST /api/jobs/{id}/cancel # conserve les résultats partiels
DELETE /api/jobs/{id} # annule et supprime l'enregistrement
Concurrence
- Jusqu'à 5 jobs simultanés par utilisateur (au-delà : file d'attente)
- Deux voies : série (extraction) et parallèle (6 slots : vérification, utilitaires pipeline,
delivery_check) - Les jobs sont indépendants — les ré-exécutions n'attendent pas l'original