bfree 0.1.21

bfree - memory stats for humans
Documentation
#[derive(Debug, Clone)]
pub struct MemoryStats {
    // Memory
    pub mem_total: u64,
    pub mem_available: u64,
    pub mem_cached: u64,       // Cached
    pub mem_sreclaimable: u64, // SReclaimable
    pub mem_shmem: u64,        // Shmem

    // Swap
    pub swap_total: u64,
    pub swap_free: u64,
}

impl MemoryStats {
    pub fn mem_used(&self) -> u64 {
        self.mem_total.saturating_sub(self.mem_available)
    }

    /// Effective reclaimable cache:
    /// cache ≈ Cached + SReclaimable - Shmem
    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)
    }
}