eptm_dashboard/docs/05-cron.md

3.8 KiB
Raw Permalink Blame History

Tâches planifiées (cron)

Page : /cron (admin uniquement)

Permet de créer des tâches automatiques de synchronisation et/ou de push, avec notifications Telegram.

Architecture

OS cron (toutes les minutes)
  ↓
docker exec eptm-dashboard-app-1 python scripts/cron_tick.py
  ↓
Lit la table CronJob → identifie les tâches à exécuter maintenant
  ↓
Pour chaque tâche due :
  - Lance push_to_escada.py, push_notices.py, sync_esacada.py + run_imports.py
  - Met à jour last_run_at, last_status, last_message
  - Envoie une notification Telegram (selon notify_on)

Le tick s'exécute toutes les minutes via la crontab du host. Le timezone du conteneur est aligné sur Europe/Zurich pour correspondre aux horaires saisis dans l'UI.

Types de tâches

Type Action
push Pousse les pendings d'absences et/ou notices vers Escada
sync Récupère depuis Escada (selon options abs/BN/notes/fiches/notices)
push_then_sync Pousse puis récupère

Planifications

Deux types de planning seulement (les anciens interval et daily ont été remplacés par daily_multi qui couvre les deux cas) :

  • Hebdo (weekly) : à une heure fixe certains jours.
    • schedule_value = "MON,WED,FRI:08:30"
    • Sélection des jours en UI : pastilles rouges Lun..Dim.
  • Plusieurs heures par jour (daily_multi) : à un ensemble d'heures pleines, tous les jours.
    • schedule_value = "00:00,06:00,12:00,18:00"
    • Sélection en UI : grille 24 cases (00h23h) cliquables.
    • Remplace l'ancien mode interval : pour reproduire « toutes les 6 h » on coche 4 cases (00, 06, 12, 18).

Les anciens jobs en format daily (HH:MM) sont automatiquement convertis en daily_multi au boot via la migration de src/db.py. Les anciens jobs en format interval (N minutes) sont également migrés en déroulant l'intervalle sur 24 h depuis minuit.

Options de sync (pour task_kind=sync ou push_then_sync)

  • sync_abs : récupère les absences
  • sync_bn : récupère les BN + Matu
  • sync_notes : récupère les notes d'examen
  • sync_fiches : récupère les données apprentis (avec représentant légal + compensation)
  • sync_notices : récupère les notices Escada
  • force_abs : forçage (cf. doc Sync Escada)
  • classes_json : "ALL" ou liste de classes spécifiques

Notifications Telegram

Pour chaque tâche, on configure :

  • notify_on ∈ {"never", "always", "success", "failure"}
  • notify_level ∈ {"normal", "detailed"}
  • notify_chat_id : pour cibler un chat différent du chat global (vide = utiliser le défaut)

Voir la section Notifications Telegram pour les détails.

Activation / désactivation

Le toggle dans la liste des tâches active ou désactive sans supprimer. Quand on réactive une tâche, son last_run_at est remis à None pour qu'elle se déclenche au prochain créneau.

Ouverture rapide : cliquer n'importe où sur la ligne d'une tâche ouvre directement le panneau d'édition.

Logs persistants

Chaque exécution écrit son log détaillé dans /logs/cron/cron-{job_id}-{timestamp}.log. Ce dossier est en bind mount Docker → les logs survivent à la recréation du conteneur.

Audit

Toute modification (création/édition/activation/suppression) est tracée :

[09:14:22] [cron] prof.demo : création tâche 'Sync nocturne' (id=4) — push_then_sync / 00:00,06:00,12:00,18:00 / activée
[09:30:05] [cron] prof.demo : désactivation tâche 'Push horaire' (id=2)

Bouton « Tester Telegram »

Bas de page : envoie un message de test au chat_id global pour vérifier la config bot.