#[derive(Debug, Clone)]
pub struct MemoryStats {
pub mem_total: u64,
pub mem_available: u64,
pub mem_cached: u64, pub mem_sreclaimable: u64, pub mem_shmem: u64,
pub swap_total: u64,
pub swap_free: u64,
}
impl MemoryStats {
pub fn mem_used(&self) -> u64 {
self.mem_total.saturating_sub(self.mem_available)
}
pub fn mem_cache_effective(&self) -> u64 {
self.mem_cached
.saturating_add(self.mem_sreclaimable)
.saturating_sub(self.mem_shmem)
}
pub fn mem_used_percent(&self) -> f64 {
percent(self.mem_used(), self.mem_total)
}
pub fn mem_cache_percent(&self) -> f64 {
percent(self.mem_cache_effective(), self.mem_total)
}
pub fn mem_available_percent(&self) -> f64 {
percent(self.mem_available, self.mem_total)
}
pub fn swap_used(&self) -> u64 {
self.swap_total.saturating_sub(self.swap_free)
}
pub fn swap_used_percent(&self) -> f64 {
percent(self.swap_used(), self.swap_total)
}
pub fn swap_free_percent(&self) -> f64 {
percent(self.swap_free, self.swap_total)
}
}
fn percent(n: u64, d: u64) -> f64 {
if d == 0 {
0.0
} else {
(n as f64) * 100.0 / (d as f64)
}
}