7.4 KiB
7.4 KiB
Plan de Refactoring Frontend
✅ Action 3.1 - Extraction des fonctions communes (EN COURS)
Fichiers créés
- ✅
frontend/js/hardware-renderer.js- Module commun de rendu hardware - ✅ Intégré dans
devices.htmletdevice_detail.html
Fonctions disponibles dans HardwareRenderer
Le module window.HardwareRenderer expose les fonctions suivantes :
renderMotherboardDetails(snapshot)- Carte mèrerenderCPUDetails(snapshot)- Processeur (avec multi-CPU)renderMemoryDetails(snapshot, deviceData)- Mémoire (barres + slots)renderStorageDetails(snapshot)- StockagerenderGPUDetails(snapshot)- Carte graphiquerenderNetworkDetails(snapshot)- RéseaurenderOSDetails(snapshot)- Système d'exploitationrenderProxmoxDetails(snapshot)- Proxmox (nouveau)renderAudioDetails(snapshot)- Audio (nouveau)
Prochaines étapes
Option 1 : Refactorisation progressive (RECOMMANDÉ)
Étape 1 : Modifier device_detail.js pour utiliser HardwareRenderer
- Remplacer chaque
renderXxxDetails()locale par un appel àHardwareRenderer.renderXxxDetails() - Exemple :
// AVANT function renderMotherboardDetails() { const snapshot = currentDevice.last_hardware_snapshot; const container = document.getElementById('motherboardDetails'); // ... 25 lignes de code ... container.innerHTML = html; } // APRÈS function renderMotherboardDetails() { const snapshot = currentDevice.last_hardware_snapshot; const container = document.getElementById('motherboardDetails'); container.innerHTML = HardwareRenderer.renderMotherboardDetails(snapshot); }
Étape 2 : Modifier devices.js pour utiliser HardwareRenderer
- Même principe : remplacer les fonctions locales par des appels au module
- Les fonctions
renderXxxDetails()dans devices.js retournent déjà du HTML (pas de changement majeur)
Étape 3 : Supprimer les fonctions dupliquées
- Une fois les deux fichiers migrés, supprimer les anciennes implémentations
Option 2 : Migration immédiate (RISQUÉ)
Remplacer toutes les fonctions d'un coup dans les deux fichiers. Risque d'introduire des bugs.
Modifications à apporter dans device_detail.js
Fonctions à remplacer
| Ligne | Fonction actuelle | Action |
|---|---|---|
| 91 | renderMotherboardDetails() |
Appeler HardwareRenderer.renderMotherboardDetails(snapshot) |
| 127 | renderCPUDetails() |
Appeler HardwareRenderer.renderCPUDetails(snapshot) |
| 185 | renderMemoryDetails() |
Appeler HardwareRenderer.renderMemoryDetails(snapshot, currentDevice) |
| 260 | renderStorageDetails() |
Appeler HardwareRenderer.renderStorageDetails(snapshot) |
| 454 | renderGPUDetails() |
Appeler HardwareRenderer.renderGPUDetails(snapshot) |
| 612 | renderNetworkDetails() |
Appeler HardwareRenderer.renderNetworkDetails(snapshot) |
| 513 | renderOSDetails() |
Appeler HardwareRenderer.renderOSDetails(snapshot) |
Nouvelles fonctions à ajouter
function renderProxmoxDetails() {
const snapshot = currentDevice.last_hardware_snapshot;
const container = document.getElementById('proxmoxDetails');
if (!container) return;
container.innerHTML = HardwareRenderer.renderProxmoxDetails(snapshot);
}
function renderAudioDetails() {
const snapshot = currentDevice.last_hardware_snapshot;
const container = document.getElementById('audioDetails');
if (!container) return;
container.innerHTML = HardwareRenderer.renderAudioDetails(snapshot);
}
Puis ajouter les sections dans le HTML :
<!-- Après la section Network -->
<div class="card" id="proxmoxSection" style="display: none;">
<div class="card-header">🔧 Proxmox VE</div>
<div class="card-body">
<div id="proxmoxDetails">
<div class="loading">Chargement...</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">🔊 Audio</div>
<div class="card-body">
<div id="audioDetails">
<div class="loading">Chargement...</div>
</div>
</div>
</div>
Modifications à apporter dans devices.js
Fonctions à remplacer
| Ligne | Fonction actuelle | Action |
|---|---|---|
| 649 | renderMotherboardDetails(snapshot) |
Appeler HardwareRenderer.renderMotherboardDetails(snapshot) |
| 681 | renderCPUDetails(snapshot) |
Appeler HardwareRenderer.renderCPUDetails(snapshot) |
| 735 | renderMemoryDetails(snapshot) |
Adapter appel HardwareRenderer.renderMemoryDetails(snapshot, currentDevice) |
| 791 | renderStorageDetails(snapshot) |
Appeler HardwareRenderer.renderStorageDetails(snapshot) |
| 915 | renderGPUDetails(snapshot) |
Appeler HardwareRenderer.renderGPUDetails(snapshot) |
| 942 | renderOSDetails(snapshot) |
Appeler HardwareRenderer.renderOSDetails(snapshot) |
| 1525 | renderNetworkBlock(snapshot, bench) |
Adapter pour utiliser HardwareRenderer.renderNetworkDetails(snapshot) |
Exemple de remplacement
// AVANT (ligne 649)
function renderMotherboardDetails(snapshot) {
if (!snapshot) {
return '<p style="color: var(--text-muted); text-align: center; padding: 2rem;">Aucune information disponible</p>';
}
const cleanValue = (val) => {
if (!val || (typeof val === 'string' && val.trim() === '')) return 'N/A';
return val;
};
const items = [
{ label: 'Fabricant', value: cleanValue(snapshot.motherboard_vendor) },
// ... 20 lignes ...
];
return `<div style="display: grid; ...">...</div>`;
}
// APRÈS
function renderMotherboardDetails(snapshot) {
return HardwareRenderer.renderMotherboardDetails(snapshot);
}
Gain : 649 → 681 (32 lignes) deviennent 3 lignes
Estimation du gain de lignes
| Fichier | Lignes actuelles | Lignes après refacto | Gain |
|---|---|---|---|
devices.js |
1953 | ~1600 | -353 |
device_detail.js |
1003 | ~700 | -303 |
| TOTAL | 2956 | 2300 | -656 lignes |
Tests à effectuer après refactoring
Tests visuels (devices.html)
- Ouvrir devices.html
- Sélectionner un device
- Vérifier chaque section :
- ✅ Motherboard : affiche bien fabricant, modèle, BIOS, etc.
- ✅ CPU : affiche modèle, cores, threads, caches, flags
- ✅ Mémoire : barres RAM/SWAP + slots avec détails
- ✅ Stockage : liste des disques avec SMART
- ✅ GPU : fabricant, modèle, VRAM
- ✅ Réseau : liste des interfaces
- ✅ OS : nom, version, kernel, uptime
- ✅ Proxmox : affiche si détecté (host/guest)
- ✅ Audio : matériel + logiciels
Tests visuels (device_detail.html)
- Ouvrir device_detail.html?id=X
- Vérifier les mêmes sections
- Vérifier que les popups/tooltips fonctionnent
Tests fonctionnels
- Édition des champs (hostname, description, etc.)
- Upload d'images/PDFs
- Ajout/suppression de tags
- Ajout/suppression de liens
- Suppression de device
Tests de régression
- Vérifier que le score global s'affiche (étoiles)
- Vérifier que les images s'affichent en grid
- Vérifier que les barres mémoire ont les bons %
- Vérifier le multi-CPU (si disponible)
🎯 Recommandation
Je recommande de faire la migration progressive (Option 1) :
- ✅ Créer
hardware-renderer.js(FAIT) - ✅ Intégrer dans les HTML (FAIT)
- SUIVANT : Migrer
device_detail.js(plus simple, fichier plus petit) - APRÈS : Migrer
devices.js - TESTER chaque étape
Cette approche réduit les risques et permet de valider chaque changement avant de passer au suivant.
Dernière mise à jour : 2026-01-11