From: Gunnar Beutner Date: Thu, 22 May 2014 06:59:46 +0000 (+0200) Subject: Use the right CheckResult object for commands. X-Git-Tag: v2.0.0-beta1~67 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=99ce7981dadc182c9eef13d7b3a843f88acc81b7;p=icinga2 Use the right CheckResult object for commands. Fixes #6260 --- diff --git a/lib/icinga/pluginutility.cpp b/lib/icinga/pluginutility.cpp index df749b73d..4670f9eef 100644 --- a/lib/icinga/pluginutility.cpp +++ b/lib/icinga/pluginutility.cpp @@ -60,7 +60,7 @@ private: }; void PluginUtility::ExecuteCommand(const Command::Ptr& commandObj, const Checkable::Ptr& checkable, - const MacroProcessor::ResolverList& macroResolvers, + const CheckResult::Ptr& cr, const MacroProcessor::ResolverList& macroResolvers, const boost::function& callback) { Value raw_command = commandObj->GetCommandLine(); @@ -68,7 +68,7 @@ void PluginUtility::ExecuteCommand(const Command::Ptr& commandObj, const Checkab Value command; if (!raw_arguments || raw_command.IsObjectType()) - command = MacroProcessor::ResolveMacros(raw_command, macroResolvers, checkable->GetLastCheckResult(), NULL, Utility::EscapeShellArg); + command = MacroProcessor::ResolveMacros(raw_command, macroResolvers, cr, NULL, Utility::EscapeShellArg); else { Array::Ptr arr = make_shared(); arr->Add(raw_command); @@ -101,7 +101,7 @@ void PluginUtility::ExecuteCommand(const Command::Ptr& commandObj, const Checkab if (!set_if.IsEmpty()) { String missingMacro; String set_if_resolved = MacroProcessor::ResolveMacros(set_if, macroResolvers, - checkable->GetLastCheckResult(), &missingMacro); + cr, &missingMacro); if (!missingMacro.IsEmpty() || !Convert::ToLong(set_if_resolved)) continue; @@ -115,7 +115,7 @@ void PluginUtility::ExecuteCommand(const Command::Ptr& commandObj, const Checkab String missingMacro; arg.Value = MacroProcessor::ResolveMacros(argval, macroResolvers, - checkable->GetLastCheckResult(), &missingMacro); + cr, &missingMacro); if (!missingMacro.IsEmpty()) { if (required) { @@ -162,7 +162,7 @@ void PluginUtility::ExecuteCommand(const Command::Ptr& commandObj, const Checkab BOOST_FOREACH(const Dictionary::Pair& kv, env) { String name = kv.second; - Value value = MacroProcessor::ResolveMacros(name, macroResolvers, checkable->GetLastCheckResult()); + Value value = MacroProcessor::ResolveMacros(name, macroResolvers, cr); envMacros->Set(kv.first, value); } diff --git a/lib/icinga/pluginutility.h b/lib/icinga/pluginutility.h index f772e1abc..060e22152 100644 --- a/lib/icinga/pluginutility.h +++ b/lib/icinga/pluginutility.h @@ -40,7 +40,7 @@ class I2_ICINGA_API PluginUtility { public: static void ExecuteCommand(const Command::Ptr& commandObj, const Checkable::Ptr& checkable, - const MacroProcessor::ResolverList& macroResolvers, + const CheckResult::Ptr& cr, const MacroProcessor::ResolverList& macroResolvers, const boost::function& callback = boost::function()); static ServiceState ExitStatusToState(int exitStatus); diff --git a/lib/methods/pluginchecktask.cpp b/lib/methods/pluginchecktask.cpp index d50a8e668..0908adfe5 100644 --- a/lib/methods/pluginchecktask.cpp +++ b/lib/methods/pluginchecktask.cpp @@ -50,7 +50,7 @@ void PluginCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckRes resolvers.push_back(std::make_pair("command", commandObj)); resolvers.push_back(std::make_pair("icinga", IcingaApplication::GetInstance())); - PluginUtility::ExecuteCommand(commandObj, checkable, resolvers, boost::bind(&PluginCheckTask::ProcessFinishedHandler, checkable, cr, _1, _2)); + PluginUtility::ExecuteCommand(commandObj, checkable, checkable->GetLastCheckResult(), resolvers, boost::bind(&PluginCheckTask::ProcessFinishedHandler, checkable, cr, _1, _2)); } void PluginCheckTask::ProcessFinishedHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr, const Value& commandLine, const ProcessResult& pr) diff --git a/lib/methods/plugineventtask.cpp b/lib/methods/plugineventtask.cpp index 0c079275b..7773e04b3 100644 --- a/lib/methods/plugineventtask.cpp +++ b/lib/methods/plugineventtask.cpp @@ -48,5 +48,5 @@ void PluginEventTask::ScriptFunc(const Checkable::Ptr& checkable) resolvers.push_back(std::make_pair("command", commandObj)); resolvers.push_back(std::make_pair("icinga", IcingaApplication::GetInstance())); - PluginUtility::ExecuteCommand(commandObj, checkable, resolvers); + PluginUtility::ExecuteCommand(commandObj, checkable, checkable->GetLastCheckResult(), resolvers); } diff --git a/lib/methods/pluginnotificationtask.cpp b/lib/methods/pluginnotificationtask.cpp index 848847ad2..996c2c5ee 100644 --- a/lib/methods/pluginnotificationtask.cpp +++ b/lib/methods/pluginnotificationtask.cpp @@ -62,7 +62,7 @@ void PluginNotificationTask::ScriptFunc(const Notification::Ptr& notification, c resolvers.push_back(std::make_pair("command", commandObj)); resolvers.push_back(std::make_pair("icinga", IcingaApplication::GetInstance())); - PluginUtility::ExecuteCommand(commandObj, checkable, resolvers, boost::bind(&PluginNotificationTask::ProcessFinishedHandler, checkable, _1, _2)); + PluginUtility::ExecuteCommand(commandObj, checkable, cr, resolvers, boost::bind(&PluginNotificationTask::ProcessFinishedHandler, checkable, _1, _2)); } void PluginNotificationTask::ProcessFinishedHandler(const Checkable::Ptr& checkable, const Value& command, const ProcessResult& pr)