From b25ba7a3166b32cb8c0744220baa7d98ef58783d Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Wed, 14 Jun 2023 12:48:22 +0200 Subject: [PATCH] Notification#BeginExecuteNotification(): track state change notifications --- lib/icinga/notification.cpp | 10 ++++++++++ lib/icinga/notification.ti | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/lib/icinga/notification.cpp b/lib/icinga/notification.cpp index fb7bc1c70..05628969c 100644 --- a/lib/icinga/notification.cpp +++ b/lib/icinga/notification.cpp @@ -452,6 +452,16 @@ void Notification::BeginExecuteNotification(NotificationType type, const CheckRe /* collect all notified users */ allNotifiedUsers.insert(user); + switch (type) { + case NotificationProblem: + case NotificationRecovery: { + auto [host, service] = GetHostService(checkable); + GetLastNotifiedStatePerUser()->Set(userName, service ? service->GetState() : host->GetState()); + } + default: + ; + } + /* store all notified users for later recovery checks */ if (type == NotificationProblem && !notifiedProblemUsers->Contains(userName)) notifiedProblemUsers->Add(userName); diff --git a/lib/icinga/notification.ti b/lib/icinga/notification.ti index 485360757..be0784613 100644 --- a/lib/icinga/notification.ti +++ b/lib/icinga/notification.ti @@ -90,6 +90,10 @@ class Notification : CustomVarObject < NotificationNameComposer default {{{ return 0; }}} }; + [state, no_user_view, no_user_modify] Dictionary::Ptr last_notified_state_per_user { + default {{{ return new Dictionary(); }}} + }; + [config, navigation] name(Endpoint) command_endpoint (CommandEndpointRaw) { navigate {{{ return Endpoint::GetByName(GetCommandEndpointRaw());