87 lines
2.6 KiB
Rust
87 lines
2.6 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
use sysinfo::{CpuRefreshKind, Disks, MemoryRefreshKind, Networks, RefreshKind, System};
|
|
|
|
#[derive(Serialize, Deserialize, Clone)]
|
|
pub struct NetworkInterface {
|
|
pub name: String,
|
|
pub received: u64,
|
|
pub transmitted: u64,
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, Clone)]
|
|
pub struct DiskInfo {
|
|
pub device_name: String,
|
|
pub mount_point: String,
|
|
pub total_space: u64,
|
|
pub available_space: u64,
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, Clone)]
|
|
pub struct SystemInfo {
|
|
// Node info
|
|
pub name: String,
|
|
pub host_name: String,
|
|
pub os_version: String,
|
|
pub kernel_version: String,
|
|
|
|
// RAM usage
|
|
pub total_memory: u64,
|
|
pub used_memory: u64,
|
|
pub total_swap: u64,
|
|
pub used_swap: u64,
|
|
|
|
// Multi-elem resources
|
|
pub networks: Vec<NetworkInterface>,
|
|
pub disks: Vec<DiskInfo>,
|
|
|
|
// CPU
|
|
pub cpu_count: usize,
|
|
pub load_average: (f64, f64, f64),
|
|
}
|
|
|
|
pub fn system_info() -> SystemInfo {
|
|
let refresh_kind: RefreshKind = RefreshKind::new()
|
|
.with_cpu(CpuRefreshKind::everything())
|
|
.with_memory(MemoryRefreshKind::everything());
|
|
let mut sys = System::new_with_specifics(refresh_kind);
|
|
sys.refresh_specifics(refresh_kind);
|
|
|
|
let networks = Networks::new_with_refreshed_list()
|
|
.iter()
|
|
.map(|(name, data)| NetworkInterface {
|
|
name: name.clone(),
|
|
received: data.received(),
|
|
transmitted: data.transmitted(),
|
|
})
|
|
.collect();
|
|
|
|
let cpus = sys.cpus();
|
|
let avg = sysinfo::System::load_average();
|
|
|
|
let disks = Disks::new_with_refreshed_list()
|
|
.iter()
|
|
.filter(|disk| !disk.is_removable() && !disk.name().eq_ignore_ascii_case("overlay"))
|
|
.map(|disk| DiskInfo {
|
|
device_name: disk.name().to_str().unwrap_or_default().to_string(),
|
|
mount_point: disk.mount_point().to_str().unwrap_or_default().to_string(),
|
|
total_space: disk.total_space(),
|
|
available_space: disk.available_space(),
|
|
})
|
|
.collect();
|
|
|
|
SystemInfo {
|
|
name: sysinfo::System::name().unwrap_or_default(),
|
|
host_name: sysinfo::System::host_name().unwrap_or_default(),
|
|
os_version: sysinfo::System::os_version().unwrap_or_default(),
|
|
kernel_version: sysinfo::System::kernel_version().unwrap_or_default(),
|
|
cpu_count: cpus.len(),
|
|
total_memory: sys.total_memory(),
|
|
used_memory: sys.used_memory(),
|
|
total_swap: sys.total_swap(),
|
|
used_swap: sys.used_swap(),
|
|
networks,
|
|
disks,
|
|
load_average: (avg.one, avg.five, avg.fifteen),
|
|
}
|
|
}
|