use sysinfo::{NetworkExt, ProcessExt, System, SystemExt};

fn main() {
    let mut sys = System::new_all();

    // We display the disks:
    println!("=> disk list:");
    for disk in sys.get_disks() {
        println!("{:?}", disk);
    }

    println!("{}", "-".repeat(120));
    // Network data:
    for (interface_name, data) in sys.get_networks() {
        println!("{}: {}/{} B", interface_name, data.get_received(), data.get_transmitted());
    }

    println!("{}", "-".repeat(120));
    // Components temperature:
    for component in sys.get_components() {
        println!("{:?}", component);
    }

    println!("{}", "-".repeat(120));
    // Memory information:
    println!("total memory: {} KB", sys.get_total_memory());
    println!("used memory : {} KB", sys.get_used_memory());
    println!("total swap  : {} KB", sys.get_total_swap());
    println!("used swap   : {} KB", sys.get_used_swap());

    println!("{}", "-".repeat(120));
    // Number of processors
    println!("NB processors: {}", sys.get_processors().len());

    println!("{}", "-".repeat(120));
    // To refresh all system information:
    sys.refresh_all();

    // We show the processes and some of their information:
    for (pid, process) in sys.get_processes() {
        println!("- [{}] {} {:?}", pid, process.name(), process.disk_usage());
        println!("  cmd: {:?}", process.cmd());
        println!("  exe: {:?}", process.exe());
        println!("  env: {:?}", process.environ());
        println!("  cwd: {:?}", process.cwd());
    }
}
