آخر نشاط 1 month ago

Subcomando sysinfo con informacion del sistema (capitulo 07)

sysinfo_mod.rs خام
1use anyhow::Result;
2
3pub fn ejecutar(formato: &str) -> Result<()> {
4 let mut system = sysinfo::System::new_all();
5 system.refresh_all();
6
7 std::thread::sleep(sysinfo::MINIMUM_CPU_UPDATE_INTERVAL);
8
9 let hostname = sysinfo::System::host_name().unwrap_or_default();
10 let kernel = sysinfo::System::kernel_version().unwrap_or_default();
11 let os_version = sysinfo::System::os_version().unwrap_or_default();
12 let uptime_secs = sysinfo::System::uptime();
13
14 match formato {
15 "json" => {
16 let info = serde_json::json!({
17 "hostname": hostname,
18 "kernel": kernel,
19 "os": os_version,
20 "cpus": system.cpus().len(),
21 "memory_total_gb": system.total_memory() as f64 / 1024.0 / 1024.0 / 1024.0,
22 "memory_used_gb": system.used_memory() as f64 / 1024.0 / 1024.0 / 1024.0,
23 "memory_percent": system.used_memory() as f64 / system.total_memory() as f64 * 100.0,
24 "uptime_seconds": uptime_secs,
25 });
26 println!("{}", serde_json::to_string_pretty(&info)?);
27 }
28 _ => {
29 println!("-- Informacion del sistema --");
30 println!(" Hostname: {}", hostname);
31 println!(" Kernel: {}", kernel);
32 println!(" SO: {}", os_version);
33 println!(
34 " CPU(s): {} nucleos ({}%)",
35 system.cpus().len(),
36 system.global_cpu_usage()
37 );
38 println!(
39 " Memoria: {:.2} GB / {:.2} GB ({:.1}%)",
40 system.used_memory() as f64 / 1024.0 / 1024.0 / 1024.0,
41 system.total_memory() as f64 / 1024.0 / 1024.0 / 1024.0,
42 system.used_memory() as f64 / system.total_memory() as f64 * 100.0
43 );
44 println!(
45 " Swap: {:.2} GB / {:.2} GB",
46 system.used_swap() as f64 / 1024.0 / 1024.0 / 1024.0,
47 system.total_swap() as f64 / 1024.0 / 1024.0 / 1024.0
48 );
49 println!(" Activo: {} horas", uptime_secs / 3600);
50 println!("------------------------------");
51 }
52 }
53
54 Ok(())
55}