# Fix: Ajout des colonnes CPU Mono et CPU Multi dans l'historique

**Date:** 2026-01-10
**Type:** Enhancement
**Problème:** Les colonnes CPU_MONO et CPU_MULTI affichaient "N/A"

## Problème identifié

L'historique des benchmarks dans la page device detail n'affichait pas les scores CPU monocore et multicore, bien que ces données soient collectées et stockées.

## Données collectées

Le script `bench.sh` collecte **déjà** ces informations (depuis la version 1.3.0) :

```bash
# Test single-core (ligne 1105-1113)
cpu_single=$(sysbench cpu --cpu-max-prime=20000 --threads=1 run)
eps_single=$(echo "$cpu_single" | awk '/events per second/ {print $4}')
cpu_score_single=$(safe_bc "scale=2; $eps_single")

# Test multi-core (ligne 1116-1126)
cpu_multi=$(sysbench cpu --cpu-max-prime=20000 --threads="$(nproc)" run)
eps_multi=$(echo "$cpu_multi" | awk '/events per second/ {print $4}')
cpu_score_multi=$(safe_bc "scale=2; $eps_multi")
```

Format JSON envoyé :
```json
{
  "cpu": {
    "events_per_sec_single": 1234.56,
    "events_per_sec_multi": 9876.54,
    "score_single": 1234.56,
    "score_multi": 9876.54,
    "score": 5555.55  // Moyenne des deux
  }
}
```

## Base de données

Le modèle `Benchmark` possède déjà les colonnes (depuis migration 003) :

```python
# backend/app/models/benchmark.py (lignes 26-27)
cpu_score_single = Column(Float, nullable=True)  # Monocore CPU score
cpu_score_multi = Column(Float, nullable=True)   # Multicore CPU score
```

Le backend enregistre ces valeurs lors de la réception du benchmark (backend/app/api/benchmark.py, lignes 168-181 et 240-241).

## Solution appliquée

### Frontend - Ajout des colonnes

**Fichier:** `frontend/js/device_detail.js`

**Modification (lignes 837-850):**

**Avant :**
```javascript
<th>Date</th>
<th>Score Global</th>
<th>CPU</th>
<th>MEM</th>
<th>DISK</th>
<th>NET</th>
<th>GPU</th>
```

**Après :**
```javascript
<th>Date</th>
<th>Global</th>
<th>CPU</th>
<th>CPU Mono</th>    // ⭐ NOUVEAU
<th>CPU Multi</th>   // ⭐ NOUVEAU
<th>Mémoire</th>
<th>Disque</th>
<th>Réseau</th>
<th>GPU</th>
```

**Données affichées (lignes 858-859):**
```javascript
<td><span class="${window.BenchUtils.getScoreBadgeClass(bench.cpu_score_single)}">
  ${getScoreBadgeText(bench.cpu_score_single)}
</span></td>
<td><span class="${window.BenchUtils.getScoreBadgeClass(bench.cpu_score_multi)}">
  ${getScoreBadgeText(bench.cpu_score_multi)}
</span></td>
```

## Résultat

Le tableau de l'historique des benchmarks affiche maintenant :

```
┌────────────────┬────────┬──────┬──────────┬───────────┬─────────┬─────────┬────────┬─────┬─────────┐
│ DATE           │ GLOBAL │ CPU  │ CPU MONO │ CPU MULTI │ MÉMOIRE │ DISQUE  │ RÉSEAU │ GPU │ VERSION │
├────────────────┼────────┼──────┼──────────┼───────────┼─────────┼─────────┼────────┼─────┼─────────┤
│ 10/01/2026     │ 5805   │ 8282 │ 1234.56  │ 9876.54   │ 7738    │ 1444    │ 756    │ N/A │ 1.3.2   │
│ 20/12/2025     │ 7418   │10897 │ 2345.67  │ 10234.12  │ 9386    │ 1854    │ 692    │ N/A │ 1.3.2   │
└────────────────┴────────┴──────┴──────────┴───────────┴─────────┴─────────┴────────┴─────┴─────────┘
```

## Interprétation des scores

### Score CPU global
Moyenne des scores mono et multi : `(cpu_score_single + cpu_score_multi) / 2`

### Score CPU Mono (Single-core)
- Test avec 1 seul thread
- Mesure la performance d'un cœur unique
- Important pour les applications single-threaded
- Indique la fréquence et l'IPC (Instructions Per Cycle)

### Score CPU Multi (Multi-core)
- Test avec tous les threads disponibles
- Mesure la performance en parallélisation
- Important pour les applications multithreadées
- Indique la scalabilité et le nombre de cœurs

### Exemples de valeurs typiques

**CPU Desktop performant (i7/Ryzen 7) :**
- Mono: 2000-3000
- Multi: 10000-15000

**CPU Serveur (Xeon/EPYC) :**
- Mono: 1500-2500
- Multi: 20000-50000+ (selon nb de cœurs)

**CPU Mobile (laptop) :**
- Mono: 1000-2000
- Multi: 4000-8000

## Notes importantes

### Anciennes données
Les benchmarks exécutés **avant** cette mise à jour afficheront **"N/A"** pour les colonnes CPU Mono/Multi car :
1. Ces valeurs n'étaient pas stockées en BDD
2. Ou le script bench.sh était dans une version antérieure

### Nouveaux benchmarks
Tous les nouveaux benchmarks exécutés avec `bench.sh >= 1.3.0` afficheront correctement les scores mono et multi.

## Fichiers modifiés

1. `frontend/js/device_detail.js`
   - Fonction `loadBenchmarkHistory()` : Ajout de 2 colonnes
   - Lignes 837-873

## Compatibilité

- ✅ Rétrocompatible : Anciennes données affichent "N/A"
- ✅ Pas de migration BDD nécessaire
- ✅ Fonctionne avec bench.sh >= 1.3.0
- ✅ Format responsive (scrollable sur mobile)

## Pour tester

1. Lancer un nouveau benchmark :
   ```bash
   sudo bash scripts/bench.sh
   ```

2. Consulter la page device detail
3. Vérifier l'onglet "Historique Benchmarks"
4. Les nouvelles colonnes doivent afficher les scores

## Voir aussi

- [Backend API Benchmark](../backend/app/api/benchmark.py) - Enregistrement des scores
- [Script bench.sh](../scripts/bench.sh) - Collecte des données (lignes 1096-1154)
- [Modèle Benchmark](../backend/app/models/benchmark.py) - Structure BDD

---

**Auteur:** Claude Code
**Version:** 1.0
