From: Gunnar Beutner Date: Tue, 17 Dec 2013 13:47:19 +0000 (+0100) Subject: Fix: Missing warn/crit/min/max values are incorrectly set to 0. X-Git-Tag: v0.0.6~12 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9bf44b9b1d2d618c51e67f5ba2e76f06bf5f3e46;p=icinga2 Fix: Missing warn/crit/min/max values are incorrectly set to 0. Fixes #5358 --- diff --git a/lib/icinga/perfdatavalue.cpp b/lib/icinga/perfdatavalue.cpp index 2d1fc1864..d72615ce4 100644 --- a/lib/icinga/perfdatavalue.cpp +++ b/lib/icinga/perfdatavalue.cpp @@ -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(value, counter, unit, warn, crit, min, max); } diff --git a/test/icinga-perfdata.cpp b/test/icinga-perfdata.cpp index 80a8c1e3e..f092a245d 100644 --- a/test/icinga-perfdata.cpp +++ b/test/icinga-perfdata.cpp @@ -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)