# Guide de Déploiement - Linux BenchTools ## Modifications Apportées ### 1. Backend API - ✅ **Schémas Pydantic mis à jour** ([backend/app/schemas/hardware.py](backend/app/schemas/hardware.py)) - `RAMInfo` : Ajout de `used_mb`, `free_mb`, `shared_mb` - `StorageDevice` : `capacity_gb` changé de `int` à `float` - ✅ **API endpoint mis à jour** ([backend/app/api/benchmark.py](backend/app/api/benchmark.py)) - Sauvegarde des nouveaux champs RAM - ✅ **Modèles de base de données** ([backend/app/models/](backend/app/models/)) - `HardwareSnapshot` : Nouveaux champs RAM - `DiskSMART` : Nouveau modèle pour données SMART (créé mais pas encore utilisé) ### 2. Docker - ✅ **Service iperf3 ajouté** ([docker-compose.yml](docker-compose.yml)) - Port 5201 TCP/UDP exposé ### 3. Script Client - ✅ **Script bench.sh complètement réécrit** ([scripts/bench.sh](scripts/bench.sh)) - Génère le payload JSON directement - Collecte toutes les données hardware - Exécute les benchmarks - Envoie au serveur API ## Déploiement ### Étape 1: Arrêter les Services ```bash cd /home/gilles/Documents/vscode/serv_benchmark docker-compose down ``` ### Étape 2: Appliquer les Migrations Base de Données Si la base de données existe déjà, appliquez les scripts dans l'ordre : ```bash cd backend python3 apply_migration.py python3 apply_migration_002.py python3 apply_migration_003.py python3 apply_migration_004.py python3 apply_migration_005.py ``` **OU** si vous préférez partir de zéro (⚠️ PERTE DE DONNÉES) : ```bash rm -f backend/data/data.db ``` ### Étape 3: Démarrer les Services ```bash docker-compose up -d ``` Vérifier les logs : ```bash docker-compose logs -f backend docker-compose logs iperf3 ``` ### Étape 4: Tester le Serveur iperf3 Depuis un client : ```bash iperf3 -c 10.0.0.50 -p 5201 ``` Vous devriez voir le test de bande passante s'exécuter. ### Étape 5: Exécuter le Script Bench Depuis un client Linux : ```bash # Option 1: Télécharger et exécuter curl -sSL https://gitea.maison43.duckdns.org/gilles/serv_benchmark/raw/branch/main/scripts/bench.sh | sudo bash # Option 2: Exécuter localement cd /chemin/vers/serv_benchmark sudo bash scripts/bench.sh ``` **Note** : Le script `bench.sh` a les paramètres serveur codés en dur : - `SERVER_URL="10.0.0.50:8007"` - `API_TOKEN="29855796dacf5cfe75ff9b02d6adf3dd0f9c52db5b53e7abfb4c0df7ece1be0a"` - `IPERF_SERVER="10.0.0.50"` Pour les modifier, éditez le fichier ou passez-les en variables d'environnement. ## Vérification ### 1. Vérifier la Base de Données ```bash sqlite3 backend/data/data.db # Lister les tables .tables # Vérifier les colonnes de hardware_snapshots PRAGMA table_info(hardware_snapshots); # Voir les derniers benchmarks SELECT id, device_id, global_score, run_at FROM benchmarks ORDER BY run_at DESC LIMIT 5; # Voir les données RAM détaillées SELECT d.hostname, h.ram_total_mb, h.ram_used_mb, h.ram_free_mb, h.ram_shared_mb FROM hardware_snapshots h JOIN devices d ON h.device_id = d.id ORDER BY h.captured_at DESC LIMIT 5; ``` ### 2. Vérifier l'API ```bash # Tester l'endpoint curl http://10.0.0.50:8007/docs # Voir les devices curl http://10.0.0.50:8007/api/devices ``` ### 3. Consulter le Frontend Ouvrir dans un navigateur : ``` http://10.0.0.50:8087 ``` ## Troubleshooting ### Erreur: HTTP 422 "Input should be a valid integer" **Solution** : Cette erreur a été corrigée en changeant `capacity_gb` de `int` à `float` dans le schéma. Si vous rencontrez encore cette erreur : 1. Vérifiez que le backend a bien été redémarré après les modifications 2. Vérifiez les logs : `docker-compose logs backend` ### Port 5201 déjà utilisé ```bash # Trouver le processus sudo lsof -i :5201 # Arrêter le service Docker iperf3 docker-compose stop iperf3 ``` ### Script bench.sh ne trouve pas les dépendances ```bash # Installer manuellement sudo apt-get update sudo apt-get install -y curl jq sysbench fio iperf3 dmidecode smartmontools ethtool ``` ### Base de données verrouillée (SQLite locked) ```bash # Arrêter tous les services docker-compose down # Supprimer les locks rm -f backend/data/data.db-shm backend/data/data.db-wal # Redémarrer docker-compose up -d ``` ## Structure des Données Envoyées Le script `bench.sh` envoie un payload JSON avec cette structure : ```json { "device_identifier": "hostname", "bench_script_version": "1.1.0", "hardware": { "cpu": { "vendor": "GenuineIntel", "model": "Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz", "cores": 4, "threads": 4, ... }, "ram": { "total_mb": 7771, "used_mb": 6123, // NOUVEAU "free_mb": 923, // NOUVEAU "shared_mb": 760, // NOUVEAU "slots_total": 4, "slots_used": 4, "ecc": false, "layout": [...] }, "storage": { "devices": [ { "name": "/dev/sda", "type": "SSD", "capacity_gb": 447.1, // FLOAT maintenant ... } ], "partitions": [] }, "network": { "interfaces": [...] }, "motherboard": {...}, "os": {...} }, "results": { "cpu": { "events_per_sec": 1206.65, "duration_s": 10.0, "score": 12.06 }, "memory": {...}, "disk": {...}, "network": {...}, "gpu": null, "global_score": 10.85 } } ``` ## Prochaines Étapes ### À Implémenter 1. **Données SMART des disques** - Le modèle `DiskSMART` existe mais n'est pas encore utilisé - Modifier `bench.sh` pour collecter les données SMART - Adapter l'API pour sauvegarder dans `disk_smart_data` 2. **Wake-on-LAN** - Ajouter le champ dans le schéma `NetworkInterface` - Collecter dans `bench.sh` - Afficher dans le frontend 3. **Frontend** - Afficher les nouvelles données RAM - Graphiques d'utilisation - Dashboard SMART pour la santé des disques 4. **Amélioration du script bench.sh** - Supporter les arguments en ligne de commande - Mode verbose/debug - Retry automatique en cas d'échec ## Logs Utiles ### Backend ```bash docker-compose logs -f backend ``` ### iperf3 ```bash docker-compose logs -f iperf3 ``` ### Tous les services ```bash docker-compose logs -f ``` ## Performance Le script `bench.sh` prend environ **3-5 minutes** pour : - Collecter toutes les données hardware (30s) - Benchmark CPU (10s) - Benchmark RAM (10s) - Benchmark Disk (2-3 minutes avec fio) - Benchmark Network (optionnel, 20s) ## Sécurité ⚠️ **Le token API est codé en dur dans le script** : ```bash API_TOKEN="29855796dacf5cfe75ff9b02d6adf3dd0f9c52db5b53e7abfb4c0df7ece1be0a" ``` **Recommandations** : - Changer ce token en production - Utiliser des variables d'environnement - Limiter l'accès au serveur API par IP - Utiliser HTTPS en production ## Support Pour toute question ou problème : 1. Consulter les logs Docker 2. Vérifier le fichier [IMPLEMENTATION_STATUS.md](IMPLEMENTATION_STATUS.md) 3. Tester manuellement avec `curl` : ```bash # Test manuel de l'API curl -X POST http://10.0.0.50:8007/api/benchmark \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d @result.json ```