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}