# Utilisation

## Ingérer une nouvelle acquisition

1. Connecter le SSD GoPro à z620 (ou s’assurer que les MP4 sont dans `/mnt/portablessd`).

2. 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/

3. 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()
    "

4. 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

1. Générer le GLB via l’API :

    curl -X POST http://192.168.0.82:3849/jobs/ID/export_glb

2. Attendre la fin de la génération (peut prendre quelques minutes selon la taille du PLY).

3. 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 &"

4. Télécharger :

    wget http://192.168.0.84:8300/job_ID/reconstruction.glb

5. 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"