# 📊 Échelle de couleurs des scores de benchmark

## Vue d'ensemble

Le système d'échelle de couleurs permet de personnaliser les seuils qui déterminent la couleur des badges de score dans l'application. Par défaut, les scores sont colorés en :
- 🔴 **Rouge** (Faible) : scores < 51
- 🟠 **Orange** (Moyen) : scores entre 51 et 75
- 🟢 **Vert** (Élevé) : scores ≥ 76

Cette fonctionnalité permet d'ajuster ces seuils en fonction de vos données réelles.

## Fonctionnalités

### 1. Configuration manuelle des seuils

Vous pouvez ajuster manuellement les deux seuils principaux :
- **Seuil Moyen/Élevé** : Score minimum pour qu'un badge soit vert
- **Seuil Faible/Moyen** : Score minimum pour qu'un badge soit orange

### 2. Statistiques en temps réel

L'interface affiche automatiquement les statistiques de vos benchmarks actuels :
- **Minimum** : Le score le plus bas
- **Médiane** : Score au milieu de la distribution
- **Moyenne** : Score moyen de tous les benchmarks
- **Maximum** : Le score le plus élevé

### 3. Calcul automatique

Le bouton **"Calculer automatiquement"** analyse vos données et définit les seuils de manière intelligente :
- **Seuil Moyen** : Percentile 33% (⅓ des scores sont en dessous)
- **Seuil Élevé** : Percentile 66% (⅔ des scores sont en dessous)

Cela garantit une répartition équilibrée :
- ⅓ des scores seront rouges (faibles)
- ⅓ des scores seront oranges (moyens)
- ⅓ des scores seront verts (élevés)

## Utilisation

### Configuration manuelle

1. Ouvrez [Settings](http://localhost:8087/settings.html)
2. Allez à la section **"Échelle de couleurs des scores"**
3. Ajustez les curseurs pour les deux seuils
4. Cliquez sur **"Enregistrer les seuils"**
5. La page se recharge automatiquement

### Calcul automatique

1. Ouvrez [Settings](http://localhost:8087/settings.html)
2. Allez à la section **"Échelle de couleurs des scores"**
3. Consultez les statistiques pour comprendre vos données
4. Cliquez sur **"Calculer automatiquement"**
5. Vérifiez les seuils proposés
6. Cliquez sur **"Enregistrer les seuils"**

### Réinitialisation

Pour revenir aux valeurs par défaut (51 et 76) :
1. Cliquez sur **"Réinitialiser"**
2. Les curseurs reviennent aux valeurs d'origine

## Exemple d'utilisation

### Cas 1 : Serveurs haute performance

Si vous benchmarkez uniquement des serveurs performants, vos scores peuvent être très élevés (ex: 3000-9000). Les seuils par défaut (51, 76) ne sont pas pertinents.

**Solution** : Utilisez le calcul automatique
```
Statistiques actuelles :
- Min: 3300
- Médiane: 5400
- Moyenne: 5800
- Max: 9100

Seuils calculés automatiquement :
- Seuil Moyen: 4200 (percentile 33%)
- Seuil Élevé: 6800 (percentile 66%)
```

Résultat : Distribution équilibrée des couleurs adaptée à vos données.

### Cas 2 : Mix de machines (Raspberry Pi, serveurs, PC)

Avec un large éventail de performances :
```
Statistiques actuelles :
- Min: 330
- Médiane: 1900
- Moyenne: 3450
- Max: 9100

Seuils calculés automatiquement :
- Seuil Moyen: 1812
- Seuil Élevé: 4647
```

### Cas 3 : Configuration personnalisée

Vous pouvez définir vos propres critères :
- Machines < 1000 : Faibles (rouge)
- Machines 1000-5000 : Moyennes (orange)
- Machines ≥ 5000 : Élevées (vert)

## Architecture technique

### Stockage

Les seuils sont stockés dans `localStorage` :
```javascript
localStorage.getItem('scoreThreshold_high')    // ex: "76"
localStorage.getItem('scoreThreshold_medium')  // ex: "51"
```

### Application des seuils

La fonction `getScoreBadgeClass()` dans [utils.js](../frontend/js/utils.js) lit automatiquement les seuils depuis localStorage :

```javascript
function getScoreBadgeClass(score) {
  const highThreshold = parseInt(localStorage.getItem('scoreThreshold_high') || '76');
  const mediumThreshold = parseInt(localStorage.getItem('scoreThreshold_medium') || '51');

  if (score >= highThreshold) return 'score-badge score-high';
  if (score >= mediumThreshold) return 'score-badge score-medium';
  return 'score-badge score-low';
}
```

### Calcul des statistiques

Les statistiques sont calculées en temps réel depuis l'API `/api/devices` :

```javascript
async function loadScoreStatistics() {
  const response = await fetch(`${backendApiUrl}/devices`);
  const data = await response.json();

  // Extraction de tous les global_score
  const scores = data.items
    .map(d => d.last_benchmark?.global_score)
    .filter(s => s !== null && s !== undefined);

  // Calcul des percentiles
  scores.sort((a, b) => a - b);
  const p33 = scores[Math.floor(scores.length / 3)];
  const p66 = scores[Math.floor(scores.length * 2 / 3)];
}
```

## Validation

Le système valide que :
- Le seuil moyen est inférieur au seuil élevé
- Les valeurs sont des nombres entiers positifs

Si la validation échoue, un message d'erreur s'affiche.

## Impact

Les seuils personnalisés affectent :
- ✅ La page Dashboard (tableau des devices)
- ✅ La page Devices (liste des devices)
- ✅ La page Device Detail (score global et historique)
- ✅ Tous les badges de score dans l'application

## Limites et considérations

1. **Rechargement nécessaire** : Après modification des seuils, la page doit être rechargée pour appliquer les changements partout.

2. **Stockage local** : Les seuils sont stockés dans le navigateur (localStorage). Si vous utilisez plusieurs navigateurs ou machines, les seuils doivent être configurés séparément.

3. **Pas de stockage backend** : Les seuils ne sont pas synchronisés avec le serveur. C'est une préférence purement côté client.

4. **Données minimales** : Le calcul automatique nécessite au moins quelques benchmarks. Avec moins de 3 devices, les percentiles peuvent ne pas être représentatifs.

## FAQ

**Q: Que se passe-t-il si je ne configure pas de seuils personnalisés ?**
R: Les valeurs par défaut (51 et 76) sont utilisées. Ces valeurs historiques correspondent aux anciens seuils du système.

**Q: Puis-je avoir plus de 3 niveaux de couleur ?**
R: Non, le système actuel supporte uniquement 3 niveaux (faible/moyen/élevé). Pour plus de granularité, il faudrait modifier le code.

**Q: Les seuils s'appliquent-ils à tous les types de scores ?**
R: Oui, les mêmes seuils sont utilisés pour le score global, CPU, mémoire, disque, réseau et GPU.

**Q: Que faire si j'ai très peu de données ?**
R: Avec peu de benchmarks, le calcul automatique peut donner des résultats peu représentatifs. Dans ce cas, utilisez la configuration manuelle ou conservez les valeurs par défaut.

## Améliorations futures possibles

- Sauvegarder les seuils dans le backend pour synchronisation multi-navigateur
- Seuils différents par type de score (CPU, RAM, disque, etc.)
- Plus de 3 niveaux de couleur (excellent, bon, moyen, faible, très faible)
- Graphique de distribution des scores
- Suggestions de seuils basées sur des benchmarks publics

---

**Fichiers modifiés** :
- [frontend/settings.html](../frontend/settings.html) - Interface utilisateur
- [frontend/js/settings.js](../frontend/js/settings.js) - Logique de gestion
- [frontend/js/utils.js](../frontend/js/utils.js) - Application des seuils

**Créé le** : 2026-01-11
