Externalisation des encodages et transcriptions via Esup-Runner

💡 Cette documentation ne concerne que les versions de ESUP-Pod 4.2.0 et suivantes.

Objectif

Quand USE_RUNNER_MANAGER = True, Esup-Pod délègue les traitements d’encodage et de transcription à un ou plusieurs services Esup-Runner, nommés Runner Manager.

Prérequis

Ce document explique:

Vue d’ensemble du flux

  1. Un utilisateur (ou un traitement interne) déclenche un encodage, une transcription ou un encodage studio.
  2. Pod crée/positionne une tâche locale Task en pending.
  3. Pod tente d’envoyer la tâche à un Runner Manager (/task/execute) avec authentification Bearer.
  4. Si aucun runner n’est joignable, la tâche reste pending (elle sera reprise par process_tasks).
  5. Le runner exécute la tâche, puis appelle le webhook Pod POST /runner/notify_task_end/.
  6. Pod met à jour le statut de la tâche, puis, si completed, télécharge les résultats (/task/result/<task_id>) et importe les artefacts.
  7. Pod finalise la tâche en completed et met à jour les objets métiers (fichiers encodés, sous-titres, vidéo studio, etc.).

Paramétrage settings_local.py

Configuration minimale recommandée, en production:

USE_RUNNER_MANAGER = True
RM_TASKS_DELETED_AFTER_DAYS = 60
SECURE_SSL_REDIRECT = True

USE_RUNNER_MANAGER = True

RM_TASKS_DELETED_AFTER_DAYS = 60

SECURE_SSL_REDIRECT = True

Configuration via l’administration

1. Administration des Runner Managers

Dans l’admin Django, créez au moins un Runner Manager:

Bonnes pratiques:

2. Tester la connectivité

Sur la fiche d’un Runner Manager, après avoir réalisé la saisie et sauvegarder, utilisez le bouton Test connection:

Exploitation via l’administration des tâches

L’admin Task permet de piloter la file:

Action utile:

En parallèle, l’interface vidéo affiche aussi le rang en file d’attente (rank) et le total des tâches pending.

Rôle de process_tasks en exploitation

La commande:

python manage.py process_tasks

est le moteur opérationnel à exécuter périodiquement. Elle:

  1. contrôle les tâches running bloquées depuis plus de 2h et tente une réconciliation avec le runner;
  2. soumet les tâches pending (encodage, transcription, studio) aux runners disponibles;
  3. applique l’ordonnancement des priorités (notamment non-étudiants avant étudiants);
  4. met à jour les rangs de file;
  5. purge les tâches terminées selon RM_TASKS_DELETED_AFTER_DAYS.

Sans cette commande en récurrence:

Planification CRON recommandée

Exemple toutes les 3 minutes:

# Job pour les tâches Esup-Runner
*/3 * * * * /usr/bin/bash -c 'export WORKON_HOME=/home/pod/.virtualenvs; export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3; cd /usr/local/django_projects/podv4; source /usr/local/bin/virtualenvwrapper.sh; workon django_pod4; python manage.py process_tasks >> /usr/local/django_projects/podv4/pod/log/process_tasks.log 2>&1'

Conseils:

Checklist de mise en service

  1. Activer USE_RUNNER_MANAGER = True.
  2. Régler RM_TASKS_DELETED_AFTER_DAYS (ex: 60).
  3. Créer les Runner Managers dans l’administration (URL/token/priorité/site).
  4. Valider chaque manager via Test connection.
  5. Déployer le CRON process_tasks.
  6. Vérifier dans l’admin Task la transition des statuts pending -> running -> completed.