Skip to main content

oled_notifier/
stats.rs

1use systemstat::data::IpAddr;
2use systemstat::data::LoadAverage;
3use systemstat::data::Memory;
4use systemstat::data::Network;
5
6use std::collections::BTreeMap;
7use std::io::Result;
8use std::time::Duration;
9
10pub fn format_load_average(avg: Result<LoadAverage>) -> String {
11    match avg {
12        Ok(loadavg) => format!(
13            "{:.0}% {:.0}% {:.0}%",
14            loadavg.one * 100.0,
15            loadavg.five * 100.0,
16            loadavg.fifteen * 100.0
17        ),
18        Err(x) => format!("CPU: error: {x}"),
19    }
20}
21
22pub fn format_memory(mem: Result<Memory>) -> String {
23    match mem {
24        Ok(mem) => format!(
25            "{} / {} MB",
26            mem.free.as_u64() / (1024 * 1024),
27            mem.total.as_u64() / (1024 * 1024),
28        ),
29        Err(x) => format!("\nMem: error: {x}"),
30    }
31}
32
33pub fn format_networks(net: Result<BTreeMap<String, Network>>) -> String {
34    match net {
35        Ok(netifs) => {
36            if let Some(netif) = netifs
37                .values()
38                .find(|net| !net.name.starts_with("lo") && !net.name.starts_with("docker"))
39            {
40                if let Some(addr) = netif.addrs.first() {
41                    match addr.addr {
42                        IpAddr::V4(v4) => format!("{v4}"),
43                        _ => "Net: unknown".to_string(),
44                    }
45                } else {
46                    "Net: no addr".to_string()
47                }
48            } else {
49                "Net: no found".to_string()
50            }
51        }
52        Err(x) => format!("Net: error: {x}"),
53    }
54}
55
56pub fn format_uptime(up: Result<Duration>) -> String {
57    match up {
58        Ok(uptime) => format!("{}", crate::duration::FormattedDuration::new(uptime)),
59        Err(x) => format!("Up: error: {x}"),
60    }
61}