Update services widget memory display and formatting
Improve services widget to show consistent usage/total format for both RAM and Disk columns, using system totals when no service quotas exist. Changes: - Change column header from "Memory (GB)" to "RAM (GB)" - Remove "GB" units from memory values (units now in header) - Add system memory total detection from /proc/meminfo - Use system memory total as default quota for services without limits - Services now show "5.2/32.0" format for both RAM and disk Both RAM and Disk columns now consistently display usage/quota format where quota is either service-specific limit or system total capacity.
This commit is contained in:
parent
630d2ff674
commit
4be1223a8d
@ -286,6 +286,30 @@ impl ServiceCollector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async fn get_system_memory_total(&self) -> Result<f32, CollectorError> {
|
||||||
|
// Read /proc/meminfo to get total system memory
|
||||||
|
let meminfo = fs::read_to_string("/proc/meminfo")
|
||||||
|
.await
|
||||||
|
.map_err(|e| CollectorError::IoError {
|
||||||
|
message: e.to_string(),
|
||||||
|
})?;
|
||||||
|
|
||||||
|
for line in meminfo.lines() {
|
||||||
|
if let Some(mem_total_line) = line.strip_prefix("MemTotal:") {
|
||||||
|
let parts: Vec<&str> = mem_total_line.trim().split_whitespace().collect();
|
||||||
|
if let Some(mem_kb_str) = parts.first() {
|
||||||
|
if let Ok(mem_kb) = mem_kb_str.parse::<f32>() {
|
||||||
|
return Ok(mem_kb / 1024.0); // Convert KB to MB
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Err(CollectorError::ParseError {
|
||||||
|
message: "Could not parse total memory".to_string(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
async fn get_disk_usage(&self) -> Result<DiskUsage, CollectorError> {
|
async fn get_disk_usage(&self) -> Result<DiskUsage, CollectorError> {
|
||||||
let output = Command::new("/run/current-system/sw/bin/df")
|
let output = Command::new("/run/current-system/sw/bin/df")
|
||||||
.args(["-BG", "--output=size,used,avail", "/"])
|
.args(["-BG", "--output=size,used,avail", "/"])
|
||||||
@ -1185,12 +1209,18 @@ impl Collector for ServiceCollector {
|
|||||||
used_gb: 0.0,
|
used_gb: 0.0,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Set disk quota to system total capacity for services that don't have specific quotas
|
// Get system memory total for services without memory quotas
|
||||||
|
let system_memory_total_mb = self.get_system_memory_total().await.unwrap_or(8192.0); // Default 8GB
|
||||||
|
|
||||||
|
// Set quotas to system totals for services that don't have specific quotas
|
||||||
let system_disk_capacity_gb = disk_usage.total_capacity_gb;
|
let system_disk_capacity_gb = disk_usage.total_capacity_gb;
|
||||||
for service in &mut services {
|
for service in &mut services {
|
||||||
if service.disk_quota_gb == 0.0 {
|
if service.disk_quota_gb == 0.0 {
|
||||||
service.disk_quota_gb = system_disk_capacity_gb;
|
service.disk_quota_gb = system_disk_capacity_gb;
|
||||||
}
|
}
|
||||||
|
if service.memory_quota_mb == 0.0 {
|
||||||
|
service.memory_quota_mb = system_memory_total_mb;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate overall services status
|
// Calculate overall services status
|
||||||
|
|||||||
@ -50,7 +50,7 @@ fn render_metrics(
|
|||||||
let mut data = WidgetData::new(
|
let mut data = WidgetData::new(
|
||||||
title,
|
title,
|
||||||
Some(WidgetStatus::new(widget_status)),
|
Some(WidgetStatus::new(widget_status)),
|
||||||
vec!["Service".to_string(), "Memory (GB)".to_string(), "CPU".to_string(), "Disk".to_string()]
|
vec!["Service".to_string(), "RAM (GB)".to_string(), "CPU".to_string(), "Disk".to_string()]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -142,11 +142,11 @@ fn format_memory_value(used: f32, quota: f32) -> String {
|
|||||||
let quota_gb = quota / 1000.0;
|
let quota_gb = quota / 1000.0;
|
||||||
|
|
||||||
if quota > 0.05 {
|
if quota > 0.05 {
|
||||||
format!("{:.1}/{:.1} GB", used_gb, quota_gb)
|
format!("{:.1}/{:.1}", used_gb, quota_gb)
|
||||||
} else if used > 0.05 {
|
} else if used > 0.05 {
|
||||||
format!("{:.1} GB", used_gb)
|
format!("{:.1}", used_gb)
|
||||||
} else {
|
} else {
|
||||||
"0.0 GB".to_string()
|
"0.0".to_string()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user