5.9 KiB
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 :
# Forcer un rebuild complet sans cache
docker compose down backend
docker compose build --no-cache backend
docker compose up -d backend
Vérification :
# 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
# 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 :
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
# 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
# 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
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 :
docker exec <container> 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
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
- Backend rebuild sans cache
- Validation
le=10000confirmée dans conteneur - Smartctl ajouté aux dépendances
- Mapping smartmontools ajouté
- 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 - Augmentation limite initiale
- HOTFIX_BENCH_IMPROVEMENTS.md - Fixes mémoire et ping
- DEBUG_NETWORK_BENCH.md - Debug réseau en cours
- bench.sh - Script de benchmark client
- benchmark.py - Schémas de validation