vmonitor 0.0.1-alpha.2

A simple and lightweight system monitor
use serde::Serialize;
use sysinfo::{Networks, RefreshKind, System};

#[derive(Serialize, Debug)]
pub struct SystemInfo {
    cpu_usage: f32,
    total_memory: u64,
    used_memory: u64,
}

#[derive(Serialize, Debug)]
pub struct NetworkInfo {
    download: u64,
    upload: u64,
}

pub fn collect_system_info(system: &mut System) -> SystemInfo {
    system.refresh_specifics(RefreshKind::everything());

    SystemInfo {
        cpu_usage: system.global_cpu_usage(),
        total_memory: system.total_memory(),
        used_memory: system.used_memory(),
    }
}

pub fn collect_network_info(networks: &mut Networks) -> NetworkInfo {
    networks.refresh(true);

    let mut download = 0;
    let mut upload = 0;

    for network in networks.list().values() {
        download += network.total_received();
        upload += network.total_transmitted();
    }

    NetworkInfo { download, upload }
}