1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
extern crate libc; #[macro_use] extern crate mackerel_plugin; use std::collections::HashMap; use mackerel_plugin::*; pub struct LoadavgPlugin {} #[inline] fn get_loadavgs() -> Result<[f64; 3], String> { let mut loadavgs: [f64; 3] = [0.0, 0.0, 0.0]; unsafe { let ret = libc::getloadavg(loadavgs.as_mut_ptr(), 3); if ret != 3 { Err("failed to get load averages".to_string()) } else { Ok(loadavgs) } } } impl Plugin for LoadavgPlugin { fn fetch_metrics(&self) -> Result<HashMap<String, f64>, String> { let mut metrics = HashMap::new(); let loadavgs = get_loadavgs()?; metrics.insert("loadavg.loadavg1".to_string(), loadavgs[0]); metrics.insert("loadavg.loadavg5".to_string(), loadavgs[1]); metrics.insert("loadavg.loadavg15".to_string(), loadavgs[2]); Ok(metrics) } fn graph_definition(&self) -> Vec<Graph> { vec![ graph! { name: "loadavg", label: "Load averages", unit: "float", metrics: [ { name: "loadavg15", label: "loadavg15" }, { name: "loadavg5", label: "loadavg5" }, { name: "loadavg1", label: "loadavg1" }, ] }, ] } }