Última atividade 1 month ago

Subcomando dashboard con monitorizacion en tiempo real (capitulo 07)

dashboard.rs Bruto
1use anyhow::Result;
2use sysinfo::Disks;
3
4pub fn ejecutar(watch: u64) -> Result<()> {
5 loop {
6 print!("\x1B[2J\x1B[H");
7
8 let mut system = sysinfo::System::new_all();
9 system.refresh_all();
10 std::thread::sleep(sysinfo::MINIMUM_CPU_UPDATE_INTERVAL);
11
12 let disks = Disks::new_with_refreshed_list();
13
14 println!("╔═══════════════════════════════════════╗");
15 println!("║ DASHBOARD DEL SISTEMA ║");
16 println!("╚═══════════════════════════════════════╝");
17 println!();
18
19 println!("-- CPU --");
20 println!(" Nucleos: {}", system.cpus().len());
21 for (i, cpu) in system.cpus().iter().enumerate() {
22 println!(" CPU {}: {:6.2}%", i, cpu.cpu_usage());
23 }
24 println!(" Global: {:6.2}%", system.global_cpu_usage());
25
26 println!();
27 println!("-- Memoria --");
28 let total_mb = system.total_memory() as f64 / 1024.0 / 1024.0;
29 let usada_mb = system.used_memory() as f64 / 1024.0 / 1024.0;
30 let libre_mb = system.free_memory() as f64 / 1024.0 / 1024.0;
31 println!(" Total: {:.0} MB", total_mb);
32 println!(" Usada: {:.0} MB ({:.1}%)", usada_mb, usada_mb / total_mb * 100.0);
33 println!(" Libre: {:.0} MB", libre_mb);
34
35 println!();
36 println!("-- Discos --");
37 for disk in disks.list() {
38 let total_gb = disk.total_space() as f64 / 1024.0 / 1024.0 / 1024.0;
39 let libre_gb = disk.available_space() as f64 / 1024.0 / 1024.0 / 1024.0;
40 println!(
41 " {:?}: {:.1} GB libres de {:.1} GB ({:.0}% usado)",
42 disk.mount_point(),
43 libre_gb,
44 total_gb,
45 (1.0 - libre_gb / total_gb) * 100.0
46 );
47 }
48
49 if watch == 0 {
50 break;
51 }
52
53 std::thread::sleep(std::time::Duration::from_secs(watch));
54 }
55
56 Ok(())
57}