addon
This commit is contained in:
219
docs/HOTFIX_BACKEND_SMARTCTL.md
Executable file
219
docs/HOTFIX_BACKEND_SMARTCTL.md
Executable file
@@ -0,0 +1,219 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user