extern crate libc;
use std::default::Default;
mod ffi;
#[derive(Debug)]
pub struct Memory {
ram: u64,
total: u64,
used: u64,
free: u64,
actual_used: u64,
actual_free: u64,
used_percent: f64,
free_percent: f64
}
pub fn memory() -> Result<Memory, String> {
let mut sigar_ptr : *mut ffi::sigar_t = std::ptr::null_mut();
let res = unsafe { ffi::sigar_open(&mut sigar_ptr) };
if res != 0 {
return Err(ffi::error(sigar_ptr, res))
}
let mut mem: ffi::sigar_mem_t = Default::default();
let res = unsafe { ffi::sigar_mem_get(sigar_ptr, &mut mem) };
if res != 0 {
return Err(ffi::error(sigar_ptr, res))
}
let res = unsafe { ffi::sigar_close(sigar_ptr) };
if res != 0 {
Err("failed to close sigar".to_string())
} else {
Ok(Memory{
ram: mem.ram,
total: mem.total,
used: mem.used,
free: mem.free,
actual_used: mem.actual_used,
actual_free: mem.actual_free,
used_percent: mem.used_percent,
free_percent: mem.free_percent,
})
}
}