]> granicus.if.org Git - icinga2/commitdiff
Implement status updates for contacts.
authorGunnar Beutner <gunnar.beutner@netways.de>
Thu, 8 Aug 2013 06:30:19 +0000 (08:30 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Thu, 8 Aug 2013 06:38:12 +0000 (08:38 +0200)
lib/icinga/notification.cpp
lib/icinga/user.cpp
lib/icinga/user.h
lib/ido/userdbobject.cpp
lib/ido/userdbobject.h

index e083103fcab2c3938bdcc1e9910d7767ac7c05a3..d56495f12a928889f4955e572ee24d06fb62e856 100644 (file)
@@ -358,6 +358,7 @@ void Notification::ExecuteNotificationHelper(NotificationType type, const User::
                {
                        ObjectLock olock(this);
                        UpdateNotificationNumber();
+                       SetLastNotification(Utility::GetTime());
                }
 
                RequestMessage rm;
index 0790e2397f9a2e723000e2c788756740006d848f..d89765a4192ab256c49460c47596fc5df7f21446 100644 (file)
@@ -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;
        }
 }
+
index 7a5f3dbecad01f087c8e1be083f9997aef174272..5b610068fab00d8fcae4c917d5a900a610d6e0ec 100644 (file)
@@ -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<String> m_NotificationPeriod;
        Attribute<long> m_NotificationTypeFilter;
        Attribute<long> m_NotificationStateFilter;
+       Attribute<double> m_LastNotification;
 };
 
 }
index 83a3e0db151f12ee9e388173a62c3edd61e8346c..dc5c4863dd8bf28b3a2f803360a64411325a0b29 100644 (file)
@@ -72,13 +72,18 @@ Dictionary::Ptr UserDbObject::GetStatusFields(void) const
        Dictionary::Ptr fields = boost::make_shared<Dictionary>();
        User::Ptr user = static_pointer_cast<User>(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");
+}
index e3e9a3ba56c82284fce2dc6efde8636b323984a5..0a663f5b9a2f7227f94f1999fdecbed82c11e8e7 100644 (file)
@@ -40,6 +40,8 @@ public:
 
        virtual Dictionary::Ptr GetConfigFields(void) const;
        virtual Dictionary::Ptr GetStatusFields(void) const;
+
+       virtual bool IsStatusAttribute(const String& attribute) const;
 };
 
 }