Merge pull request #8969 from Icinga/bugfix/perfdata-dont-get-parsed-correctly-8912

PluginUtility: Fix PerfData parsing for values separated with multiple spaces
This commit is contained in:
Julian Brost 2023-05-22 17:16:31 +02:00 committed by GitHub
commit 0e25644151
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 0 deletions

View File

@ -140,6 +140,7 @@ Array::Ptr PluginUtility::SplitPerfdata(const String& perfdata)
break; break;
String label = perfdata.SubStr(begin, eqp - begin); String label = perfdata.SubStr(begin, eqp - begin);
boost::algorithm::trim_left(label);
if (label.GetLength() > 2 && label[0] == '\'' && label[label.GetLength() - 1] == '\'') if (label.GetLength() > 2 && label[0] == '\'' && label[label.GetLength() - 1] == '\'')
label = label.SubStr(1, label.GetLength() - 2); label = label.SubStr(1, label.GetLength() - 2);

View File

@ -147,6 +147,7 @@ add_boost_test(base
icinga_perfdata/simple icinga_perfdata/simple
icinga_perfdata/quotes icinga_perfdata/quotes
icinga_perfdata/multiple icinga_perfdata/multiple
icinga_perfdata/multiline
icinga_perfdata/normalize icinga_perfdata/normalize
icinga_perfdata/uom icinga_perfdata/uom
icinga_perfdata/warncritminmax icinga_perfdata/warncritminmax

View File

@ -43,6 +43,21 @@ BOOST_AUTO_TEST_CASE(multiple)
BOOST_CHECK(str == "testA=123456 testB=123456"); BOOST_CHECK(str == "testA=123456 testB=123456");
} }
BOOST_AUTO_TEST_CASE(multiline)
{
Array::Ptr pd = PluginUtility::SplitPerfdata(" 'testA'=123456 'testB'=123456");
BOOST_CHECK(pd->GetLength() == 2);
String str = PluginUtility::FormatPerfdata(pd);
BOOST_CHECK(str == "testA=123456 testB=123456");
pd = PluginUtility::SplitPerfdata(" 'testA'=123456 \n'testB'=123456");
BOOST_CHECK(pd->GetLength() == 2);
str = PluginUtility::FormatPerfdata(pd);
BOOST_CHECK(str == "testA=123456 testB=123456");
}
BOOST_AUTO_TEST_CASE(normalize) BOOST_AUTO_TEST_CASE(normalize)
{ {
Array::Ptr pd = PluginUtility::SplitPerfdata("testA=2m;3;4;1;5 testB=2foobar"); Array::Ptr pd = PluginUtility::SplitPerfdata("testA=2m;3;4;1;5 testB=2foobar");