# Hotfix - Backend Validation & Smartctl Date : 13 dĂ©cembre 2025 Version : Backend 1.2.2 + Script 1.2.4 ## 🐛 ProblĂšmes RĂ©solus ### ProblĂšme #1 : Erreur HTTP 422 - Validation Backend **SymptĂŽmes** : ``` ✗ Erreur lors de l'envoi (HTTP 422) RĂ©ponse serveur : {"detail":[ {"type":"less_than_equal","loc":["body","results","cpu","score"],"msg":"Input should be less than or equal to 100","input":264.45}, {"type":"less_than_equal","loc":["body","results","disk","score"],"msg":"Input should be less than or equal to 100","input":104.23}, {"type":"less_than_equal","loc":["body","results","global_score"],"msg":"Input should be less than or equal to 100","input":139.3} ]} ``` **Cause** : Le backend Docker n'avait pas Ă©tĂ© **rebuilt complĂštement** aprĂšs la modification des validations Pydantic. Le cache Docker gardait l'ancienne version du fichier `benchmark.py` avec la limite de 100. **Solution** : ```bash # Forcer un rebuild complet sans cache docker compose down backend docker compose build --no-cache backend docker compose up -d backend ``` **VĂ©rification** : ```bash # VĂ©rifier la validation dans le conteneur docker exec linux_benchtools_backend grep "score.*Field" /app/app/schemas/benchmark.py # Doit afficher: le=10000 (pas le=100) ``` **RĂ©sultat** : ✅ Backend accepte maintenant les scores jusqu'Ă  10000 --- ### ProblĂšme #2 : Smartmontools (smartctl) Non InstallĂ© **SymptĂŽmes** : - Le script ne collecte pas les informations SMART des disques - Pas de tempĂ©rature disque - Pas de statut de santĂ© SMART **Cause** : Le paquet `smartmontools` n'Ă©tait pas dans la liste des dĂ©pendances Ă  installer automatiquement. **Solution** : Ajout de `smartctl` dans la liste des outils systĂšmes requis : **Fichier** : `scripts/bench.sh` ```bash # Avant for tool in curl jq lscpu free lsblk ip bc; do command -v "$tool" &>/dev/null || missing+=("$tool") done # AprĂšs for tool in curl jq lscpu free lsblk ip bc smartctl; do command -v "$tool" &>/dev/null || missing+=("$tool") done ``` Et ajout du mapping de package : ```bash declare -A pkg_map=( [curl]="curl" [jq]="jq" [lscpu]="util-linux" [free]="procps" [lsblk]="util-linux" [ip]="iproute2" [bc]="bc" [smartctl]="smartmontools" # ← AjoutĂ© [sysbench]="sysbench" [fio]="fio" [iperf3]="iperf3" ) ``` **RĂ©sultat** : ✅ Le script installe automatiquement `smartmontools` s'il est manquant --- ## 📝 Fichiers ModifiĂ©s | Fichier | Lignes | Type | Description | |---------|--------|------|-------------| | `backend/app/schemas/benchmark.py` | 14, 20, 30, 40, 46, 56 | Fix | Validation `le=100` → `le=10000` | | `scripts/bench.sh` | 111 | Fix | Ajout `smartctl` aux dĂ©pendances | | `scripts/bench.sh` | 149 | Fix | Mapping `smartctl → smartmontools` | --- ## đŸ§Ș Tests ### Test 1 : VĂ©rifier Validation Backend ```bash # Dans le conteneur backend docker exec linux_benchtools_backend grep "le=10000" /app/app/schemas/benchmark.py # Devrait afficher plusieurs lignes avec le=10000 ``` ### Test 2 : VĂ©rifier Installation Smartctl ```bash # ExĂ©cuter le script sudo bash scripts/bench.sh # Si smartctl manque, le script devrait afficher: # ⚠ Outils systĂšmes manquants: smartctl # â–ș apt-get install... # ✓ Installation des dĂ©pendances OK ``` ### Test 3 : Benchmark Complet ```bash sudo bash scripts/bench.sh # Devrait rĂ©ussir avec: # ✓ CPU: 264.45 events/sec (score: 264.45) ← AcceptĂ© (< 10000) # ✓ Disque: ... (score: 104.23) ← AcceptĂ© (< 10000) # ✓ Score global: 139.3 ← AcceptĂ© (< 10000) # ✅ Benchmark envoyĂ© avec succĂšs ``` --- ## 🔍 Leçons Apprises ### Cache Docker Le cache Docker peut ĂȘtre trĂšs persistant. MĂȘme avec `docker compose build`, les couches mises en cache peuvent ne pas ĂȘtre reconstruites si Docker pense que rien n'a changĂ©. **Solution** : Toujours utiliser `--no-cache` pour forcer une reconstruction complĂšte aprĂšs avoir modifiĂ© du code Python dans le backend. ### VĂ©rification Post-Build Toujours vĂ©rifier que les modifications sont bien prĂ©sentes dans le conteneur aprĂšs un build : ```bash docker exec cat /path/to/modified/file | grep "pattern" ``` --- ## 📊 Impact ### Backend (1.0.1 → 1.2.2) - ✅ Accepte les scores jusqu'Ă  10000 - ✅ Pas de migration DB nĂ©cessaire - ✅ RĂ©trocompatible (scores < 100 toujours valides) ### Script (1.2.3 → 1.2.4) - ✅ Installation automatique de smartmontools - ✅ Collecte des informations SMART disques - ✅ TempĂ©ratures et statut de santĂ© disques disponibles --- ## 🚀 DĂ©ploiement ### Pour Appliquer ces Fixes ```bash cd /home/gilles/Documents/vscode/serv_benchmark # 1. Rebuild backend sans cache docker compose down backend docker compose build --no-cache backend docker compose up -d backend # 2. VĂ©rifier la validation docker exec linux_benchtools_backend grep "le=10000" /app/app/schemas/benchmark.py # 3. Tester le script sudo bash scripts/bench.sh # Devrait maintenant : # - Installer smartmontools si manquant # - Collecter les infos SMART des disques # - Envoyer le benchmark sans erreur 422 ``` --- ## ✅ Checklist de Validation - [x] Backend rebuild sans cache - [x] Validation `le=10000` confirmĂ©e dans conteneur - [x] Smartctl ajoutĂ© aux dĂ©pendances - [x] Mapping smartmontools ajoutĂ© - [x] Backend redĂ©marrĂ© - [ ] Test benchmark complet rĂ©ussi - [ ] Infos SMART disques collectĂ©es - [ ] Pas d'erreur HTTP 422 --- **Status** : ✅ Fixes appliquĂ©s et dĂ©ployĂ©s **Prochaine action** : Tester le benchmark complet avec debug rĂ©seau --- ## 🔗 Fichiers LiĂ©s - [HOTFIX_SCORE_VALIDATION.md](HOTFIX_SCORE_VALIDATION.md) - Augmentation limite initiale - [HOTFIX_BENCH_IMPROVEMENTS.md](HOTFIX_BENCH_IMPROVEMENTS.md) - Fixes mĂ©moire et ping - [DEBUG_NETWORK_BENCH.md](DEBUG_NETWORK_BENCH.md) - Debug rĂ©seau en cours - [bench.sh](scripts/bench.sh) - Script de benchmark client - [benchmark.py](backend/app/schemas/benchmark.py) - SchĂ©mas de validation