[icinga-checkins] icinga.org: icinga2/master: livestatus: add commandstable name/line

git at icinga.org git at icinga.org
Thu Jul 11 11:51:21 CEST 2013


Module: icinga2
Branch: master
Commit: 96e1935fb483a322b322bd6edee8b9cb1c7ae3e9
URL:    https://git.icinga.org/?p=icinga2.git;a=commit;h=96e1935fb483a322b322bd6edee8b9cb1c7ae3e9

Author: Michael Friedrich <michael.friedrich at netways.de>
Date:   Thu Jul 11 11:47:32 2013 +0200

livestatus: add commandstable name/line

requires conversion of commandline (plain text or array).

refs #4372

---

 components/livestatus/commandstable.cpp |   45 ++++++++++++++++++++++++++++---
 1 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/components/livestatus/commandstable.cpp b/components/livestatus/commandstable.cpp
index 703292b..ecbcfb9 100644
--- a/components/livestatus/commandstable.cpp
+++ b/components/livestatus/commandstable.cpp
@@ -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;
 }





More information about the icinga-checkins mailing list