#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;
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;
}