cleanup
This commit is contained in:
parent
c77049776d
commit
954a841fd2
@ -1,176 +0,0 @@
|
|||||||
use std::{
|
|
||||||
path::Path,
|
|
||||||
sync::{Arc, Mutex},
|
|
||||||
thread::sleep,
|
|
||||||
time::Duration,
|
|
||||||
};
|
|
||||||
|
|
||||||
use lazy_static::lazy_static;
|
|
||||||
use local_ip_address::list_afinet_netifas;
|
|
||||||
use serde::Serialize;
|
|
||||||
use sysinfo::{CpuExt, DiskExt, NetworkExt, System, SystemExt};
|
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
pub static ref SYS: Arc<Mutex<System>> = Arc::new(Mutex::new(System::new_all()));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct Cpu {
|
|
||||||
pub cores: f32,
|
|
||||||
pub usage: f32,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Default, Serialize)]
|
|
||||||
pub struct Storage {
|
|
||||||
pub path: String,
|
|
||||||
pub total: u64,
|
|
||||||
pub used: u64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct Load {
|
|
||||||
pub one: f64,
|
|
||||||
pub five: f64,
|
|
||||||
pub fifteen: f64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct Memory {
|
|
||||||
pub total: u64,
|
|
||||||
pub used: u64,
|
|
||||||
pub free: u64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Default, Serialize)]
|
|
||||||
pub struct Network {
|
|
||||||
pub name: String,
|
|
||||||
pub current_in: u64,
|
|
||||||
pub total_in: u64,
|
|
||||||
pub current_out: u64,
|
|
||||||
pub total_out: u64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct MySystem {
|
|
||||||
pub name: Option<String>,
|
|
||||||
pub kernel: Option<String>,
|
|
||||||
pub version: Option<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct Swap {
|
|
||||||
pub total: u64,
|
|
||||||
pub used: u64,
|
|
||||||
pub free: u64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct SystemStat {
|
|
||||||
pub cpu: Cpu,
|
|
||||||
pub load: Load,
|
|
||||||
pub memory: Memory,
|
|
||||||
pub network: Network,
|
|
||||||
pub storage: Storage,
|
|
||||||
pub swap: Swap,
|
|
||||||
pub system: MySystem,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn stat() -> SystemStat {
|
|
||||||
let mut sys = SYS.lock().unwrap();
|
|
||||||
let network_interfaces = list_afinet_netifas().unwrap();
|
|
||||||
let mut usage = 0.0;
|
|
||||||
let mut interfaces = vec![];
|
|
||||||
|
|
||||||
for (name, ip) in network_interfaces.iter() {
|
|
||||||
if !ip.is_loopback() {
|
|
||||||
interfaces.push((name, ip))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
interfaces.dedup_by(|a, b| a.0 == b.0);
|
|
||||||
|
|
||||||
sys.refresh_cpu();
|
|
||||||
sys.refresh_disks();
|
|
||||||
sys.refresh_memory();
|
|
||||||
sys.refresh_networks();
|
|
||||||
|
|
||||||
let cores = sys.cpus().len() as f32;
|
|
||||||
|
|
||||||
for cpu in sys.cpus() {
|
|
||||||
usage += cpu.cpu_usage();
|
|
||||||
}
|
|
||||||
|
|
||||||
let cpu = Cpu {
|
|
||||||
cores,
|
|
||||||
usage: usage * cores / 100.0,
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut storage = Storage::default();
|
|
||||||
|
|
||||||
for disk in sys.disks() {
|
|
||||||
if disk.mount_point().to_string_lossy().len() > 1
|
|
||||||
&& Path::new("/home").starts_with(disk.mount_point())
|
|
||||||
{
|
|
||||||
storage.path = disk.name().to_string_lossy().to_string();
|
|
||||||
storage.total = disk.total_space();
|
|
||||||
storage.used = disk.available_space();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let load_avg = sys.load_average();
|
|
||||||
let load = Load {
|
|
||||||
one: load_avg.one,
|
|
||||||
five: load_avg.five,
|
|
||||||
fifteen: load_avg.fifteen,
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = Memory {
|
|
||||||
total: sys.total_memory(),
|
|
||||||
used: sys.used_memory(),
|
|
||||||
free: sys.free_memory(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut network = Network::default();
|
|
||||||
|
|
||||||
for (interface_name, data) in sys.networks() {
|
|
||||||
if !interfaces.is_empty() && interface_name == interfaces[0].0 {
|
|
||||||
network.name = interface_name.clone();
|
|
||||||
network.current_in = data.received();
|
|
||||||
network.total_in = data.total_received();
|
|
||||||
network.current_out = data.transmitted();
|
|
||||||
network.total_out = data.total_transmitted();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let swap = Swap {
|
|
||||||
total: sys.total_swap(),
|
|
||||||
used: sys.used_swap(),
|
|
||||||
free: sys.free_swap(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let system = MySystem {
|
|
||||||
name: sys.name(),
|
|
||||||
kernel: sys.kernel_version(),
|
|
||||||
version: sys.os_version(),
|
|
||||||
};
|
|
||||||
|
|
||||||
SystemStat {
|
|
||||||
cpu,
|
|
||||||
storage,
|
|
||||||
load,
|
|
||||||
memory,
|
|
||||||
network,
|
|
||||||
system,
|
|
||||||
swap,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
loop {
|
|
||||||
let system_stat = stat();
|
|
||||||
print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
|
|
||||||
println!("{system_stat:#?}");
|
|
||||||
|
|
||||||
sleep(Duration::from_secs(1))
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,167 +0,0 @@
|
|||||||
use std::{path::Path, thread::sleep, time::Duration};
|
|
||||||
|
|
||||||
use local_ip_address::list_afinet_netifas;
|
|
||||||
use serde::Serialize;
|
|
||||||
use sysinfo::{CpuExt, DiskExt, NetworkExt, System, SystemExt};
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct Cpu {
|
|
||||||
pub cores: f32,
|
|
||||||
pub usage: f32,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Default, Serialize)]
|
|
||||||
pub struct Storage {
|
|
||||||
pub path: String,
|
|
||||||
pub total: u64,
|
|
||||||
pub used: u64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct Load {
|
|
||||||
pub one: f64,
|
|
||||||
pub five: f64,
|
|
||||||
pub fifteen: f64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct Memory {
|
|
||||||
pub total: u64,
|
|
||||||
pub used: u64,
|
|
||||||
pub free: u64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Default, Serialize)]
|
|
||||||
pub struct Network {
|
|
||||||
pub name: String,
|
|
||||||
pub current_in: u64,
|
|
||||||
pub total_in: u64,
|
|
||||||
pub current_out: u64,
|
|
||||||
pub total_out: u64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct MySystem {
|
|
||||||
pub name: Option<String>,
|
|
||||||
pub kernel: Option<String>,
|
|
||||||
pub version: Option<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct Swap {
|
|
||||||
pub total: u64,
|
|
||||||
pub used: u64,
|
|
||||||
pub free: u64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
pub struct SystemStat {
|
|
||||||
pub cpu: Cpu,
|
|
||||||
pub load: Load,
|
|
||||||
pub memory: Memory,
|
|
||||||
pub network: Network,
|
|
||||||
pub storage: Storage,
|
|
||||||
pub swap: Swap,
|
|
||||||
pub system: MySystem,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn stat(sys: &mut System) -> SystemStat {
|
|
||||||
let network_interfaces = list_afinet_netifas().unwrap();
|
|
||||||
let mut usage = 0.0;
|
|
||||||
let mut interfaces = vec![];
|
|
||||||
|
|
||||||
for (name, ip) in network_interfaces.iter() {
|
|
||||||
if !ip.is_loopback() {
|
|
||||||
interfaces.push((name, ip))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
interfaces.dedup_by(|a, b| a.0 == b.0);
|
|
||||||
|
|
||||||
sys.refresh_cpu();
|
|
||||||
sys.refresh_disks();
|
|
||||||
sys.refresh_memory();
|
|
||||||
sys.refresh_networks();
|
|
||||||
|
|
||||||
let cores = sys.cpus().len() as f32;
|
|
||||||
|
|
||||||
for cpu in sys.cpus() {
|
|
||||||
usage += cpu.cpu_usage();
|
|
||||||
}
|
|
||||||
|
|
||||||
let cpu = Cpu {
|
|
||||||
cores,
|
|
||||||
usage: usage * cores / 100.0,
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut storage = Storage::default();
|
|
||||||
|
|
||||||
for disk in sys.disks() {
|
|
||||||
if disk.mount_point().to_string_lossy().len() > 1
|
|
||||||
&& Path::new("/home").starts_with(disk.mount_point())
|
|
||||||
{
|
|
||||||
storage.path = disk.name().to_string_lossy().to_string();
|
|
||||||
storage.total = disk.total_space();
|
|
||||||
storage.used = disk.available_space();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let load_avg = sys.load_average();
|
|
||||||
let load = Load {
|
|
||||||
one: load_avg.one,
|
|
||||||
five: load_avg.five,
|
|
||||||
fifteen: load_avg.fifteen,
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = Memory {
|
|
||||||
total: sys.total_memory(),
|
|
||||||
used: sys.used_memory(),
|
|
||||||
free: sys.free_memory(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut network = Network::default();
|
|
||||||
|
|
||||||
for (interface_name, data) in sys.networks() {
|
|
||||||
if !interfaces.is_empty() && interface_name == interfaces[0].0 {
|
|
||||||
network.name = interface_name.clone();
|
|
||||||
network.current_in = data.received();
|
|
||||||
network.total_in = data.total_received();
|
|
||||||
network.current_out = data.transmitted();
|
|
||||||
network.total_out = data.total_transmitted();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let swap = Swap {
|
|
||||||
total: sys.total_swap(),
|
|
||||||
used: sys.used_swap(),
|
|
||||||
free: sys.free_swap(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let system = MySystem {
|
|
||||||
name: sys.name(),
|
|
||||||
kernel: sys.kernel_version(),
|
|
||||||
version: sys.os_version(),
|
|
||||||
};
|
|
||||||
|
|
||||||
SystemStat {
|
|
||||||
cpu,
|
|
||||||
storage,
|
|
||||||
load,
|
|
||||||
memory,
|
|
||||||
network,
|
|
||||||
system,
|
|
||||||
swap,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let mut sys = System::new_all();
|
|
||||||
|
|
||||||
loop {
|
|
||||||
let system_stat = stat(&mut sys);
|
|
||||||
print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
|
|
||||||
println!("{system_stat:#?}");
|
|
||||||
|
|
||||||
sleep(Duration::from_secs(1))
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user