From bf2e3cb091844d55ddcffc7f8f39b18aee12fe02 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sun, 7 Sep 2014 12:27:06 +0200 Subject: [PATCH] Don't parse perfdata if enable_perfdata is false fixes #7032 --- lib/icinga/externalcommandprocessor.cpp | 20 ++++++++++++++++---- lib/icinga/pluginutility.cpp | 4 ++-- lib/icinga/pluginutility.hpp | 2 +- lib/methods/pluginchecktask.cpp | 10 ++++++++-- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/lib/icinga/externalcommandprocessor.cpp b/lib/icinga/externalcommandprocessor.cpp index 374b0e26a..5fdf49592 100644 --- a/lib/icinga/externalcommandprocessor.cpp +++ b/lib/icinga/externalcommandprocessor.cpp @@ -304,9 +304,15 @@ void ExternalCommandProcessor::ProcessHostCheckResult(double time, const std::ve int exitStatus = Convert::ToDouble(arguments[1]); CheckResult::Ptr result = make_shared(); - std::pair co = PluginUtility::ParseCheckOutput(arguments[2]); + std::pair co = PluginUtility::ParseCheckOutput(arguments[2]); result->SetOutput(co.first); - result->SetPerformanceData(co.second); + + Value perfdata = co.second; + + if (host->GetEnablePerfdata()) + perfdata = PluginUtility::ParsePerfdata(perfdata); + + result->SetPerformanceData(perfdata); ServiceState state; @@ -350,9 +356,15 @@ void ExternalCommandProcessor::ProcessServiceCheckResult(double time, const std: int exitStatus = Convert::ToDouble(arguments[2]); CheckResult::Ptr result = make_shared(); - std::pair co = PluginUtility::ParseCheckOutput(arguments[3]); + std::pair co = PluginUtility::ParseCheckOutput(arguments[3]); result->SetOutput(co.first); - result->SetPerformanceData(co.second); + + Value perfdata = co.second; + + if (service->GetEnablePerfdata()) + perfdata = PluginUtility::ParsePerfdata(perfdata); + + result->SetPerformanceData(perfdata); result->SetState(PluginUtility::ExitStatusToState(exitStatus)); result->SetScheduleStart(time); diff --git a/lib/icinga/pluginutility.cpp b/lib/icinga/pluginutility.cpp index 84239fc9e..ab34b9821 100644 --- a/lib/icinga/pluginutility.cpp +++ b/lib/icinga/pluginutility.cpp @@ -189,7 +189,7 @@ ServiceState PluginUtility::ExitStatusToState(int exitStatus) } } -std::pair PluginUtility::ParseCheckOutput(const String& output) +std::pair PluginUtility::ParseCheckOutput(const String& output) { String text; String perfdata; @@ -217,7 +217,7 @@ std::pair PluginUtility::ParseCheckOutput(const String& output) boost::algorithm::trim(perfdata); - return std::make_pair(text, ParsePerfdata(perfdata)); + return std::make_pair(text, perfdata); } Value PluginUtility::ParsePerfdata(const String& perfdata) diff --git a/lib/icinga/pluginutility.hpp b/lib/icinga/pluginutility.hpp index 1e8d6785a..94a6819d8 100644 --- a/lib/icinga/pluginutility.hpp +++ b/lib/icinga/pluginutility.hpp @@ -44,7 +44,7 @@ public: const boost::function& callback = boost::function()); static ServiceState ExitStatusToState(int exitStatus); - static std::pair ParseCheckOutput(const String& output); + static std::pair ParseCheckOutput(const String& output); static Value ParsePerfdata(const String& perfdata); static String FormatPerfdata(const Value& perfdata); diff --git a/lib/methods/pluginchecktask.cpp b/lib/methods/pluginchecktask.cpp index 462ce890f..39716cce2 100644 --- a/lib/methods/pluginchecktask.cpp +++ b/lib/methods/pluginchecktask.cpp @@ -65,10 +65,16 @@ void PluginCheckTask::ProcessFinishedHandler(const Checkable::Ptr& checkable, co String output = pr.Output; output.Trim(); - std::pair co = PluginUtility::ParseCheckOutput(output); + std::pair co = PluginUtility::ParseCheckOutput(output); cr->SetCommand(commandLine); cr->SetOutput(co.first); - cr->SetPerformanceData(co.second); + + Value perfdata = co.second; + + if (checkable->GetEnablePerfdata()) + perfdata = PluginUtility::ParsePerfdata(perfdata); + + cr->SetPerformanceData(perfdata); cr->SetState(PluginUtility::ExitStatusToState(pr.ExitStatus)); cr->SetExitStatus(pr.ExitStatus); cr->SetExecutionStart(pr.ExecutionStart); -- 2.40.0