Implement status updates for contacts.

This commit is contained in:
Gunnar Beutner 2013-08-08 08:30:19 +02:00
parent be582ad735
commit 17aedad7a7
5 changed files with 28 additions and 4 deletions

View File

@ -358,6 +358,7 @@ void Notification::ExecuteNotificationHelper(NotificationType type, const User::
{ {
ObjectLock olock(this); ObjectLock olock(this);
UpdateNotificationNumber(); UpdateNotificationNumber();
SetLastNotification(Utility::GetTime());
} }
RequestMessage rm; RequestMessage rm;

View File

@ -37,6 +37,7 @@ User::User(const Dictionary::Ptr& serializedUpdate)
RegisterAttribute("notification_period", Attribute_Config, &m_NotificationPeriod); RegisterAttribute("notification_period", Attribute_Config, &m_NotificationPeriod);
RegisterAttribute("notification_type_filter", Attribute_Config, &m_NotificationTypeFilter); RegisterAttribute("notification_type_filter", Attribute_Config, &m_NotificationTypeFilter);
RegisterAttribute("notification_state_filter", Attribute_Config, &m_NotificationStateFilter); RegisterAttribute("notification_state_filter", Attribute_Config, &m_NotificationStateFilter);
RegisterAttribute("last_notification", Attribute_Replicated, &m_LastNotification);
} }
User::~User(void) User::~User(void)
@ -112,6 +113,17 @@ unsigned long User::GetNotificationStateFilter(void) const
return m_NotificationStateFilter; 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 bool User::ResolveMacro(const String& macro, const Dictionary::Ptr& cr, String *result) const
{ {
if (macro == "CONTACTNAME") { if (macro == "CONTACTNAME") {
@ -131,3 +143,4 @@ bool User::ResolveMacro(const String& macro, const Dictionary::Ptr& cr, String *
return false; return false;
} }
} }

View File

@ -53,6 +53,8 @@ public:
TimePeriod::Ptr GetNotificationPeriod(void) const; TimePeriod::Ptr GetNotificationPeriod(void) const;
unsigned long GetNotificationTypeFilter(void) const; unsigned long GetNotificationTypeFilter(void) const;
unsigned long GetNotificationStateFilter(void) const; unsigned long GetNotificationStateFilter(void) const;
void SetLastNotification(double ts);
double GetLastNotification(void) const;
Dictionary::Ptr GetMacros(void) const; Dictionary::Ptr GetMacros(void) const;
@ -69,6 +71,7 @@ private:
Attribute<String> m_NotificationPeriod; Attribute<String> m_NotificationPeriod;
Attribute<long> m_NotificationTypeFilter; Attribute<long> m_NotificationTypeFilter;
Attribute<long> m_NotificationStateFilter; Attribute<long> m_NotificationStateFilter;
Attribute<double> m_LastNotification;
}; };
} }

View File

@ -72,13 +72,18 @@ Dictionary::Ptr UserDbObject::GetStatusFields(void) const
Dictionary::Ptr fields = boost::make_shared<Dictionary>(); Dictionary::Ptr fields = boost::make_shared<Dictionary>();
User::Ptr user = static_pointer_cast<User>(GetObject()); User::Ptr user = static_pointer_cast<User>(GetObject());
fields->Set("host_notifications_enabled", Empty); fields->Set("host_notifications_enabled", user->GetEnableNotifications());
fields->Set("service_notifications_enabled", Empty); fields->Set("service_notifications_enabled", user->GetEnableNotifications());
fields->Set("last_host_notification", Empty); fields->Set("last_host_notification", DbValue::FromTimestamp(user->GetLastNotification()));
fields->Set("last_service_notification", Empty); fields->Set("last_service_notification", DbValue::FromTimestamp(user->GetLastNotification()));
fields->Set("modified_attributes", Empty); fields->Set("modified_attributes", Empty);
fields->Set("modified_host_attributes", Empty); fields->Set("modified_host_attributes", Empty);
fields->Set("modified_service_attributes", Empty); fields->Set("modified_service_attributes", Empty);
return fields; return fields;
} }
bool UserDbObject::IsStatusAttribute(const String& attribute) const
{
return (attribute == "last_notification");
}

View File

@ -40,6 +40,8 @@ public:
virtual Dictionary::Ptr GetConfigFields(void) const; virtual Dictionary::Ptr GetConfigFields(void) const;
virtual Dictionary::Ptr GetStatusFields(void) const; virtual Dictionary::Ptr GetStatusFields(void) const;
virtual bool IsStatusAttribute(const String& attribute) const;
}; };
} }