Fix per-host widget cache to prevent overwriting cached data
Only update widgets when metrics are available for the current host, preventing immediate overwrite of cached widget states when switching hosts.
This commit is contained in:
parent
4b7d08153c
commit
792ad066c9
@ -75,31 +75,34 @@ impl TuiApp {
|
|||||||
self.host_widgets.entry(hostname.to_string()).or_insert_with(HostWidgets::new)
|
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) {
|
pub fn update_metrics(&mut self, metric_store: &MetricStore) {
|
||||||
if let Some(hostname) = self.current_host.clone() {
|
if let Some(hostname) = self.current_host.clone() {
|
||||||
// Get metrics first while hostname is borrowed
|
// Only update widgets if we have metrics for this host
|
||||||
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 all_metrics = metric_store.get_metrics_for_host(&hostname);
|
let all_metrics = metric_store.get_metrics_for_host(&hostname);
|
||||||
let service_metrics: Vec<&Metric> = all_metrics.iter()
|
if !all_metrics.is_empty() {
|
||||||
.filter(|m| m.name.starts_with("service_"))
|
// Get metrics first while hostname is borrowed
|
||||||
.copied()
|
let cpu_metrics = metric_store.get_metrics_for_widget(&hostname, WidgetType::Cpu);
|
||||||
.collect();
|
let memory_metrics = metric_store.get_metrics_for_widget(&hostname, WidgetType::Memory);
|
||||||
let all_backup_metrics: Vec<&Metric> = all_metrics.iter()
|
let service_metrics: Vec<&Metric> = all_metrics.iter()
|
||||||
.filter(|m| m.name.starts_with("backup_"))
|
.filter(|m| m.name.starts_with("service_"))
|
||||||
.copied()
|
.copied()
|
||||||
.collect();
|
.collect();
|
||||||
|
let all_backup_metrics: Vec<&Metric> = all_metrics.iter()
|
||||||
// Now get host widgets and update them
|
.filter(|m| m.name.starts_with("backup_"))
|
||||||
let host_widgets = self.get_or_create_host_widgets(&hostname);
|
.copied()
|
||||||
|
.collect();
|
||||||
host_widgets.cpu_widget.update_from_metrics(&cpu_metrics);
|
|
||||||
host_widgets.memory_widget.update_from_metrics(&memory_metrics);
|
// Now get host widgets and update them
|
||||||
host_widgets.services_widget.update_from_metrics(&service_metrics);
|
let host_widgets = self.get_or_create_host_widgets(&hostname);
|
||||||
host_widgets.backup_widget.update_from_metrics(&all_backup_metrics);
|
|
||||||
|
host_widgets.cpu_widget.update_from_metrics(&cpu_metrics);
|
||||||
host_widgets.last_update = Some(Instant::now());
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user