]> granicus.if.org Git - icinga2/commitdiff
Fix: Missing warn/crit/min/max values are incorrectly set to 0.
authorGunnar Beutner <gunnar.beutner@netways.de>
Tue, 17 Dec 2013 13:47:19 +0000 (14:47 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Tue, 17 Dec 2013 13:47:19 +0000 (14:47 +0100)
Fixes #5358

lib/icinga/perfdatavalue.cpp
test/icinga-perfdata.cpp

index 2d1fc18644740a262cd526ca9d3e826c6f669232..d72615ce4b4db1589de5419b48894a8e8da248f9 100644 (file)
@@ -65,7 +65,7 @@ Value PerfdataValue::Parse(const String& perfdata)
        double base = 1.0;
 
        if (unit == "us") {
-               base /= (1000.0 * 1000.0);
+               base /= 1000.0 * 1000.0;
                unit = "seconds";
        } else if (unit == "ms") {
                base /= 1000.0;
@@ -107,13 +107,19 @@ Value PerfdataValue::Parse(const String& perfdata)
        if (tokens.size() > 4 && tokens[4] != "U" && tokens[4] != "")
                max = Convert::ToDouble(tokens[4]);
 
-       if (base != 1.0) {
-               value = value * base;
+       value = value * base;
+
+       if (!warn.IsEmpty())
                warn = warn * base;
+
+       if (!crit.IsEmpty())
                crit = crit * base;
+
+       if (!min.IsEmpty())
                min = min * base;
+
+       if (!max.IsEmpty())
                max = max * base;
-       }
 
        return make_shared<PerfdataValue>(value, counter, unit, warn, crit, min, max);
 }
index 80a8c1e3e18517168af4f3d6580e114cd7ea09bd..f092a245d7d6857c514340e909ec1b21bfaf9d96 100644 (file)
@@ -72,6 +72,33 @@ BOOST_AUTO_TEST_CASE(uom)
 
        String str = PluginUtility::FormatPerfdata(pd);
        BOOST_CHECK(str == "test=123456B");
+
+       pd = PluginUtility::ParsePerfdata("test=1000ms;200;500");
+       BOOST_CHECK(pd);
+
+       pv = pd->Get("test");
+       BOOST_CHECK(pv);
+
+       BOOST_CHECK(pv->GetValue() == 1);
+       BOOST_CHECK(pv->GetUnit() == "seconds");
+       BOOST_CHECK(pv->GetWarn() == 0.2);
+       BOOST_CHECK(pv->GetCrit() == 0.5);
+
+       pd = PluginUtility::ParsePerfdata("test=1000ms");
+       BOOST_CHECK(pd);
+
+       pv = pd->Get("test");
+       BOOST_CHECK(pv);
+
+       BOOST_CHECK(pv->GetValue() == 1);
+       BOOST_CHECK(pv->GetUnit() == "seconds");
+       BOOST_CHECK(pv->GetCrit() == Empty);
+       BOOST_CHECK(pv->GetWarn() == Empty);
+       BOOST_CHECK(pv->GetMin() == Empty);
+       BOOST_CHECK(pv->GetMax() == Empty);
+
+       str = PluginUtility::FormatPerfdata(pd);
+       BOOST_CHECK(str == "test=1s");
 }
 
 BOOST_AUTO_TEST_CASE(warncritminmax)