WF-B — Orchestrateur de transfert
WF-B est le cœur du système. Il tourne automatiquement toutes les 5 minutes et fait trois choses en parallèle :
- Section A — Surveille les transferts déjà lancés
- Section B — Consolide le rapport par drive
- Section C — Lance de nouveaux transferts
xlBpp5lN38ASrmq9 — Statut : Actif ✅
Schéma des nœuds
Section intitulée « Schéma des nœuds »[Trigger 5min] │ ├─── Section A (poll) │ A1: Lire Transfert_Detail (Sheets) │ A2: Extraire les jobs EN COURS │ A3: POST /status → rclone-agent │ A4: MAJ Sheets (statut final) │ ├─── Section B (rapport) │ B1: Lire Transfert_Detail (Sheets) │ B2: Consolider par drive │ B3: MAJ onglet Rapport (Sheets) │ └─── Section C (lancement) C1: Lire Transfert_Detail (Sheets) C2: Préparer lancement (filtre EN ATTENTE, max N simultanés) C3: POST /transfer → rclone-agent C4: MAJ Sheets (statut → EN COURS, job_id)Section A — Surveillance des jobs en cours
Section intitulée « Section A — Surveillance des jobs en cours »A1 lit toutes les lignes de Transfert_Detail.
A2 filtre uniquement celles avec statut = EN COURS.
A3 appelle GET /status/<job_id> sur rclone-agent pour chaque job. Retourne le statut actuel (RUNNING, SUCCESS, ERROR) et les dernières lignes du log.
A4 met à jour le Sheets :
SUCCESS→ statutDÉJÀ TRANSFÉRÉERROR→ statutERREURRUNNING→ statut resteEN COURS
Section B — Rapport
Section intitulée « Section B — Rapport »Agrège les résultats par drive (nom du drive source) et écrit dans l’onglet Rapport : nombre total de fichiers, nombre transférés, nombre en erreur, progression en %.
Section C — Lancement de nouveaux transferts
Section intitulée « Section C — Lancement de nouveaux transferts »C1 lit le Sheets.
C2 filtre les lignes EN ATTENTE et vérifie qu’on n’a pas déjà trop de jobs en cours simultanément (limite configurable).
C3 appelle POST /transfer sur rclone-agent avec :
{ "src_drive_id": "<ID drive source>", "dst_drive_id": "<ID drive destination>", "path": "<chemin relatif>", "type": "fichier | dossier"}JSON.stringify obligatoire
Le body est construit avec JSON.stringify({...}) dans l’expression n8n (pas une interpolation de chaîne). C’est essentiel pour les noms de fichiers contenant des backslashes ou caractères spéciaux.
C4 met à jour le Sheets : statut → EN COURS, job_id → <id retourné par rclone-agent>.
Dépannage
Section intitulée « Dépannage »Exécutions en erreur répétées
Section intitulée « Exécutions en erreur répétées »# Voir les 5 dernières exécutionsN8N_IP=$(docker inspect n8n-rkaf-n8n-1 --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}')curl -s "http://${N8N_IP}:5678/api/v1/executions?workflowId=<ID_WF_B>&limit=5" \ -H "X-N8N-API-KEY: <TOKEN>" | python3 -c "import sys,json; r=json.load(sys.stdin)for e in r['data']: print(e['id'], e['status'], e.get('startedAt','')[:19])"ECONNRESET sur rclone-agent
Section intitulée « ECONNRESET sur rclone-agent »Si le nœud C3 retourne “connection closed unexpectedly” :
- Vérifier que rclone-agent tourne :
systemctl status rclone-agent - Vérifier les logs :
journalctl -u rclone-agent --since 30m --no-pager - Redémarrer si nécessaire :
sudo systemctl restart rclone-agent
Jobs bloqués en EN COURS
Section intitulée « Jobs bloqués en EN COURS »Si des jobs restent EN COURS indéfiniment alors que rclone-agent a été redémarré :
# Le statut des jobs persist sur disquels /home/sidy/scripts/logs/job_*.status | tail -5cat /home/sidy/scripts/logs/job_<id>.status