78 lines
3 KiB
Markdown
78 lines
3 KiB
Markdown
# 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.
|