]> granicus.if.org Git - icinga2/commitdiff
compatutility: Refactor checkresult output, add notification type mapping.
authorMichael Friedrich <michael.friedrich@netways.de>
Tue, 24 Sep 2013 16:48:24 +0000 (18:48 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Tue, 24 Sep 2013 16:48:24 +0000 (18:48 +0200)
lib/icinga/compatutility.cpp
lib/icinga/compatutility.h

index 728a52009d576fac0d11aefe4bb6e733430dd038..9d957e2100316a7deaf85913fffea6ac3181e622 100644 (file)
@@ -190,22 +190,12 @@ Dictionary::Ptr CompatUtility::GetServiceStatusAttributes(const Service::Ptr& se
        Dictionary::Ptr cr = service->GetLastCheckResult();
 
        if (cr) {
-               raw_output = cr->Get("output");
-               size_t line_end = raw_output.Find("\n");
-
-               output = raw_output.SubStr(0, line_end);
-
-               if (line_end > 0 && line_end != String::NPos) {
-                       long_output = raw_output.SubStr(line_end+1, raw_output.GetLength());
-                       long_output = EscapeString(long_output);
-               }
-
-               boost::algorithm::replace_all(output, "\n", "\\n");
+               Dictionary::Ptr output_bag = GetCheckResultOutput(cr);
+               output = output_bag->Get("output");
+               long_output = output_bag->Get("long_output");
 
+               perfdata = GetCheckResultPerfdata(cr);
                schedule_end = cr->Get("schedule_end");
-
-               perfdata = cr->Get("performance_data_raw");
-               boost::algorithm::replace_all(perfdata, "\n", "\\n");
        }
 
        int state = service->GetState();
@@ -493,6 +483,66 @@ Dictionary::Ptr CompatUtility::GetCustomVariableConfig(const DynamicObject::Ptr&
        return customvars;
 }
 
+Dictionary::Ptr CompatUtility::GetCheckResultOutput(const Dictionary::Ptr& cr)
+{
+       if (!cr)
+               return Empty;
+
+       String long_output;
+       String output;
+       Dictionary::Ptr bag = boost::make_shared<Dictionary>();
+
+       String raw_output = cr->Get("output");
+       size_t line_end = raw_output.Find("\n");
+
+       output = raw_output.SubStr(0, line_end);
+
+       if (line_end > 0 && line_end != String::NPos) {
+               long_output = raw_output.SubStr(line_end+1, raw_output.GetLength());
+               long_output = EscapeString(long_output);
+       }
+
+       output = EscapeString(output);
+
+       bag->Set("output", output);
+       bag->Set("long_output", long_output);
+       return bag;
+}
+
+String CompatUtility::GetCheckResultPerfdata(const Dictionary::Ptr& cr)
+{
+       if (!cr)
+               return Empty;
+
+       return EscapeString(cr->Get("performance_data_raw"));
+}
+
+int CompatUtility::MapNotificationReasonType(NotificationType type)
+{
+       switch (type) {
+               case NotificationDowntimeStart:
+                       return 5;
+               case NotificationDowntimeEnd:
+                       return 6;
+               case NotificationDowntimeRemoved:
+                       return 7;
+               case NotificationCustom:
+                       return 8;
+               case NotificationAcknowledgement:
+                       return 1;
+               case NotificationProblem:
+                       return 0;
+               case NotificationRecovery:
+                       return 0;
+               case NotificationFlappingStart:
+                       return 2;
+               case NotificationFlappingEnd:
+                       return 3;
+               default:
+                       return 0;
+       }
+}
+
 String CompatUtility::EscapeString(const String& str)
 {
        String result = str;
index b96fdcb05acf489902bdbf7ea7d946a5b5a29ce7..f8248c63a92a86369dc85c463ca37f901984eb5e 100644 (file)
@@ -55,6 +55,12 @@ public:
        static Dictionary::Ptr GetCommandConfigAttributes(const Command::Ptr& command);
 
        static Dictionary::Ptr GetCustomVariableConfig(const DynamicObject::Ptr& object);
+
+       static Dictionary::Ptr GetCheckResultOutput(const Dictionary::Ptr& cr);
+       static String GetCheckResultPerfdata(const Dictionary::Ptr& cr);
+
+       static int MapNotificationReasonType(NotificationType type);
+
        static String EscapeString(const String& str);
 
 private: