livestatus: add commandstable name/line

requires conversion of commandline (plain text or array).

refs #4372
This commit is contained in:
Michael Friedrich 2013-07-11 11:47:32 +02:00
parent 0a033b0f87
commit 96e1935fb4
1 changed files with 41 additions and 4 deletions

View File

@ -23,7 +23,10 @@
#include "icinga/eventcommand.h"
#include "icinga/notificationcommand.h"
#include "base/dynamictype.h"
#include "base/objectlock.h"
#include "base/convert.h"
#include <boost/foreach.hpp>
#include <boost/algorithm/string/replace.hpp>
using namespace icinga;
using namespace livestatus;
@ -60,12 +63,46 @@ void CommandsTable::FetchRows(const AddRowFunction& addRowFn)
Value CommandsTable::NameAccessor(const Value& row)
{
/* TODO */
return Value();
String buf;
Command::Ptr command = static_cast<Command::Ptr>(row);
if (command->GetType() == DynamicType::GetByName("CheckCommand"))
buf += "check_";
if (command->GetType() == DynamicType::GetByName("NotificationCommand"))
buf += "notification_";
if (command->GetType() == DynamicType::GetByName("EventCommand"))
buf += "event_";
buf += command->GetName();
return buf;
}
Value CommandsTable::LineAccessor(const Value& row)
{
/* TODO */
return Value();
String buf;
Command::Ptr command = static_cast<Command::Ptr>(row);
Value commandLine = command->GetCommandLine();
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;
}