From: Gunnar Beutner Date: Thu, 8 Aug 2013 06:30:19 +0000 (+0200) Subject: Implement status updates for contacts. X-Git-Tag: v0.0.3~726 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=17aedad7a79055c2475aac0f8ddd55261e90760f;p=icinga2 Implement status updates for contacts. --- diff --git a/lib/icinga/notification.cpp b/lib/icinga/notification.cpp index e083103fc..d56495f12 100644 --- a/lib/icinga/notification.cpp +++ b/lib/icinga/notification.cpp @@ -358,6 +358,7 @@ void Notification::ExecuteNotificationHelper(NotificationType type, const User:: { ObjectLock olock(this); UpdateNotificationNumber(); + SetLastNotification(Utility::GetTime()); } RequestMessage rm; diff --git a/lib/icinga/user.cpp b/lib/icinga/user.cpp index 0790e2397..d89765a41 100644 --- a/lib/icinga/user.cpp +++ b/lib/icinga/user.cpp @@ -37,6 +37,7 @@ User::User(const Dictionary::Ptr& serializedUpdate) RegisterAttribute("notification_period", Attribute_Config, &m_NotificationPeriod); RegisterAttribute("notification_type_filter", Attribute_Config, &m_NotificationTypeFilter); RegisterAttribute("notification_state_filter", Attribute_Config, &m_NotificationStateFilter); + RegisterAttribute("last_notification", Attribute_Replicated, &m_LastNotification); } User::~User(void) @@ -112,6 +113,17 @@ unsigned long User::GetNotificationStateFilter(void) const return m_NotificationStateFilter; } +void User::SetLastNotification(double ts) +{ + m_LastNotification = ts; + Touch("last_notification"); +} + +double User::GetLastNotification(void) const +{ + return m_LastNotification; +} + bool User::ResolveMacro(const String& macro, const Dictionary::Ptr& cr, String *result) const { if (macro == "CONTACTNAME") { @@ -131,3 +143,4 @@ bool User::ResolveMacro(const String& macro, const Dictionary::Ptr& cr, String * return false; } } + diff --git a/lib/icinga/user.h b/lib/icinga/user.h index 7a5f3dbec..5b610068f 100644 --- a/lib/icinga/user.h +++ b/lib/icinga/user.h @@ -53,6 +53,8 @@ public: TimePeriod::Ptr GetNotificationPeriod(void) const; unsigned long GetNotificationTypeFilter(void) const; unsigned long GetNotificationStateFilter(void) const; + void SetLastNotification(double ts); + double GetLastNotification(void) const; Dictionary::Ptr GetMacros(void) const; @@ -69,6 +71,7 @@ private: Attribute m_NotificationPeriod; Attribute m_NotificationTypeFilter; Attribute m_NotificationStateFilter; + Attribute m_LastNotification; }; } diff --git a/lib/ido/userdbobject.cpp b/lib/ido/userdbobject.cpp index 83a3e0db1..dc5c4863d 100644 --- a/lib/ido/userdbobject.cpp +++ b/lib/ido/userdbobject.cpp @@ -72,13 +72,18 @@ Dictionary::Ptr UserDbObject::GetStatusFields(void) const Dictionary::Ptr fields = boost::make_shared(); User::Ptr user = static_pointer_cast(GetObject()); - fields->Set("host_notifications_enabled", Empty); - fields->Set("service_notifications_enabled", Empty); - fields->Set("last_host_notification", Empty); - fields->Set("last_service_notification", Empty); + fields->Set("host_notifications_enabled", user->GetEnableNotifications()); + fields->Set("service_notifications_enabled", user->GetEnableNotifications()); + fields->Set("last_host_notification", DbValue::FromTimestamp(user->GetLastNotification())); + fields->Set("last_service_notification", DbValue::FromTimestamp(user->GetLastNotification())); fields->Set("modified_attributes", Empty); fields->Set("modified_host_attributes", Empty); fields->Set("modified_service_attributes", Empty); return fields; } + +bool UserDbObject::IsStatusAttribute(const String& attribute) const +{ + return (attribute == "last_notification"); +} diff --git a/lib/ido/userdbobject.h b/lib/ido/userdbobject.h index e3e9a3ba5..0a663f5b9 100644 --- a/lib/ido/userdbobject.h +++ b/lib/ido/userdbobject.h @@ -40,6 +40,8 @@ public: virtual Dictionary::Ptr GetConfigFields(void) const; virtual Dictionary::Ptr GetStatusFields(void) const; + + virtual bool IsStatusAttribute(const String& attribute) const; }; }