From 4aae5013b39116434a7037cd80c78689c4d6882f Mon Sep 17 00:00:00 2001 From: Max P Date: Tue, 9 Jun 2026 23:50:51 +0200 Subject: [PATCH] Show Unraid cache and user storage --- crates/aster-webui/src/main.rs | 65 ++++++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 10 deletions(-) diff --git a/crates/aster-webui/src/main.rs b/crates/aster-webui/src/main.rs index d49836c..f57c051 100644 --- a/crates/aster-webui/src/main.rs +++ b/crates/aster-webui/src/main.rs @@ -160,6 +160,12 @@ struct SystemView { disk_usage_percent: String, disk_used: String, disk_total: String, + cache_usage_percent: String, + cache_used: String, + cache_total: String, + user_usage_percent: String, + user_used: String, + user_total: String, cpu_count: usize, process_count: usize, uptime: String, @@ -550,6 +556,27 @@ async fn build_state_response(state: &AppState) -> Result { } fn collect_system_view() -> SystemView { + fn mount_usage(disks: &Disks, mount_point: &str) -> (String, String, String) { + disks + .iter() + .find(|disk| disk.mount_point() == std::path::Path::new(mount_point)) + .map(|disk| { + let total = disk.total_space(); + let used = total.saturating_sub(disk.available_space()); + let usage_percent = if total == 0 { + 0.0 + } else { + used as f64 / total as f64 * 100.0 + }; + ( + format!("{usage_percent:.0}"), + format_bytes(used), + format_bytes(total), + ) + }) + .unwrap_or_else(|| ("n/a".into(), "n/a".into(), "n/a".into())) + } + let mut sys = System::new_all(); sys.refresh_all(); @@ -570,7 +597,16 @@ fn collect_system_view() -> SystemView { let mut components = Components::new(); components.refresh(false); + let (cache_usage_percent, cache_used, cache_total) = mount_usage(&disks, "/mnt/cache"); + let (user_usage_percent, user_used, user_total) = mount_usage(&disks, "/mnt/user"); + SystemView { + cache_usage_percent, + cache_used, + cache_total, + user_usage_percent, + user_used, + user_total, cpu_usage_percent: format!("{:.1}", sys.global_cpu_usage()), load_avg_one: format!("{:.2}", load_avg.one), load_avg_five: format!("{:.2}", load_avg.five), @@ -847,8 +883,11 @@ fn render_system_panel() -> RgbImage { 640, 106, "Storage", - format!("{} %", system.disk_usage_percent), - format!("{} / {}", system.disk_used, system.disk_total), + format!("C {}% U {}%", system.cache_usage_percent, system.user_usage_percent), + format!( + "/mnt/cache {} / {} | /mnt/user {} / {}", + system.cache_used, system.cache_total, system.user_used, system.user_total + ), Rgb([255, 199, 115]), ), ( @@ -897,7 +936,13 @@ fn overlay_system_specs(canvas: &mut RgbImage) { 34, 28, 22.0, - &format!("{host_name} CPU {}% RAM {}% Disk {}%", system.cpu_usage_percent, system.mem_usage_percent, system.disk_usage_percent), + &format!( + "{host_name} CPU {}% RAM {}% C {}% U {}%", + system.cpu_usage_percent, + system.mem_usage_percent, + system.cache_usage_percent, + system.user_usage_percent + ), ); draw_text_line( canvas, @@ -926,11 +971,11 @@ fn overlay_system_specs(canvas: &mut RgbImage) { 320, 18.0, &format!( - "Mem {} / {} Swap {} / {} Proc {} CPU {} GPU {}", - system.mem_used, - system.mem_total, - system.swap_used, - system.swap_total, + "Cache {} / {} User {} / {} Proc {} CPU {} GPU {}", + system.cache_used, + system.cache_total, + system.user_used, + system.user_total, system.process_count, system.temperature_cpu.as_deref().unwrap_or("-"), system.temperature_gpu.as_deref().unwrap_or("-"), @@ -1523,8 +1568,8 @@ const INDEX_HTML: &str = r##" el.cpuMetaValue.textContent = `Load ${state.system.load_avg_one || "-"} / ${state.system.load_avg_five || "-"} / ${state.system.load_avg_fifteen || "-"}`; el.memUsageValue.textContent = `${state.system.mem_usage_percent || "-"} %`; el.memMetaValue.textContent = `${state.system.mem_used || "-"} / ${state.system.mem_total || "-"}`; - el.diskUsageValue.textContent = `${state.system.disk_usage_percent || "-"} %`; - el.diskMetaValue.textContent = `${state.system.disk_used || "-"} / ${state.system.disk_total || "-"}`; + el.diskUsageValue.innerHTML = `/mnt/cache ${state.system.cache_usage_percent || "-"}%
/mnt/user ${state.system.user_usage_percent || "-"}%`; + el.diskMetaValue.textContent = `${state.system.cache_used || "-"} / ${state.system.cache_total || "-"} | ${state.system.user_used || "-"} / ${state.system.user_total || "-"}`; el.swapUsageValue.textContent = `${state.system.swap_usage_percent || "-"} %`; el.swapMetaValue.textContent = `${state.system.swap_used || "-"} / ${state.system.swap_total || "-"}`; el.loadValue.textContent = `${state.system.cpu_count || "-"} CPU / ${state.system.process_count || "-"} proc`;