220 lines
5.9 KiB
Markdown
220 lines
5.9 KiB
Markdown
# 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
|