EN
Copied
Concepts

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

La suite