3.8 KiB
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 (00h–23h) 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 endaily_multiau boot via la migration desrc/db.py. Les anciens jobs en formatinterval(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 absencessync_bn: récupère les BN + Matusync_notes: récupère les notes d'examensync_fiches: récupère les données apprentis (avec représentant légal + compensation)sync_notices: récupère les notices Escadaforce_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.