Aller au contenu principal

Système de tâches

OpenVLE exécute les opérations gourmandes en ressources et chronophages de manière asynchrone en arrière-plan. Le système de tâches repose sur Redis Queue (RQ) et se compose de conteneurs Worker pour l'exécution des tâches et d'un Scheduler pour les tâches périodiques.

Architecture

Backend/Scheduler → Redis Queue → Worker → Exécution
  1. Enqueue — Le backend ou le scheduler place une tâche dans une queue Redis nommée.
  2. Dequeue — Le worker responsable récupère la prochaine tâche de sa queue.
  3. Exécution — Le worker exécute la tâche (par ex. cloner une VM, envoyer un e-mail).
  4. Résultat — Le résultat est enregistré dans la base de données sous forme de Task/SubTask et affiché à l'utilisateur.

Queues

Le système utilise plusieurs queues nommées, chacune dédiée à un domaine de tâches spécifique :

La variable d'environnement WORKER_MAX_RETRY (par défaut : 5) contrôle le nombre maximal de tentatives pour la plupart des queues. Certaines queues utilisent une valeur fixe.

QueueObjectifMax. RetriesIntervalles de retry
pve_vm_cloneClonage et suppression de VMsWORKER_MAX_RETRY10s, 30s, 60s
pve_vm_actionsActions VM (démarrage, arrêt, reset, migration)WORKER_MAX_RETRY5s, 10s, 15s
pve_periodicPolling Proxmox (synchronisation info nœuds)3 (fixe)5s, 10s, 15s
mailsEnvoi d'e-mailsWORKER_MAX_RETRY30s, 60s, 120s
guacamoleGestion des connexions GuacamoleWORKER_MAX_RETRY10s, 30s, 60s
moodleGestion des cours et utilisateurs MoodleWORKER_MAX_RETRY10s, 30s, 60s
core_periodicCycle de vie des événements, nettoyage des e-mails3 (fixe)5s, 10s, 15s

Worker

En production, trois types de workers fonctionnent comme des conteneurs Docker séparés. Chaque type écoute des queues spécifiques :

Type de workerSERVICE_ROLEQueuesRéplicas
Workerworkercore_periodic, guacamole, mails, moodle, pve_vm_actions4
Worker VM-Cloneworker-vm-clonepve_vm_clone1
Worker Periodicworker-periodicpve_periodic1

La répartition sur plusieurs types de workers garantit que les opérations de clonage de VMs de longue durée ne bloquent pas le traitement des autres tâches.

Développement local

Dans l'environnement de développement local, toutes les queues peuvent être traitées par un seul worker (SERVICE_ROLE=worker-all).

Types de tâches

TâcheQueueDéclencheurDescription
Cloner une VMpve_vm_cloneUtilisateur/SchedulerCrée une nouvelle VM à partir d'un modèle de VM sur Proxmox
Démarrer/arrêter/réinitialiser une VMpve_vm_actionsUtilisateurDémarre, arrête ou réinitialise une VM sur Proxmox
Supprimer une VMpve_vm_cloneUtilisateur/SchedulerSupprime une VM de Proxmox et nettoie la base de données
Migrer une VMpve_vm_actionsUtilisateurDéplace une VM vers un autre nœud Proxmox
Envoyer un e-mailmailsSystèmeEnvoie des notifications via SMTP
Provisionner GuacamoleguacamoleSystèmeCrée des utilisateurs, connexions et profils de partage Guacamole
Nettoyer GuacamoleguacamoleSystèmeSupprime les connexions et profils de partage
Déployer un cours MoodlemoodleSystèmeDuplique le cours modèle Moodle pour un événement
Inscrire des utilisateurs MoodlemoodleSystèmeCrée des utilisateurs dans Moodle et les inscrit aux cours
Déployer un événementcore_periodicSchedulerCrée toutes les VMs et connexions pour un événement
Archiver un événementcore_periodicSchedulerSupprime toutes les VMs et nettoie les connexions après la fin de l'événement

Dépendances entre jobs

Les jobs peuvent avoir des dépendances avec d'autres jobs (depends_on). Cela permet de former des chaînes d'exécution, par exemple :

Supprimer la connexion Guacamole → Arrêter la VM → Supprimer la VM

Le job suivant n'est démarré que lorsque le précédent s'est terminé avec succès.

Gestion des erreurs

Les jobs échoués sont automatiquement relancés. Le nombre maximal de tentatives et les intervalles de retry sont configurés par queue (voir Queues). Après épuisement de toutes les tentatives, le job est marqué comme définitivement échoué.

Certaines erreurs sont reconnues comme permanentes et ne sont pas relancées (par ex. code d'erreur SMTP 550 pour une adresse de destinataire invalide).

Logs

Les jobs en erreur et leurs messages d'erreur sont visibles dans les logs des workers, par ex. docker logs openvle-worker-vm-clone. Vous trouverez plus d'informations sur la journalisation sous Logs.

Suivi des tâches

Chaque opération asynchrone est suivie dans la base de données via deux modèles :

  • Task — Représente une opération logique (par ex. « Cloner une VM »)
  • SubTask — Tentatives d'exécution individuelles d'une tâche avec statut (processing, success, error), message d'erreur et numéro de tentative

La progression est affichée dans l'interface utilisateur.

Scheduler

Le scheduler fonctionne comme un conteneur séparé (SERVICE_ROLE=scheduler) et utilise rq cron avec des expressions Cron pour mettre en file d'attente des tâches périodiques dans la queue Redis. Les workers les exécutent ensuite.

Tâches périodiques

TâcheQueuePlanificationDescription
Info nœuds Proxmoxpve_periodicToutes les WORKER_PVE_PERIODIC_INTERVAL secondes (par défaut : 60s)Synchronise le statut des VMs/modèles et les informations des nœuds depuis le cluster Proxmox
Cycle de vie des événementscore_periodicQuotidiennement à 01:00 UTCVérifie si des événements doivent être démarrés ou archivés, envoie des notifications préalables
Nettoyage des e-mailscore_periodicQuotidiennement à 02:00 UTCSupprime les e-mails envoyés datant de plus de MAIL_MAX_AGE_WEEKS (par défaut : 4 semaines)
Temps de préparation

Le temps de préparation pour les déploiements et archivages automatiques est contrôlé via EVENTS_START_PREP_TIME_DAYS et EVENTS_END_PREP_TIME_DAYS (par défaut : 7 jours chacun). Voir Référence de configuration — Événements.

Interaction des composants

ComposantRôleConnexions
BackendCrée des tâches sur demande de l'utilisateur→ Redis (Enqueue)
SchedulerCrée des tâches périodiques selon la planification→ Redis (Enqueue)
RedisSystème de queuesReçoit et conserve les jobs dans des queues nommées
Worker (4x)Traite les tâches générales→ Redis, → MariaDB, → Proxmox, → Guacamole, → Moodle, → SMTP
Worker VM-CloneTraite les opérations de clonage/suppression de VMs→ Redis, → MariaDB, → Proxmox
Worker PeriodicTraite le polling Proxmox→ Redis, → MariaDB, → MongoDB, → Proxmox

Informations complémentaires