ruvector_memopt/monitor/
dashboard.rs1use crate::windows::memory::MemoryStatus;
4use crate::bench::metrics::MetricsSummary;
5
6pub fn render_dashboard(status: &MemoryStatus, metrics: &MetricsSummary) -> String {
7 let bar_width = 40;
8 let filled = (status.memory_load_percent as usize * bar_width) / 100;
9 let bar: String = format!(
10 "[{}{}]",
11 "#".repeat(filled),
12 "-".repeat(bar_width - filled)
13 );
14
15 format!(
16r#"
17================ RuVector MemOpt Dashboard ================
18
19Memory Usage: {} {}%
20Total: {:>8.0} MB
21Available: {:>8.0} MB
22Used: {:>8.0} MB
23
24-------------------- Optimization Stats --------------------
25Total Freed: {:>8.1} MB
26Optimizations: {:>8}
27Avg Freed: {:>8.1} MB
28Avg Duration: {:>8} ms
29Uptime: {:>8} sec
30
31Status: {}
32============================================================
33"#,
34 bar,
35 status.memory_load_percent,
36 status.total_physical_mb,
37 status.available_physical_mb,
38 status.used_physical_mb(),
39 metrics.total_freed_mb,
40 metrics.total_optimizations,
41 metrics.avg_freed_mb,
42 metrics.avg_duration_ms,
43 metrics.uptime_secs,
44 if status.is_critical() { "CRITICAL" }
45 else if status.is_high_pressure() { "HIGH PRESSURE" }
46 else { "OK" }
47 )
48}