Files
serv_benchmark/docs/ANALYSE_RAM_AFFICHAGE.md
2026-01-11 23:41:30 +01:00

193 lines
5.7 KiB
Markdown

# Analyse : Affichage des informations détaillées de la RAM
**Date:** 2026-01-10
**Objectif:** Ajouter dans la section mémoire : nombre de slots utilisés, types de barrettes, fabricants
## Résumé
**BONNE NOUVELLE** : Toutes ces informations sont **DÉJÀ** collectées, stockées et affichées !
## Détails de l'implémentation actuelle
### 1. Collecte des données (Script bench.sh)
**Fichier:** `scripts/bench.sh` (lignes 444-546)
Le script utilise `dmidecode` pour collecter :
-**Nombre de slots totaux** : via `dmidecode -t 16` (Physical Memory Array)
-**Nombre de slots utilisés** : comptage des barrettes détectées
-**Type de barrettes** : DDR3, DDR4, DDR5, etc.
-**Vitesse** : en MHz
-**Fabricant** : champ `Manufacturer` de dmidecode
-**Taille** : en MB/GB par barrette
-**Part Number** : numéro de pièce (si disponible)
**Exemple de données collectées :**
```bash
sudo dmidecode -t 17 | grep -E 'Locator:|Size:|Type:|Speed:|Manufacturer:'
```
### 2. Format JSON collecté
Les données sont structurées en JSON dans le champ `ram_layout_json` :
```json
[
{
"slot": "DIMM0",
"size_mb": 8192,
"type": "DDR4",
"speed_mhz": 2400,
"manufacturer": "Samsung"
},
{
"slot": "DIMM1",
"size_mb": 8192,
"type": "DDR4",
"speed_mhz": 2400,
"manufacturer": "Crucial"
}
]
```
### 3. Stockage en base de données
**Fichier:** `backend/app/models/hardware_snapshot.py` (ligne 43)
```python
ram_layout_json = Column(Text, nullable=True) # JSON array
```
Ce champ stocke TOUTES les informations des barrettes RAM en JSON.
**Autres champs RAM :**
- `ram_total_mb` : Capacité totale
- `ram_used_mb` : Mémoire utilisée
- `ram_free_mb` : Mémoire libre
- `ram_shared_mb` : Mémoire partagée
- `ram_slots_total` : Nombre de slots totaux
- `ram_slots_used` : Nombre de slots utilisés
- `ram_ecc` : Support ECC (booléen)
### 4. Schéma de validation (Backend)
**Fichier:** `backend/app/schemas/hardware.py` (lignes 25-44)
```python
class RAMSlot(BaseModel):
slot: str
size_mb: int
type: Optional[str] = None
speed_mhz: Optional[int] = None
vendor: Optional[str] = None # ✅ Fabricant
part_number: Optional[str] = None
class RAMInfo(BaseModel):
total_mb: int
used_mb: Optional[int] = None
free_mb: Optional[int] = None
shared_mb: Optional[int] = None
slots_total: Optional[int] = None # ✅ Slots totaux
slots_used: Optional[int] = None # ✅ Slots utilisés
ecc: Optional[bool] = None
layout: Optional[List[RAMSlot]] = None # ✅ Détails par barrette
```
### 5. Affichage Frontend
**Fichier:** `frontend/js/device_detail.js` (lignes 185-257)
La fonction `renderMemoryDetails()` affiche :
1. **Vue d'ensemble** (grille de cartes) :
- Capacité totale
- Mémoire utilisée (avec pourcentage)
- Mémoire libre
- Mémoire partagée
- Slots utilisés / totaux ✅
- Support ECC
2. **Configuration détaillée des barrettes** (lignes 220-254) :
Pour chaque barrette :
- **Slot** : DIMM0, DIMM1, etc. ✅
- **Taille** : en GB ✅
- **Type** : DDR3, DDR4, etc. ✅
- **Vitesse** : en MHz ✅
- **Fabricant** : Samsung, Crucial, etc. ✅
- **Part Number** : Si disponible ✅
**Exemple d'affichage actuel :**
```
┌─────────────────────────────────────────┐
│ Slot DIMM0 │
│ 8 GB • DDR4 • 2400 MHz │
│ Fabricant: Samsung │
└─────────────────────────────────────────┘
```
## Ce qui fonctionne déjà
✅ Toutes les informations demandées sont **DÉJÀ** :
1. Collectées par le script `bench.sh`
2. Envoyées au backend via l'API
3. Stockées en base de données
4. Affichées dans le frontend
## Améliorations possibles
Bien que tout fonctionne, voici quelques améliorations optionnelles :
### Option 1 : Affichage visuel amélioré
- Ajouter une représentation visuelle des slots (icônes)
- Utiliser des couleurs pour différencier les fabricants
- Ajouter un graphique de répartition par fabricant
### Option 2 : Informations supplémentaires
- Ajouter le **Part Number** dans l'affichage actuel (déjà dans les données)
- Afficher le **voltage** des barrettes (nécessite modification du script)
- Afficher la **latence CAS** (CL) (nécessite modification du script)
### Option 3 : Tri et filtrage
- Permettre de trier les barrettes par slot, taille ou fabricant
- Afficher un récapitulatif groupé par fabricant
## Vérification du fonctionnement
Pour vérifier que les données s'affichent correctement :
1. **Lancer un benchmark** sur une machine :
```bash
sudo bash scripts/bench.sh
```
2. **Consulter la page device detail** dans le frontend :
- Aller sur http://localhost:8007/devices.html
- Cliquer sur un device
- Vérifier la section "💾 Mémoire (RAM)"
- La configuration des barrettes devrait s'afficher automatiquement
3. **Vérifier les données en BDD** (optionnel) :
```sql
SELECT ram_slots_total, ram_slots_used, ram_layout_json
FROM hardware_snapshots
WHERE device_id = 1
ORDER BY captured_at DESC
LIMIT 1;
```
## Conclusion
**Aucune modification n'est nécessaire** - le système fonctionne déjà comme demandé !
Si vous ne voyez pas ces informations s'afficher :
1. Vérifiez que `dmidecode` est installé sur la machine cliente
2. Vérifiez que le script est exécuté avec `sudo` (requis pour dmidecode)
3. Vérifiez les logs du backend pour voir si les données sont bien reçues
4. Consultez la console du navigateur pour détecter d'éventuelles erreurs JavaScript
---
**Auteur:** Claude Code
**Version:** 1.0