# Correctifs RĂ©seau et SMART - 2025-12-14 ## 🎯 Modifications AppliquĂ©es ### 1. Test RĂ©seau Bidirectionnel (--bidir) **ProblĂšme** : Le script effectuait 2 tests sĂ©parĂ©s (upload puis download), ce qui prenait 20 secondes et donnait parfois des rĂ©sultats incohĂ©rents (upload=0). **Solution** : Utiliser `iperf3 --bidir` pour tester upload ET download simultanĂ©ment. **Changements dans** : [scripts/bench.sh:786-827](scripts/bench.sh#L786-L827) #### Avant (2 tests sĂ©parĂ©s - 20 secondes) ```bash # Test upload local upload_result=$(iperf3 -c "$target" -t 10 -J 2>/dev/null || echo '{}') # ... # Test download local download_result=$(iperf3 -c "$target" -t 10 -R -J 2>/dev/null || echo '{}') ``` #### AprĂšs (1 test bidirectionnel - 10 secondes) ```bash # Test bidirectionnel (upload + download simultanĂ©s) local bidir_result=$(iperf3 -c "$target" -t 10 --bidir -J 2>/dev/null || echo '{}') # Extraire upload (end.sum_sent) et download (end.sum_received) local upload_bps=$(echo "$bidir_result" | jq -r '.end.sum_sent.bits_per_second // 0' | tr -d '\n') local download_bps=$(echo "$bidir_result" | jq -r '.end.sum_received.bits_per_second // 0' | tr -d '\n') ``` **Avantages** : - ✅ **2x plus rapide** : 10 secondes au lieu de 20 - ✅ **Plus fiable** : un seul test au lieu de deux - ✅ **RĂ©sultats cohĂ©rents** : les deux directions testĂ©es simultanĂ©ment - ✅ **Conditions rĂ©elles** : simule une utilisation rĂ©seau bidirectionnelle **RĂ©sultats attendus** (d'aprĂšs test manuel) : - Upload : ~359 Mbps - Download : ~95 Mbps --- ### 2. Correction SMART Health et TempĂ©rature **ProblĂšme** : Le script collectait les donnĂ©es SMART (santĂ© et tempĂ©rature des disques) mais le payload JSON les Ă©crasait en les forçant Ă  `null`. **Solution** : Retirer le `null` forcĂ© et utiliser les valeurs collectĂ©es. **Changements dans** : [scripts/bench.sh:1005-1006](scripts/bench.sh#L1005-L1006) #### Avant (donnĂ©es perdues) ```bash storage: { devices: [ $storage[] | { name: ("/dev/" + .device), type: (.type | ascii_upcase), interface, capacity_gb: (.size_gb | tonumber? // .size_gb), vendor: null, model, smart_health: null, # ← FORCÉ À NULL ! temperature_c: null # ← FORCÉ À NULL ! } ], partitions: [] } ``` #### AprĂšs (donnĂ©es prĂ©servĂ©es) ```bash storage: { devices: [ $storage[] | { name: ("/dev/" + .device), type: (.type | ascii_upcase), interface, capacity_gb: (.size_gb | tonumber? // .size_gb), vendor: null, model, smart_health, # ← UTILISE LA VALEUR COLLECTÉE temperature_c # ← UTILISE LA VALEUR COLLECTÉE } ], partitions: [] } ``` **Valeurs collectĂ©es** (lignes 546-555 de bench.sh) : ```bash # TempĂ©rature (diverses variantes selon le type de disque) # SATA/HDD: Temperature_Celsius, Airflow_Temperature_Cel, Current Drive Temperature (colonne 10) # NVMe: Temperature: XX Celsius (colonne 2) temperature=$(echo "$smart_all" | awk '/Temperature_Celsius|Airflow_Temperature_Cel|Current Drive Temperature/ {print $10}' | head -1) [[ -z "$temperature" ]] && temperature=$(echo "$smart_all" | awk '/^Temperature:/ {print $2}' | head -1) # Statut SMART health health=$(sudo smartctl -H "/dev/$d" 2>/dev/null | awk '/SMART overall-health|SMART Health Status/ {print $NF}' | head -1) ``` **Support multi-types** : - ✅ Disques SATA/HDD : pattern `Temperature_Celsius` - ✅ Disques NVMe : pattern `Temperature:` (ligne 550) - ✅ Fallback Ă  `null` si non disponible **Valeurs possibles** : - `smart_health` : `"PASSED"`, `"FAILED"`, ou `null` si non disponible - `temperature_c` : nombre (ex: 35, 42) ou `null` si non disponible --- ## 📋 RĂ©sumĂ© des 5 Bugs CorrigĂ©s Aujourd'hui | # | Bug | Impact | Statut | Fichier ModifiĂ© | |---|-----|--------|--------|----------------| | 1 | CPU cores = 0 | Impossible de voir le nombre de cƓurs | ✅ CorrigĂ© | bench.sh:241-250 | | 2 | Backend ne met pas Ă  jour | DonnĂ©es toujours null aprĂšs 1er bench | ✅ CorrigĂ© | backend/app/api/benchmark.py:52-132 | | 3 | Benchmark rĂ©seau crash | Script plantait avec erreur jq | ✅ CorrigĂ© | bench.sh:796-800 | | 4 | SMART health/temp perdues | TempĂ©rature disques jamais transmise | ✅ CorrigĂ© | bench.sh:1005-1006 | | 5 | Test rĂ©seau lent/instable | Upload=0, 20s de test | ✅ CorrigĂ© | bench.sh:786-827 | --- ## đŸ§Ș Tests Ă  Effectuer ### Test 1 : VĂ©rifier le benchmark rĂ©seau ```bash cd /home/gilles/Documents/vscode/serv_benchmark/scripts sudo bash bench.sh ``` **VĂ©rifications** : - [ ] Upload > 0 Mbps (attendu : ~350-400 Mbps) - [ ] Download > 0 Mbps (attendu : ~90-100 Mbps) - [ ] Ping mesurĂ© (attendu : ~7-10 ms) - [ ] Test rĂ©seau prend ~10 secondes (pas 20) ### Test 2 : VĂ©rifier les donnĂ©es SMART ```bash # VĂ©rifier manuellement qu'un disque retourne des donnĂ©es SMART sudo smartctl -H /dev/sda sudo smartctl -A /dev/sda | grep Temperature ``` **Ensuite, aprĂšs le benchmark** : ```bash # VĂ©rifier que les donnĂ©es sont dans la base curl -s http://10.0.0.50:8007/api/devices | jq '.[0].hardware_snapshots[0].storage_devices_json' | jq '.' ``` **VĂ©rifications** : - [ ] `smart_health` = `"PASSED"` (ou `"FAILED"`) - [ ] `temperature_c` = nombre (ex: 35) --- ## 📊 Impact Performance ### Benchmark RĂ©seau - **Avant** : 2 tests × 10s = 20 secondes - **AprĂšs** : 1 test × 10s = 10 secondes - **Gain** : -50% de temps d'exĂ©cution ### Benchmark Total - **Avant** : ~3 minutes 30 secondes - **AprĂšs** : ~3 minutes 20 secondes - **Gain** : -10 secondes --- ## 📝 Notes Techniques ### Format JSON iperf3 --bidir Le mode bidirectionnel d'iperf3 retourne un JSON avec cette structure : ```json { "end": { "sum_sent": { "bits_per_second": 359123456.78 }, "sum_received": { "bits_per_second": 95234567.89 } } } ``` - `sum_sent` = Upload (client → serveur) - `sum_received` = Download (serveur → client) ### Extraction Robuste Pour Ă©viter les problĂšmes de retours chariot : ```bash local value=$(echo "$json" | jq -r '.path.to.value // 0' | tr -d '\n') ``` ClĂ©s utilisĂ©es : - `-r` : mode raw (pas de quotes) - `// 0` : valeur par dĂ©faut si null - `tr -d '\n'` : supprimer tous les retours chariot --- **Document créé le** : 2025-12-14 **Version script** : 1.2.0 **Auteur** : Claude Code