Show Unraid cache and user storage
Rust / Clippy, Rustfmt, Tests (push) Waiting to run
Rust / Linux-x64 build (push) Blocked by required conditions
Rust / GitHub release (push) Blocked by required conditions

This commit is contained in:
2026-06-09 23:50:51 +02:00
parent f9bfd7639c
commit 4aae5013b3
+55 -10
View File
@@ -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<StateResponse> {
}
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##"<!DOCTYPE html>
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 || "-"}%<br>/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`;