# Restructuration Frontend - Séparation des Caractéristiques Hardware Date : 14 décembre 2025 Version : Frontend 2.0.0 ## 🎯 Objectif Réorganiser la page de détail des devices pour séparer clairement les caractéristiques matérielles par composant et distinguer les informations hardware des résultats de benchmarks. ## 📋 Modifications Apportées ### 1. Restructuration HTML ([device_detail.html](frontend/device_detail.html:47-119)) **Avant** : Sections génériques - Résumé Hardware (tout mélangé) - Dernier Benchmark - Informations Réseau Détaillées **Après** : Sections séparées par composant 1. ⚡ **Carte Mère (Motherboard)** - Fabricant, Modèle - BIOS (version, date) - Slots RAM disponibles 2. 🔲 **Processeur (CPU)** - Fabricant, Modèle, Microarchitecture - Cores, Threads - Fréquences (base, max), TDP - Cache (L1, L2, L3) - Instructions supportées (flags) 3. 💾 **Mémoire (RAM)** - Capacité totale, utilisée, libre, partagée - Nombre de slots utilisés/disponibles - Support ECC - **Configuration détaillée par barrette** : - Slot, capacité, type (DDR3/DDR4/etc.) - Vitesse (MHz) - Fabricant, Part Number 4. 💿 **Stockage (Disques)** - **Vue par disque (sda, sdb, nvme0n1, etc.)** : - Nom du périphérique - Modèle, capacité - Type (SSD/HDD), interface (SATA/NVMe/USB) - Statut SMART - Température 5. 🎮 **Carte Graphique (GPU)** - Fabricant, Modèle - Driver version - Mémoire dédiée/partagée - APIs supportées (OpenGL, Vulkan, etc.) 6. 🌐 **Réseau (Network)** - **Vue par interface** : - Nom (eth0, enp0s3, wlan0, etc.) - Type (ethernet/wifi) - Adresse IP, MAC - Vitesse de liaison (Mbps) - Driver - Wake-on-LAN support 7. 🐧 **Système d'exploitation** - Nom, version - Kernel version - Architecture - Type de virtualisation 8. 📊 **Résultats Benchmarks** - Score global - Scores individuels (CPU, RAM, Disque, Réseau, GPU) - Date du dernier benchmark - Version du script ### 2. Nouvelles Fonctions JavaScript ([device_detail.js](frontend/js/device_detail.js:85-457)) #### Fonctions créées : 1. **`renderMotherboardDetails()`** (ligne 85) - Affiche les informations de la carte mère - BIOS version et date - Slots RAM 2. **`renderCPUDetails()`** (ligne 115) - Informations complètes du processeur - Cache L1/L2/L3 - Instructions CPU (flags) avec affichage limité à 50 - Affichage responsive en grille 3. **`renderMemoryDetails()`** (ligne 173) - Statistiques RAM (total, utilisé, libre, partagé) - Pourcentage d'utilisation - **Layout détaillé des barrettes RAM** : - Parse `ram_layout_json` - Affiche chaque DIMM avec ses caractéristiques - Slot, taille, type, vitesse, fabricant 4. **`renderStorageDetails()`** (ligne 248) - **Vue détaillée par disque** - Parse `storage_devices_json` - Affichage avec icônes différentes (SSD 💾 / HDD 💿) - Badge de santé SMART (vert/rouge) - Température si disponible 5. **`renderGPUDetails()`** (ligne 335) - Informations GPU complètes - Mémoire VRAM - APIs supportées (badges) 6. **`renderNetworkDetails()`** (ligne 459) - **Séparation des benchmarks réseau** - Affichage par interface réseau - Wake-on-LAN badge - Layout responsive 7. **`renderOSDetails()`** (ligne 394) - Informations système - Architecture, virtualisation 8. **`renderBenchmarkResults()`** (ligne 424) - Scores de benchmarks uniquement - Séparé des caractéristiques hardware - Grille de scores avec badges colorés ### 3. Améliorations d'Affichage #### Stockage ```javascript // Icônes dynamiques selon le type const typeIcon = disk.type === 'SSD' ? '💾' : '💿'; // Badge de santé coloré const healthColor = disk.smart_health === 'PASSED' ? 'var(--color-success)' : disk.smart_health === 'FAILED' ? 'var(--color-danger)' : 'var(--text-secondary)'; ``` #### Mémoire RAM ```javascript // Layout détaillé des barrettes ${layout.map(dimm => `
Slot ${escapeHtml(dimm.slot)}
${dimm.size_mb ? `${Math.round(dimm.size_mb / 1024)} GB` : 'N/A'} ${dimm.type ? `• ${escapeHtml(dimm.type)}` : ''} ${dimm.speed_mhz ? `• ${dimm.speed_mhz} MHz` : ''}
`).join('')} ``` #### CPU Flags ```javascript // Limite à 50 flags pour éviter la surcharge visuelle ${flags.slice(0, 50).map(flag => `${escapeHtml(flag)}` ).join('')} ${flags.length > 50 ? `+${flags.length - 50} autres...` : ''} ``` ## 📊 Structure des Données Utilisées ### Backend Models Les données proviennent du modèle `HardwareSnapshot` : ```python # CPU cpu_vendor, cpu_model, cpu_microarchitecture cpu_cores, cpu_threads cpu_base_freq_ghz, cpu_max_freq_ghz cpu_cache_l1_kb, cpu_cache_l2_kb, cpu_cache_l3_kb cpu_flags (JSON array) cpu_tdp_w # RAM ram_total_mb, ram_used_mb, ram_free_mb, ram_shared_mb ram_slots_total, ram_slots_used ram_ecc (boolean) ram_layout_json (JSON array) - NOUVEAU format détaillé # Storage storage_devices_json (JSON array) # Format: [{name, model, capacity_gb, type, interface, smart_health, temperature_c}] # GPU gpu_vendor, gpu_model, gpu_driver_version gpu_memory_dedicated_mb, gpu_memory_shared_mb gpu_api_support (JSON array) # Network network_interfaces_json (JSON array) # Format: [{name, type, mac, ip, speed_mbps, driver, wake_on_lan}] # Motherboard motherboard_vendor, motherboard_model bios_version, bios_date # OS os_name, os_version, kernel_version architecture, virtualization_type ``` ## 🎨 Styles CSS Utilisés Les styles existants dans `components.css` sont réutilisés : - `.hardware-item` : Conteneur pour chaque information - `.hardware-item-label` : Label du champ - `.hardware-item-value` : Valeur du champ - `.badge`, `.badge-success`, `.badge-muted` : Badges colorés - Grilles responsive avec `grid-template-columns: repeat(auto-fit, minmax(...))` ## 🔄 Workflow d'Affichage ```javascript loadDeviceDetail() ├─ renderDeviceHeader() // Nom, score global, tags ├─ renderMotherboardDetails() // ⚡ Carte mère ├─ renderCPUDetails() // 🔲 CPU ├─ renderMemoryDetails() // 💾 RAM ├─ renderStorageDetails() // 💿 Disques ├─ renderGPUDetails() // 🎮 GPU ├─ renderNetworkDetails() // 🌐 Réseau ├─ renderOSDetails() // 🐧 OS ├─ renderBenchmarkResults() // 📊 Benchmarks ├─ loadBenchmarkHistory() // Historique ├─ loadDocuments() // Documents └─ loadLinks() // Liens ``` ## ✅ Avantages de cette Restructuration ### 1. **Clarté** - Chaque composant hardware a sa propre section - Facile de trouver une information spécifique ### 2. **Détails** - Vue détaillée par disque (sda, sdb, nvme0n1) - Configuration RAM barrette par barrette - Instructions CPU complètes - Interfaces réseau séparées ### 3. **Séparation Hardware / Benchmarks** - Les caractéristiques matérielles sont séparées des performances - Plus logique pour l'utilisateur ### 4. **Extensibilité** - Facile d'ajouter de nouveaux champs - Structure modulaire ### 5. **Responsive** - Grilles adaptatives (auto-fit, minmax) - Fonctionne sur mobile et desktop ## 🧪 Tests Recommandés ### 1. Test visuel ```bash # Ouvrir dans le navigateur http://localhost:8087/device_detail.html?id=1 ``` ### 2. Vérifier l'affichage de : - [x] Carte mère (fabricant, modèle, BIOS) - [x] CPU (cores, threads, cache, flags) - [x] RAM (total, utilisé, layout des barrettes) - [x] Disques (liste détaillée par device) - [x] GPU (si présent) - [x] Réseau (interfaces séparées) - [x] OS (nom, version, kernel) - [x] Benchmarks (scores séparés) ### 3. Tests de robustesse - Device sans GPU → doit afficher "Aucun GPU détecté" - Device sans données SMART → doit gérer gracefully - Layout RAM vide → doit ne pas afficher la section - Flags CPU très nombreux → limité à 50 + compteur ## 📁 Fichiers Modifiés | Fichier | Lignes modifiées | Description | |---------|------------------|-------------| | `frontend/device_detail.html` | 47-119 | Nouvelles sections HTML par composant | | `frontend/js/device_detail.js` | 36-457 | 8 nouvelles fonctions de rendu | ## 🚀 Déploiement Les modifications sont **immédiatement actives** car le frontend est servi par Nginx en mode volume monté. ```bash # Vérifier que le frontend est à jour docker compose restart frontend # Vider le cache navigateur Ctrl+Shift+R (ou Cmd+Shift+R sur Mac) ``` ## 🔗 Références - Modèle backend : [hardware_snapshot.py](backend/app/models/hardware_snapshot.py:11-84) - Ancien affichage : Fonction `renderHardwareSummary()` (supprimée) - Nouveau affichage : 8 fonctions séparées par composant ## 📝 TODO Future - [ ] Ajouter graphiques pour l'historique RAM (usage dans le temps) - [ ] Timeline des températures disques - [ ] Détection automatique des ports USB/PCI/NVMe/SATA (via script bash) - [ ] Affichage des partitions disques - [ ] Comparaison de benchmarks entre devices - [ ] Export des données hardware en PDF --- **Status** : ✅ Restructuration complète terminée **Prochaine action** : Tester l'interface dans le navigateur