eptm_dashboard/data/docs/05-cron.md

3 KiB

Tâches planifiées (cron)

Page : /cron (admin uniquement)

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

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 et/ou 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 vers Escada uniquement
sync Récupère depuis Escada uniquement (selon options abs/BN/notes/fiches)
push_then_sync Pousse les pendings, puis récupère

Schedules

Trois types de planning sont disponibles :

  • Quotidien (daily) : à une heure fixe chaque jour. Ex : 03:00.
  • Hebdo (weekly) : à une heure fixe certains jours. Ex : MON,WED,FRI:08:30.
  • Intervalle (interval) : toutes les N minutes. Ex : 30 = toutes les 30 minutes.

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
  • sync_notes : récupère les notes
  • sync_fiches : récupère les données apprentis
  • 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 tick (sinon elle attendrait la fin de l'intervalle complet).

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 / 03:00 / activée
[09:30:05] [cron] prof.demo : désactivation tâche 'Push 30min' (id=2)

Bouton "Tester Telegram"

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