Files
serv_benchmark/docs/HOTFIX_BACKEND_SMARTCTL.md
Gilles Soulier c67befc549 addon
2026-01-05 16:08:01 +01:00

220 lines
5.9 KiB
Markdown
Executable File

# 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 <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
```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