ruvector_memopt/monitor/
dashboard.rs

1//! Simple text-based dashboard
2
3use 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}