create system object

This commit is contained in:
jb-alvarado 2023-11-06 22:00:16 +01:00
parent 22fb1d78d2
commit 22087d8cd4

View File

@ -10,7 +10,7 @@ pub fn byte_convert(num: f64) -> String {
let num = num.abs(); let num = num.abs();
let units = ["B", "kiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"]; let units = ["B", "kiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
if num < 1_f64 { if num < 1_f64 {
return format!("{}{} {}", negative, num, "B"); return format!("{negative}{num} B");
} }
let delimiter = 1024_f64; let delimiter = 1024_f64;
let exponent = cmp::min( let exponent = cmp::min(
@ -22,7 +22,68 @@ pub fn byte_convert(num: f64) -> String {
.unwrap() .unwrap()
* 1_f64; * 1_f64;
let unit = units[exponent as usize]; let unit = units[exponent as usize];
format!("{}{} {}", negative, pretty_bytes, unit) format!("{negative}{pretty_bytes} {unit}")
}
#[derive(Debug)]
struct Cpu {
cores: f32,
usage: f32,
}
#[derive(Debug, Default)]
struct Disk {
name: String,
total: String,
used: String,
}
#[derive(Debug)]
struct Load {
one: f64,
five: f64,
fifteen: f64,
}
#[derive(Debug)]
struct Memory {
total: String,
used: String,
free: String,
}
#[derive(Debug, Default)]
struct Network {
name: String,
current_in: String,
total_in: String,
current_out: String,
total_out: String,
}
#[derive(Debug)]
struct MySystem {
name: Option<String>,
kernel: Option<String>,
version: Option<String>,
}
#[derive(Debug)]
struct Swap {
total: String,
used: String,
free: String,
}
#[derive(Debug)]
struct SystemStat {
cpu: Cpu,
disk: Disk,
load: Load,
memory: Memory,
network: Network,
swap: Swap,
system: MySystem,
} }
fn main() { fn main() {
@ -32,65 +93,78 @@ fn main() {
sys.refresh_all(); sys.refresh_all();
let mut usage = 0.0; let mut usage = 0.0;
let count = sys.cpus().len() as f32; let cores = sys.cpus().len() as f32;
for cpu in sys.cpus() { for cpu in sys.cpus() {
usage += cpu.cpu_usage(); usage += cpu.cpu_usage();
} }
print!("{esc}[2J{esc}[1;1H", esc = 27 as char); let my_cpu = Cpu {
cores,
usage: usage * cores / 100.0,
};
println!("System name: {:?}", sys.name()); let mut my_disk = Disk::default();
println!("System kernel version: {:?}", sys.kernel_version());
println!("System OS version: {:?}\n", sys.os_version());
println!("total memory: {}", byte_convert(sys.total_memory() as f64));
println!("used memory : {}", byte_convert(sys.used_memory() as f64));
println!(
"free memory : {}\n",
byte_convert((sys.total_memory() - sys.used_memory()) as f64)
);
println!("total swap : {}", byte_convert(sys.total_swap() as f64));
println!("used swap : {}", byte_convert(sys.used_swap() as f64));
println!(
"free swap : {}\n",
byte_convert((sys.total_swap() - sys.used_swap()) as f64)
);
for disk in sys.disks() { for disk in sys.disks() {
if disk.mount_point() == Path::new("/") { if disk.mount_point().to_string_lossy().len() > 1
println!( && Path::new("/home/jb/Videos").starts_with(disk.mount_point())
"disk: {:?} | available space {}", {
disk.name(), my_disk.name = disk.name().to_string_lossy().to_string();
byte_convert(disk.available_space() as f64), my_disk.total = byte_convert(disk.total_space() as f64);
); my_disk.used = byte_convert(disk.available_space() as f64);
} }
} }
println!();
let load_avg = sys.load_average(); let load_avg = sys.load_average();
let my_load = Load {
one: load_avg.one,
five: load_avg.five,
fifteen: load_avg.fifteen,
};
let my_memory = Memory {
total: byte_convert(sys.total_memory() as f64),
used: byte_convert(sys.used_memory() as f64),
free: byte_convert((sys.total_memory() - sys.used_memory()) as f64),
};
let mut my_network = Network::default();
for (interface_name, data) in sys.networks() { for (interface_name, data) in sys.networks() {
if interface_name == "wlp5s0" { if interface_name == "wlp5s0" {
println!( my_network.name = interface_name.clone();
"{}: (in / total) {} / {} | (out / total) {} / {}", my_network.current_in = byte_convert(data.received() as f64);
interface_name, my_network.total_in = byte_convert(data.total_received() as f64);
byte_convert(data.received() as f64), my_network.current_out = byte_convert(data.transmitted() as f64);
byte_convert(data.total_received() as f64), my_network.total_out = byte_convert(data.total_transmitted() as f64);
byte_convert(data.transmitted() as f64),
byte_convert(data.total_transmitted() as f64),
);
} }
} }
println!(); let my_swap = Swap {
total: byte_convert(sys.total_swap() as f64),
used: byte_convert(sys.used_swap() as f64),
free: byte_convert((sys.total_swap() - sys.used_swap()) as f64),
};
println!("CPU Usage: {:.2}%", usage * count / 100.0); let my_system = MySystem {
println!( name: sys.name(),
"Load: {}% {}% {}%\n", kernel: sys.kernel_version(),
load_avg.one, load_avg.five, load_avg.fifteen version: sys.os_version(),
); };
let system_stat = SystemStat {
system: my_system,
memory: my_memory,
swap: my_swap,
disk: my_disk,
cpu: my_cpu,
load: my_load,
network: my_network,
};
print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
println!("{system_stat:#?}");
sleep(Duration::from_secs(1)) sleep(Duration::from_secs(1))
} }