Utilisation
Ingérer une nouvelle acquisition
Connecter le SSD GoPro à z620 (ou s’assurer que les MP4 sont dans
/mnt/portablessd).Lancer l’ingest depuis core :
ssh floppyrj45@192.168.0.82
cd /home/floppyrj45/docker/cosma-qc
python3 scripts/ingest.py --path /mnt/portablessd/AUV009/
Vérifier les jobs créés :
python3 -c "
import sqlite3
conn = sqlite3.connect('cosma-qc.db')
for row in conn.execute('SELECT id, auv, gopro, segment, status FROM jobs ORDER BY id'):
print(row)
conn.close()
"
Le dispatcher prend automatiquement en charge les jobs en statut
pending.
Surveiller les jobs
Dashboard web
Accéder au dashboard : http://192.168.0.82:3849
Il affiche en temps réel :
Statut de chaque job (pending / running / done / failed)
Worker assigné
Progression des frames
Liens vers les PLY et GLB
Logs dispatcher
# Logs temps réel
sudo journalctl -u cosma-qc-dispatcher -f
# Logs des 100 dernières lignes
sudo journalctl -u cosma-qc-dispatcher -n 100
# Filtrer erreurs
sudo journalctl -u cosma-qc-dispatcher | grep -i error
Base de données
# État global des jobs
sqlite3 /home/floppyrj45/docker/cosma-qc/cosma-qc.db \
"SELECT id, auv, status, worker, updated_at FROM jobs ORDER BY id;"
# Jobs en cours
sqlite3 cosma-qc.db \
"SELECT id, auv, worker FROM jobs WHERE status='running';"
# Jobs échoués
sqlite3 cosma-qc.db \
"SELECT id, auv, status FROM jobs WHERE status='failed';"
Visualiser un nuage de points PLY
Sur le worker avec viewer Viser (lancé automatiquement pendant reconstruction) :
# Naviguer vers (remplacer ID par le numéro de job)
http://192.168.0.84:8100 # pour job 0
http://192.168.0.84:8101 # pour job 1
# etc.
Avec CloudCompare depuis un PC (si PLY téléchargé) :
# Copier le PLY vers PC
scp floppyrj45@192.168.0.84:/cosma-qc-frames/job_ID/reconstruction.ply ./
# Ouvrir dans CloudCompare
Télécharger un GLB
Générer le GLB via l’API :
curl -X POST http://192.168.0.82:3849/jobs/ID/export_glb
Attendre la fin de la génération (peut prendre quelques minutes selon la taille du PLY).
Lancer le serveur HTTP sur le worker concerné :
ssh floppyrj45@192.168.0.84 \
"nohup python3 -m http.server 8300 --directory /cosma-qc-frames > /tmp/http8300.log 2>&1 &"
Télécharger :
wget http://192.168.0.84:8300/job_ID/reconstruction.glb
Arrêter le serveur HTTP après téléchargement :
ssh floppyrj45@192.168.0.84 "pkill -f 'http.server 8300'"
Relancer un job échoué
# Remettre un job en pending
sqlite3 /home/floppyrj45/docker/cosma-qc/cosma-qc.db \
"UPDATE jobs SET status='pending', worker=NULL WHERE id=ID;"
# Supprimer les marqueurs .done pour forcer ré-extraction complète
ssh floppyrj45@192.168.0.84 \
"rm -f /cosma-qc-frames/job_ID/.video_*.done"
# Redémarrer le dispatcher si nécessaire
sudo systemctl restart cosma-qc-dispatcher
Le dispatcher reprend le job au prochain cycle.
Redémarrer le pipeline complet
# Arrêter
sudo systemctl stop cosma-qc-dispatcher
docker compose -f /home/floppyrj45/docker/cosma-qc/docker-compose.yml down
# Démarrer
docker compose -f /home/floppyrj45/docker/cosma-qc/docker-compose.yml up -d
sudo systemctl start cosma-qc-dispatcher
Vérifications rapides post-mission
# 1. Tous les jobs done ?
sqlite3 cosma-qc.db "SELECT COUNT(*) FROM jobs WHERE status != 'done';"
# Doit retourner 0
# 2. Tous les PLY présents ?
for id in $(sqlite3 cosma-qc.db "SELECT id FROM jobs WHERE status='done'"); do
worker=$(sqlite3 cosma-qc.db "SELECT worker FROM jobs WHERE id=$id")
ssh floppyrj45@$worker "ls -lh /cosma-qc-frames/job_${id}/reconstruction.ply"
done
# 3. Espace disque OK ?
ssh floppyrj45@192.168.0.84 "df -h /cosma-qc-frames"
ssh floppyrj45@192.168.0.87 "df -h /cosma-qc-frames"