Make sure that notified users are stored in state file

refs #7579
This commit is contained in:
Michael Friedrich 2014-11-12 20:32:34 +01:00
parent 0054e78a58
commit f73d69691b
3 changed files with 9 additions and 11 deletions

View File

@ -319,6 +319,7 @@ void Notification::BeginExecuteNotification(NotificationType type, const CheckRe
Service::OnNotificationSendStart(this, checkable, allUsers, type, cr, author, text);
std::set<User::Ptr> allNotifiedUsers;
Array::Ptr notifiedUsers = GetNotifiedUsers();
BOOST_FOREACH(const User::Ptr& user, allUsers) {
String userName = user->GetName();
@ -337,7 +338,7 @@ void Notification::BeginExecuteNotification(NotificationType type, const CheckRe
/* on recovery, check if user was notified before */
if (type == NotificationRecovery) {
if (m_NotifiedUsers.find(userName) == m_NotifiedUsers.end()) {
if (!notifiedUsers->Contains(userName)) {
Log(LogNotice, "Notification")
<< "We did not notify user '" << userName << "' before. Not sending recovery notification.";
continue;
@ -353,12 +354,13 @@ void Notification::BeginExecuteNotification(NotificationType type, const CheckRe
allNotifiedUsers.insert(user);
/* store all notified users for later recovery checks */
m_NotifiedUsers.insert(userName);
if (!notifiedUsers->Contains(userName))
notifiedUsers->Add(userName);
}
/* if this was a recovery notification, reset all notified users */
if (type == NotificationRecovery)
ResetNotifiedUsers();
notifiedUsers->Clear();
/* used in db_ido for notification history */
Service::OnNotificationSentToAllUsers(this, checkable, allNotifiedUsers, type, cr, author, text);
@ -446,11 +448,6 @@ void Notification::ExecuteNotificationHelper(NotificationType type, const User::
}
}
void Notification::ResetNotifiedUsers(void)
{
m_NotifiedUsers.clear();
}
int icinga::ServiceStateToFilter(ServiceState state)
{
switch (state) {

View File

@ -98,7 +98,6 @@ public:
bool CheckNotificationUserFilters(NotificationType type, const User::Ptr& user, bool force);
void ResetNotifiedUsers(void);
Endpoint::Ptr GetCommandEndpoint(void) const;
static String NotificationTypeToString(NotificationType type);
@ -115,8 +114,6 @@ protected:
virtual void Stop(void);
private:
std::set<String> m_NotifiedUsers;
void ExecuteNotificationHelper(NotificationType type, const User::Ptr& user, const CheckResult::Ptr& cr, bool force, const String& author = "", const String& text = "");
static void EvaluateApplyRuleOneInstance(const intrusive_ptr<Checkable>& checkable, const String& name, const Dictionary::Ptr& locals, const ApplyRule& rule);

View File

@ -47,6 +47,10 @@ class Notification : CustomVarObject < NotificationNameComposer
[config, protected] String host_name;
[config, protected] String service_name;
[state] Array::Ptr notified_users {
default {{{ return new Array(); }}}
};
[state] double last_notification;
[state, set_protected] double next_notification (NextNotificationRaw);
[state, set_protected] Value notification_number;