diff --git a/dashboard/src/ui/mod.rs b/dashboard/src/ui/mod.rs index 46ff51b..0ee3553 100644 --- a/dashboard/src/ui/mod.rs +++ b/dashboard/src/ui/mod.rs @@ -75,31 +75,34 @@ impl TuiApp { self.host_widgets.entry(hostname.to_string()).or_insert_with(HostWidgets::new) } - /// Update widgets with metrics from store + /// Update widgets with metrics from store (only for current host) pub fn update_metrics(&mut self, metric_store: &MetricStore) { if let Some(hostname) = self.current_host.clone() { - // Get metrics first while hostname is borrowed - let cpu_metrics = metric_store.get_metrics_for_widget(&hostname, WidgetType::Cpu); - let memory_metrics = metric_store.get_metrics_for_widget(&hostname, WidgetType::Memory); + // Only update widgets if we have metrics for this host let all_metrics = metric_store.get_metrics_for_host(&hostname); - let service_metrics: Vec<&Metric> = all_metrics.iter() - .filter(|m| m.name.starts_with("service_")) - .copied() - .collect(); - let all_backup_metrics: Vec<&Metric> = all_metrics.iter() - .filter(|m| m.name.starts_with("backup_")) - .copied() - .collect(); - - // Now get host widgets and update them - let host_widgets = self.get_or_create_host_widgets(&hostname); - - host_widgets.cpu_widget.update_from_metrics(&cpu_metrics); - host_widgets.memory_widget.update_from_metrics(&memory_metrics); - host_widgets.services_widget.update_from_metrics(&service_metrics); - host_widgets.backup_widget.update_from_metrics(&all_backup_metrics); - - host_widgets.last_update = Some(Instant::now()); + if !all_metrics.is_empty() { + // Get metrics first while hostname is borrowed + let cpu_metrics = metric_store.get_metrics_for_widget(&hostname, WidgetType::Cpu); + let memory_metrics = metric_store.get_metrics_for_widget(&hostname, WidgetType::Memory); + let service_metrics: Vec<&Metric> = all_metrics.iter() + .filter(|m| m.name.starts_with("service_")) + .copied() + .collect(); + let all_backup_metrics: Vec<&Metric> = all_metrics.iter() + .filter(|m| m.name.starts_with("backup_")) + .copied() + .collect(); + + // Now get host widgets and update them + let host_widgets = self.get_or_create_host_widgets(&hostname); + + host_widgets.cpu_widget.update_from_metrics(&cpu_metrics); + host_widgets.memory_widget.update_from_metrics(&memory_metrics); + host_widgets.services_widget.update_from_metrics(&service_metrics); + host_widgets.backup_widget.update_from_metrics(&all_backup_metrics); + + host_widgets.last_update = Some(Instant::now()); + } } }