peach-workspace/peach-stats/src/stats.rs

91 lines
2.4 KiB
Rust
Raw Normal View History

2021-08-06 17:58:40 +00:00
use std::result::Result;
2021-10-30 10:17:14 +00:00
use miniserde::json;
2021-08-06 17:58:40 +00:00
use probes::{cpu, disk_usage, load, memory};
use systemstat::{Platform, System};
2021-10-30 10:45:09 +00:00
use crate::error::StatError;
2021-08-06 17:58:40 +00:00
use crate::structs::{CpuStat, CpuStatPercentages, DiskUsage, LoadAverage, MemStat};
pub fn cpu_stats() -> Result<String, StatError> {
let cpu_stats = cpu::proc::read().map_err(|source| StatError::CpuStat { source })?;
2021-08-06 17:58:40 +00:00
let s = cpu_stats.stat;
let cpu = CpuStat {
user: s.user,
system: s.system,
nice: s.nice,
idle: s.idle,
};
2021-10-30 10:17:14 +00:00
let json_cpu = json::to_string(&cpu);
2021-08-06 17:58:40 +00:00
Ok(json_cpu)
}
pub fn cpu_stats_percent() -> Result<String, StatError> {
let cpu_stats = cpu::proc::read().map_err(|source| StatError::CpuStat { source })?;
2021-08-06 17:58:40 +00:00
let s = cpu_stats.stat.in_percentages();
let cpu = CpuStatPercentages {
user: s.user,
system: s.system,
nice: s.nice,
idle: s.idle,
};
2021-10-30 10:17:14 +00:00
let json_cpu = json::to_string(&cpu);
2021-08-06 17:58:40 +00:00
Ok(json_cpu)
}
pub fn disk_usage() -> Result<String, StatError> {
let disks = disk_usage::read().map_err(|source| StatError::DiskUsage { source })?;
2021-08-06 17:58:40 +00:00
let mut disk_usages = Vec::new();
for d in disks {
let disk = DiskUsage {
filesystem: d.filesystem,
one_k_blocks: d.one_k_blocks,
one_k_blocks_used: d.one_k_blocks_used,
one_k_blocks_free: d.one_k_blocks_free,
used_percentage: d.used_percentage,
mountpoint: d.mountpoint,
};
disk_usages.push(disk);
}
2021-10-30 10:17:14 +00:00
let json_disks = json::to_string(&disk_usages);
2021-08-06 17:58:40 +00:00
Ok(json_disks)
}
pub fn load_average() -> Result<String, StatError> {
let l = load::read().map_err(|source| StatError::LoadAvg { source })?;
2021-08-06 17:58:40 +00:00
let load_avg = LoadAverage {
one: l.one,
five: l.five,
fifteen: l.fifteen,
};
2021-10-30 10:17:14 +00:00
let json_load_avg = json::to_string(&load_avg);
2021-08-06 17:58:40 +00:00
Ok(json_load_avg)
}
pub fn mem_stats() -> Result<String, StatError> {
let m = memory::read().map_err(|source| StatError::MemStat { source })?;
2021-08-06 17:58:40 +00:00
let mem = MemStat {
total: m.total(),
free: m.free(),
used: m.used(),
};
2021-10-30 10:17:14 +00:00
let json_mem = json::to_string(&mem);
2021-08-06 17:58:40 +00:00
Ok(json_mem)
}
pub fn uptime() -> Result<String, StatError> {
let sys = System::new();
2021-10-30 10:45:09 +00:00
let uptime = sys
.uptime()
.map_err(|source| StatError::Uptime { source })?;
2021-10-30 10:17:14 +00:00
let uptime_secs = uptime.as_secs();
let json_uptime = json::to_string(&uptime_secs);
2021-08-06 17:58:40 +00:00
Ok(json_uptime)
}