# Changelog - 14 décembre 2025, 03:00

## 🔧 Correctifs Appliqués

### 1. Script Benchmark (bench.sh v1.2.0)

#### Problème
Le script collectait le nombre de **threads** au lieu du nombre de **cores physiques** pour le CPU.

**Avant** (ligne 240) :
```bash
cores=$(lscpu | awk -F: '/^CPU\(s\)/ {gsub(/^[ \t]+/,"",$2); print $2}')
```
- Résultat : `CPU(s): 4` (nombre de threads logiques)
- Stocké comme `cpu_cores: 4` dans la base de données
- **Incorrect** : Pour un CPU avec 2 cores et hyperthreading

**Après** (lignes 241-245) :
```bash
# Calcul du nombre de cores physiques: Core(s) per socket × Socket(s)
local cores_per_socket sockets
cores_per_socket=$(lscpu | awk -F: '/Core\(s\) per socket/ {gsub(/^[ \t]+/,"",$2); print $2}')
sockets=$(lscpu | awk -F: '/Socket\(s\)/ {gsub(/^[ \t]+/,"",$2); print $2}')
cores=$((${cores_per_socket:-1} * ${sockets:-1}))
```
- Résultat : `2 cores × 1 socket = 2` (cores physiques)
- **Correct** : Reflète le vrai nombre de cores

#### Exemple de correction
```
Machine: Intel Core i5-2400
- Ancien: cpu_cores = 4 (threads)
- Nouveau: cpu_cores = 2 (cores réels)
- Threads: 4 (via nproc, inchangé)

Machine: AMD Ryzen 9 5900X
- Ancien: cpu_cores = 24 (threads)
- Nouveau: cpu_cores = 12 (cores réels)
- Threads: 24 (via nproc, inchangé)
```

### 2. Frontend (device_detail.js)

#### Problème 1: Affichage CPU cores incorrect
L'affichage utilisait l'opérateur `||` qui traite `0` comme une valeur "falsy", affichant "N/A" au lieu de `0`.

**Avant** (ligne 129) :
```javascript
{ label: 'Cores', value: snapshot.cpu_cores || 'N/A' }
```
- `cpu_cores = 0` → Affiche "N/A" ou "?" ❌

**Après** (ligne 129) :
```javascript
{ label: 'Cores', value: snapshot.cpu_cores != null ? snapshot.cpu_cores : 'N/A' }
```
- `cpu_cores = 0` → Affiche "0" ✅
- `cpu_cores = null` → Affiche "N/A" ✅

#### Problème 2: Affichage RAM incorrect

**Avant** :
```javascript
const ramUsedGB = Math.round((snapshot.ram_used_mb || 0) / 1024);
// ram_used_mb = null → Affiche "0 GB" au lieu de "N/A"
```

**Après** (lignes 183-193) :
```javascript
const ramUsedGB = snapshot.ram_used_mb != null ? Math.round(snapshot.ram_used_mb / 1024) : null;
// ram_used_mb = null → Affiche "N/A" ✅
// ram_used_mb = 0 → Affiche "0 GB" ✅
```

#### Problème 3: Affichage Carte Mère avec espaces vides

**Problème** : Le modèle de carte mère peut contenir uniquement des espaces (ex: "                      ")

**Avant** (ligne 97) :
```javascript
{ label: 'Modèle', value: snapshot.motherboard_model || 'N/A' }
// "                      " → Affiche des espaces au lieu de "N/A"
```

**Après** (lignes 95-107) :
```javascript
const cleanValue = (val) => {
  if (!val || (typeof val === 'string' && val.trim() === '')) return 'N/A';
  return val;
};

const items = [
  { label: 'Fabricant', value: cleanValue(snapshot.motherboard_vendor) },
  { label: 'Modèle', value: cleanValue(snapshot.motherboard_model) },
  { label: 'Version BIOS', value: cleanValue(snapshot.bios_version) },
  { label: 'Date BIOS', value: cleanValue(snapshot.bios_date) }
];
// "                      " → Affiche "N/A" ✅
```

## 📊 Impact

### Avant le Correctif
```json
{
  "cpu_cores": 0,          // ❌ Incorrect (devrait être 2)
  "cpu_threads": 24,       // ✅ OK
  "ram_used_mb": null,     // ⚠️ Données manquantes
  "ram_free_mb": null      // ⚠️ Données manquantes
}
```

**Frontend affichait** :
- Cores: "?" (car 0 traité comme falsy)
- RAM Utilisée: "0 GB" (au lieu de "N/A")

### Après le Correctif + Nouveau Benchmark

**Base de données** :
```json
{
  "cpu_cores": 2,          // ✅ Correct (2 cores physiques)
  "cpu_threads": 4,        // ✅ OK
  "ram_used_mb": 6818,     // ✅ Données collectées
  "ram_free_mb": 379       // ✅ Données collectées
}
```

**Frontend affichera** :
- Cores: "2" ✅
- Threads: "4" ✅
- RAM Utilisée: "7 GB (87%)" ✅
- RAM Libre: "0 GB" ✅

## 🧪 Tests de Validation

```bash
# Test 1: Vérifier la collecte CPU cores
LANG=C lscpu | grep -E "(Core\(s\) per socket|Socket\(s\))"
# Résultat attendu: Core(s) per socket: 2, Socket(s): 1

# Test 2: Vérifier la collecte RAM
free -k | awk '/^Mem:/ {printf "Used: %d MB\n", $3/1024}'
# Résultat attendu: Used: ~6800 MB (valeur non-null)

# Test 3: Redémarrer les conteneurs
docker compose restart frontend

# Test 4: Exécuter un nouveau benchmark
sudo bash /home/gilles/Documents/vscode/serv_benchmark/scripts/bench.sh

# Test 5: Vérifier l'API
curl http://localhost:8007/api/devices/1 | jq '{
  cpu_cores: .last_hardware_snapshot.cpu_cores,
  cpu_threads: .last_hardware_snapshot.cpu_threads,
  ram_used: .last_hardware_snapshot.ram_used_mb
}'
# Résultat attendu: cpu_cores: 2, cpu_threads: 4, ram_used: 6818
```

## 📝 Prochaines Étapes

1. **Exécuter un nouveau benchmark** sur toutes les machines pour mettre à jour les données
2. **Vérifier l'interface web** : http://localhost:8087/device_detail.html?id=1
3. **Valider** que toutes les sections affichent les bonnes données

## 🔗 Fichiers Modifiés

| Fichier | Lignes | Changement |
|---------|--------|------------|
| [scripts/bench.sh](scripts/bench.sh#L234-L247) | 234-247 | Correctif collecte cpu_cores |
| [frontend/js/device_detail.js](frontend/js/device_detail.js#L129-L130) | 129-130 | Amélioration affichage CPU |
| [frontend/js/device_detail.js](frontend/js/device_detail.js#L183-L193) | 183-193 | Amélioration affichage RAM |

## 🎯 Résultat Attendu

Après avoir exécuté le benchmark avec le script corrigé :
- ✅ Nombre de **cores physiques** correct dans la base de données
- ✅ Données RAM complètes (**used**, **free**, **shared**)
- ✅ Frontend affiche les valeurs réelles au lieu de "N/A"
- ✅ Affichage cohérent entre 0, null et valeurs réelles

---

**Version Script** : 1.2.0
**Version Frontend** : 2.0.1
**Date Déploiement** : 14 décembre 2025, 03:00
