193 lines
5.7 KiB
Markdown
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
|