use anyhow::Result; pub fn ejecutar(formato: &str) -> Result<()> { let mut system = sysinfo::System::new_all(); system.refresh_all(); std::thread::sleep(sysinfo::MINIMUM_CPU_UPDATE_INTERVAL); let hostname = sysinfo::System::host_name().unwrap_or_default(); let kernel = sysinfo::System::kernel_version().unwrap_or_default(); let os_version = sysinfo::System::os_version().unwrap_or_default(); let uptime_secs = sysinfo::System::uptime(); match formato { "json" => { let info = serde_json::json!({ "hostname": hostname, "kernel": kernel, "os": os_version, "cpus": system.cpus().len(), "memory_total_gb": system.total_memory() as f64 / 1024.0 / 1024.0 / 1024.0, "memory_used_gb": system.used_memory() as f64 / 1024.0 / 1024.0 / 1024.0, "memory_percent": system.used_memory() as f64 / system.total_memory() as f64 * 100.0, "uptime_seconds": uptime_secs, }); println!("{}", serde_json::to_string_pretty(&info)?); } _ => { println!("-- Informacion del sistema --"); println!(" Hostname: {}", hostname); println!(" Kernel: {}", kernel); println!(" SO: {}", os_version); println!( " CPU(s): {} nucleos ({}%)", system.cpus().len(), system.global_cpu_usage() ); println!( " Memoria: {:.2} GB / {:.2} GB ({:.1}%)", system.used_memory() as f64 / 1024.0 / 1024.0 / 1024.0, system.total_memory() as f64 / 1024.0 / 1024.0 / 1024.0, system.used_memory() as f64 / system.total_memory() as f64 * 100.0 ); println!( " Swap: {:.2} GB / {:.2} GB", system.used_swap() as f64 / 1024.0 / 1024.0 / 1024.0, system.total_swap() as f64 / 1024.0 / 1024.0 / 1024.0 ); println!(" Activo: {} horas", uptime_secs / 3600); println!("------------------------------"); } } Ok(()) }