From: Michael Friedrich Date: Tue, 24 Sep 2013 16:48:24 +0000 (+0200) Subject: compatutility: Refactor checkresult output, add notification type mapping. X-Git-Tag: v0.0.3~448 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=83a06b437800dd27859aa5b82f6fb22a02ef64ae;p=icinga2 compatutility: Refactor checkresult output, add notification type mapping. --- diff --git a/lib/icinga/compatutility.cpp b/lib/icinga/compatutility.cpp index 728a52009..9d957e210 100644 --- a/lib/icinga/compatutility.cpp +++ b/lib/icinga/compatutility.cpp @@ -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(); + + 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; diff --git a/lib/icinga/compatutility.h b/lib/icinga/compatutility.h index b96fdcb05..f8248c63a 100644 --- a/lib/icinga/compatutility.h +++ b/lib/icinga/compatutility.h @@ -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: