changeset 32:11e03e26ace0

Use better value extraction for load
author Lewin Bormann <lbo@spheniscida.de>
date Thu, 18 Feb 2016 15:23:05 +0100
parents 432a454037aa
children 1393ea777c92
files src/metrics/load.rs
diffstat 1 files changed, 8 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/metrics/load.rs	Thu Feb 18 15:22:57 2016 +0100
+++ b/src/metrics/load.rs	Thu Feb 18 15:23:05 2016 +0100
@@ -1,10 +1,10 @@
-use std::str::FromStr;
 
 extern crate regex;
 use self::regex::Regex;
 
 use framework::*;
 use helper::read_procfs_file;
+use helper::extract_from_str;
 
 struct LoadAvg;
 
@@ -13,22 +13,18 @@
         let loads = read_procfs_file(String::from("/loadavg"))
                         .unwrap_or(String::from("0.0 0.0 0.0  "));
         let re = Regex::new(r"([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+).*").unwrap();
+        let load_avgs: Vec<f64> = extract_from_str(&loads, &re, 0.);
 
-        match re.captures(&loads) {
-            None => (String::from("0.0 0.0 0.0"), Color::Purple),
-            Some(caps) => {
-                (format!("{} {} {}",
-                         caps.at(1).unwrap(),
-                         caps.at(2).unwrap(),
-                         caps.at(3).unwrap()),
-                 LoadAvg::get_color(caps.at(1).unwrap()))
-            }
+        if load_avgs.len() < 3 {
+            (String::from("0.0 0.0 0.0"), Color::Purple)
+        } else {
+            (format!("{} {} {}", load_avgs[0], load_avgs[1], load_avgs[2]),
+             LoadAvg::get_color(load_avgs[0]))
         }
     }
 
     // load is a string containing one float number.
-    fn get_color(load: &str) -> Color {
-        let f = f64::from_str(load).unwrap_or(0.);
+    fn get_color(f: f64) -> Color {
 
         // TODO: Make color thresholds configurable
         if f >= 0. && f < 1.5 {