From 685ac2f6d721103ac23c317abc60469491f0e800 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Wed, 19 Feb 2020 10:59:07 +0100 Subject: [PATCH] Revert "Implement last_notification_result handling for Notification objects" This reverts commit 1706b297a50aceafdbbfe8ed8d46c8d01c114464. --- lib/icinga/notification.cpp | 29 ++------------------------ lib/icinga/notification.hpp | 2 +- lib/icinga/notification.ti | 4 ---- lib/icinga/notificationcommand.cpp | 7 +++---- lib/icinga/notificationcommand.hpp | 4 ++-- lib/icinga/notificationresult.cpp | 1 + lib/methods/pluginnotificationtask.cpp | 26 +++++++---------------- lib/methods/pluginnotificationtask.hpp | 5 ++--- 8 files changed, 18 insertions(+), 60 deletions(-) diff --git a/lib/icinga/notification.cpp b/lib/icinga/notification.cpp index 23deed590..dff07699e 100644 --- a/lib/icinga/notification.cpp +++ b/lib/icinga/notification.cpp @@ -509,14 +509,10 @@ void Notification::ExecuteNotificationHelper(NotificationType type, const User:: String commandName = command->GetName(); try { - NotificationResult::Ptr nr = new NotificationResult(); - - nr->SetExecutionStart(Utility::GetTime()); - - command->Execute(this, user, cr, nr, type, author, text); + command->Execute(this, user, cr, type, author, text); /* required by compatlogger */ - Checkable::OnNotificationSentToUser(this, GetCheckable(), user, type, cr, author, text, command->GetName(), nullptr); + Service::OnNotificationSentToUser(this, GetCheckable(), user, type, cr, author, text, commandName, nullptr); Log(LogInformation, "Notification") << "Completed sending '" << NotificationTypeToString(type) @@ -537,27 +533,6 @@ void Notification::ProcessNotificationResult(const NotificationResult::Ptr& nr, if (!nr) return; - double now = Utility::GetTime(); - - if (nr->GetExecutionStart() == 0) - nr->SetExecutionStart(now); - - if (nr->GetExecutionEnd() == 0) - nr->SetExecutionEnd(now); - - /* Determine the execution endpoint from a locally executed check. */ - if (!origin || origin->IsLocal()) - nr->SetExecutionEndpoint(IcingaApplication::GetInstance()->GetNodeName()); - - if (!IsActive()) - return; - - { - ObjectLock olock(this); - - SetLastNotificationResult(nr); - } - /* Notify cluster, API and feature events. */ OnNewNotificationResult(this, nr, origin); } diff --git a/lib/icinga/notification.hpp b/lib/icinga/notification.hpp index 5fcb6fd2a..d9f6ff960 100644 --- a/lib/icinga/notification.hpp +++ b/lib/icinga/notification.hpp @@ -83,7 +83,7 @@ public: Endpoint::Ptr GetCommandEndpoint() const; - void ProcessNotificationResult(const NotificationResult::Ptr& nr, const MessageOrigin::Ptr& origin = nullptr); + void ProcessNotificationResult(const NotificationResult::Ptr& nr, const MessageOrigin::Ptr& origin); // Logging, etc. static String NotificationTypeToString(NotificationType type); diff --git a/lib/icinga/notification.ti b/lib/icinga/notification.ti index 0212a144a..a283bbb84 100644 --- a/lib/icinga/notification.ti +++ b/lib/icinga/notification.ti @@ -1,8 +1,6 @@ /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ #include "icinga/customvarobject.hpp" -#include "icinga/notificationresult.hpp" -#include "base/array.hpp" #impl_include "icinga/notificationcommand.hpp" #impl_include "icinga/service.hpp" @@ -18,7 +16,6 @@ public: virtual String MakeName(const String& shortName, const Object::Ptr& context) const; virtual Dictionary::Ptr ParseName(const String& name) const; }; - }}} class Notification : CustomVarObject < NotificationNameComposer @@ -88,7 +85,6 @@ class Notification : CustomVarObject < NotificationNameComposer [state] Timestamp next_notification; [state] int notification_number; [state] Timestamp last_problem_notification; - [state] NotificationResult::Ptr last_notification_result; [config, navigation] name(Endpoint) command_endpoint (CommandEndpointRaw) { navigate {{{ diff --git a/lib/icinga/notificationcommand.cpp b/lib/icinga/notificationcommand.cpp index dc9edb4f3..8ae3e82a5 100644 --- a/lib/icinga/notificationcommand.cpp +++ b/lib/icinga/notificationcommand.cpp @@ -8,15 +8,14 @@ using namespace icinga; REGISTER_TYPE(NotificationCommand); Dictionary::Ptr NotificationCommand::Execute(const Notification::Ptr& notification, - const User::Ptr& user, const CheckResult::Ptr& cr, const NotificationResult::Ptr& nr, - const NotificationType& type, const String& author, const String& comment, - const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros) + const User::Ptr& user, const CheckResult::Ptr& cr, const NotificationType& type, + const String& author, const String& comment, const Dictionary::Ptr& resolvedMacros, + bool useResolvedMacros) { return GetExecute()->Invoke({ notification, user, cr, - nr, type, author, comment, diff --git a/lib/icinga/notificationcommand.hpp b/lib/icinga/notificationcommand.hpp index 0c76a0142..210c91e86 100644 --- a/lib/icinga/notificationcommand.hpp +++ b/lib/icinga/notificationcommand.hpp @@ -23,8 +23,8 @@ public: DECLARE_OBJECTNAME(NotificationCommand); virtual Dictionary::Ptr Execute(const intrusive_ptr& notification, - const User::Ptr& user, const CheckResult::Ptr& cr, const NotificationResult::Ptr& nr, - const NotificationType& type, const String& author, const String& comment, + const User::Ptr& user, const CheckResult::Ptr& cr, const NotificationType& type, + const String& author, const String& comment, const Dictionary::Ptr& resolvedMacros = nullptr, bool useResolvedMacros = false); }; diff --git a/lib/icinga/notificationresult.cpp b/lib/icinga/notificationresult.cpp index 699270e01..30b466075 100644 --- a/lib/icinga/notificationresult.cpp +++ b/lib/icinga/notificationresult.cpp @@ -19,6 +19,7 @@ #include "icinga/notificationresult.hpp" #include "icinga/notificationresult-ti.cpp" +#include "base/scriptglobal.hpp" using namespace icinga; diff --git a/lib/methods/pluginnotificationtask.cpp b/lib/methods/pluginnotificationtask.cpp index ab84e726a..0fcc95dc2 100644 --- a/lib/methods/pluginnotificationtask.cpp +++ b/lib/methods/pluginnotificationtask.cpp @@ -15,12 +15,12 @@ using namespace icinga; -REGISTER_FUNCTION_NONCONST(Internal, PluginNotification, &PluginNotificationTask::ScriptFunc, "notification:user:cr:nr:itype:author:comment:resolvedMacros:useResolvedMacros"); +REGISTER_FUNCTION_NONCONST(Internal, PluginNotification, &PluginNotificationTask::ScriptFunc, "notification:user:cr:itype:author:comment:resolvedMacros:useResolvedMacros"); void PluginNotificationTask::ScriptFunc(const Notification::Ptr& notification, - const User::Ptr& user, const CheckResult::Ptr& cr, const NotificationResult::Ptr& nr, - int itype, const String& author, const String& comment, - const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros) + const User::Ptr& user, const CheckResult::Ptr& cr, int itype, + const String& author, const String& comment, const Dictionary::Ptr& resolvedMacros, + bool useResolvedMacros) { REQUIRE_NOT_NULL(notification); REQUIRE_NOT_NULL(user); @@ -55,28 +55,16 @@ void PluginNotificationTask::ScriptFunc(const Notification::Ptr& notification, PluginUtility::ExecuteCommand(commandObj, checkable, cr, resolvers, resolvedMacros, useResolvedMacros, timeout, - std::bind(&PluginNotificationTask::ProcessFinishedHandler, checkable, notification, nr, _1, _2)); + std::bind(&PluginNotificationTask::ProcessFinishedHandler, checkable, _1, _2)); } -void PluginNotificationTask::ProcessFinishedHandler(const Checkable::Ptr& checkable, - const Notification::Ptr& notification, const NotificationResult::Ptr& nr, const Value& commandLine, const ProcessResult& pr) +void PluginNotificationTask::ProcessFinishedHandler(const Checkable::Ptr& checkable, const Value& commandLine, const ProcessResult& pr) { if (pr.ExitStatus != 0) { Process::Arguments parguments = Process::PrepareCommand(commandLine); Log(LogWarning, "PluginNotificationTask") - << "Notification command for checkable '" << checkable->GetName() - << "' and notification '" << notification->GetName() << "' (PID: " << pr.PID + << "Notification command for object '" << checkable->GetName() << "' (PID: " << pr.PID << ", arguments: " << Process::PrettyPrintArguments(parguments) << ") terminated with exit code " << pr.ExitStatus << ", output: " << pr.Output; } - - String output = pr.Output.Trim(); - - nr->SetCommand(commandLine); - nr->SetOutput(output); - nr->SetExitStatus(pr.ExitStatus); - nr->SetExecutionStart(pr.ExecutionStart); - nr->SetExecutionEnd(pr.ExecutionEnd); - - notification->ProcessNotificationResult(nr); } diff --git a/lib/methods/pluginnotificationtask.hpp b/lib/methods/pluginnotificationtask.hpp index 6a741b73b..66d653924 100644 --- a/lib/methods/pluginnotificationtask.hpp +++ b/lib/methods/pluginnotificationtask.hpp @@ -20,15 +20,14 @@ class PluginNotificationTask { public: static void ScriptFunc(const Notification::Ptr& notification, - const User::Ptr& user, const CheckResult::Ptr& cr, const NotificationResult::Ptr& nr, - int itype, const String& author, const String& comment, + const User::Ptr& user, const CheckResult::Ptr& cr, int itype, + const String& author, const String& comment, const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros); private: PluginNotificationTask(); static void ProcessFinishedHandler(const Checkable::Ptr& checkable, - const Notification::Ptr& notification, const NotificationResult::Ptr& nr, const Value& commandLine, const ProcessResult& pr); };