feat: dashboard dynamique + RAM min/max dans popup
- Grid: nouvel agent ajouté en temps réel dès le 1er paquet WebSocket (plus besoin d'actualiser la page) - Grid: ip/status mis à jour depuis chaque metrics_update (adresse DHCP fraîche) - WS: diffuse agent_removed lors de la suppression d'un agent (sync multi-onglets) - Popup détail: min/max RAM sur la période affichée (calculé depuis l'historique déjà chargé) - CSS: classe .chart-minmax pour l'affichage min/max sous le graphe Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+18
-2
@@ -111,8 +111,24 @@ const Grid = (() => {
|
||||
}
|
||||
|
||||
function update(agentId, metrics) {
|
||||
const entry = _agents.get(agentId);
|
||||
if (!entry) return;
|
||||
let entry = _agents.get(agentId);
|
||||
if (!entry) {
|
||||
// Nouvel agent découvert via WebSocket — on crée la tuile à la volée
|
||||
const agent = {
|
||||
id: agentId,
|
||||
hostname: metrics.hostname || agentId,
|
||||
ip: metrics.ip || '',
|
||||
status: metrics.status || 'online',
|
||||
};
|
||||
_agents.set(agentId, { agent, metrics });
|
||||
const grid = document.getElementById('agents-grid');
|
||||
if (grid) grid.insertAdjacentHTML('beforeend', renderTile(agent, metrics));
|
||||
updateStats();
|
||||
return;
|
||||
}
|
||||
// Mettre à jour ip/status depuis les métriques fraîches
|
||||
if (metrics.ip) entry.agent.ip = metrics.ip;
|
||||
if (metrics.status) entry.agent.status = metrics.status;
|
||||
// Conserver les valeurs lentes (disque, smart) quand le paquet ne les contient pas
|
||||
if (entry.metrics) {
|
||||
for (const k of Object.keys(entry.metrics)) {
|
||||
|
||||
Reference in New Issue
Block a user