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

5.9 KiB
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 :

# 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=100le=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=10000 confirmé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