Livestatus: Fix check_command_expanded column.

Fixes #5296
This commit is contained in:
Michael Friedrich 2013-12-11 10:18:23 +01:00
parent 32ca25c7ef
commit 83e20ba02e
2 changed files with 8 additions and 69 deletions

View File

@ -236,42 +236,11 @@ Value HostsTable::CheckCommandExpandedAccessor(const Value& row)
if (!hc)
return Empty;
CheckCommand::Ptr commandObj = hc->GetCheckCommand();
CheckCommand::Ptr checkcommand = hc->GetCheckCommand();
if (checkcommand)
return checkcommand->GetName(); /* this is the name without '!' args */
if (!commandObj)
return Empty;
Value raw_command = commandObj->GetCommandLine();
std::vector<MacroResolver::Ptr> resolvers;
resolvers.push_back(hc);
resolvers.push_back(host);
resolvers.push_back(commandObj);
resolvers.push_back(IcingaApplication::GetInstance());
Value commandLine = MacroProcessor::ResolveMacros(raw_command, resolvers, CheckResult::Ptr(), Utility::EscapeShellCmd);
String buf;
if (commandLine.IsObjectType<Array>()) {
Array::Ptr args = commandLine;
ObjectLock olock(args);
String arg;
BOOST_FOREACH(arg, args) {
// This is obviously incorrect for non-trivial cases.
String argitem = " \"" + arg + "\"";
boost::algorithm::replace_all(argitem, "\n", "\\n");
buf += argitem;
}
} else if (!commandLine.IsEmpty()) {
String args = Convert::ToString(commandLine);
boost::algorithm::replace_all(args, "\n", "\\n");
buf += args;
} else {
buf += "<internal>";
}
return buf;
return Empty;
}
Value HostsTable::EventHandlerAccessor(const Value& row)

View File

@ -200,42 +200,12 @@ Value ServicesTable::CheckCommandExpandedAccessor(const Value& row)
if (!service)
return Empty;
CheckCommand::Ptr commandObj = service->GetCheckCommand();
CheckCommand::Ptr checkcommand = service->GetCheckCommand();
if (!commandObj)
return Empty;
if (checkcommand)
return checkcommand->GetName(); /* this is the name without '!' args */
Value raw_command = commandObj->GetCommandLine();
std::vector<MacroResolver::Ptr> resolvers;
resolvers.push_back(service);
resolvers.push_back(service->GetHost());
resolvers.push_back(commandObj);
resolvers.push_back(IcingaApplication::GetInstance());
Value commandLine = MacroProcessor::ResolveMacros(raw_command, resolvers, CheckResult::Ptr(), Utility::EscapeShellCmd);
String buf;
if (commandLine.IsObjectType<Array>()) {
Array::Ptr args = commandLine;
ObjectLock olock(args);
String arg;
BOOST_FOREACH(arg, args) {
// This is obviously incorrect for non-trivial cases.
String argitem = " \"" + arg + "\"";
boost::algorithm::replace_all(argitem, "\n", "\\n");
buf += argitem;
}
} else if (!commandLine.IsEmpty()) {
String args = Convert::ToString(commandLine);
boost::algorithm::replace_all(args, "\n", "\\n");
buf += args;
} else {
buf += "<internal>";
}
return buf;
return Empty;
}
Value ServicesTable::EventHandlerAccessor(const Value& row)