mirror of https://github.com/Icinga/icinga2.git
Implemented status.dat support for notifications.
This commit is contained in:
parent
a649a91cdc
commit
d124e37c91
|
@ -355,7 +355,9 @@ void CompatComponent::DumpServiceStatusAttrs(ofstream& fp, const Service::Ptr& s
|
||||||
<< "\t" << "problem_has_been_acknowledged=" << (service->GetAcknowledgement() != AcknowledgementNone ? 1 : 0) << "\n"
|
<< "\t" << "problem_has_been_acknowledged=" << (service->GetAcknowledgement() != AcknowledgementNone ? 1 : 0) << "\n"
|
||||||
<< "\t" << "acknowledgement_type=" << static_cast<int>(service->GetAcknowledgement()) << "\n"
|
<< "\t" << "acknowledgement_type=" << static_cast<int>(service->GetAcknowledgement()) << "\n"
|
||||||
<< "\t" << "acknowledgement_end_time=" << service->GetAcknowledgementExpiry() << "\n"
|
<< "\t" << "acknowledgement_end_time=" << service->GetAcknowledgementExpiry() << "\n"
|
||||||
<< "\t" << "scheduled_downtime_depth=" << (service->IsInDowntime() ? 1 : 0) << "\n";
|
<< "\t" << "scheduled_downtime_depth=" << (service->IsInDowntime() ? 1 : 0) << "\n"
|
||||||
|
<< "\t" << "last_notification=" << service->GetLastNotification() << "\n"
|
||||||
|
<< "\t" << "next_notification=" << service->GetNextNotification() << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompatComponent::DumpServiceStatus(ofstream& fp, const Service::Ptr& service)
|
void CompatComponent::DumpServiceStatus(ofstream& fp, const Service::Ptr& service)
|
||||||
|
|
|
@ -274,3 +274,19 @@ void Service::DowntimeExpireTimerHandler(void)
|
||||||
service->RemoveExpiredDowntimes();
|
service->RemoveExpiredDowntimes();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Service::IsInDowntime(void) const
|
||||||
|
{
|
||||||
|
Dictionary::Ptr downtimes = GetDowntimes();
|
||||||
|
|
||||||
|
if (!downtimes)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Dictionary::Ptr downtime;
|
||||||
|
BOOST_FOREACH(tie(tuples::ignore, downtime), downtimes) {
|
||||||
|
if (Service::IsDowntimeActive(downtime))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ void Service::RequestNotifications(NotificationType type) const
|
||||||
EndpointManager::GetInstance()->SendAnycastMessage(Endpoint::Ptr(), msg);
|
EndpointManager::GetInstance()->SendAnycastMessage(Endpoint::Ptr(), msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Service::SendNotifications(NotificationType type) const
|
void Service::SendNotifications(NotificationType type)
|
||||||
{
|
{
|
||||||
Logger::Write(LogInformation, "icinga", "Sending notifications for service '" + GetName() + "'");
|
Logger::Write(LogInformation, "icinga", "Sending notifications for service '" + GetName() + "'");
|
||||||
|
|
||||||
|
@ -51,6 +51,8 @@ void Service::SendNotifications(NotificationType type) const
|
||||||
BOOST_FOREACH(const Notification::Ptr& notification, notifications) {
|
BOOST_FOREACH(const Notification::Ptr& notification, notifications) {
|
||||||
notification->SendNotification(type);
|
notification->SendNotification(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetLastNotification(Utility::GetTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Service::InvalidateNotificationsCache(void)
|
void Service::InvalidateNotificationsCache(void)
|
||||||
|
@ -182,3 +184,33 @@ void Service::UpdateSlaveNotifications(void)
|
||||||
|
|
||||||
Set("slave_notifications", newNotifications);
|
Set("slave_notifications", newNotifications);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double Service::GetLastNotification(void) const
|
||||||
|
{
|
||||||
|
Value value = Get("last_notification");
|
||||||
|
|
||||||
|
if (value.IsEmpty())
|
||||||
|
value = 0;
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Service::SetLastNotification(double time)
|
||||||
|
{
|
||||||
|
Set("last_notification", time);
|
||||||
|
}
|
||||||
|
|
||||||
|
double Service::GetNextNotification(void) const
|
||||||
|
{
|
||||||
|
Value value = Get("next_notification");
|
||||||
|
|
||||||
|
if (value.IsEmpty())
|
||||||
|
value = 0;
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Service::SetNextNotification(double time)
|
||||||
|
{
|
||||||
|
Set("next_notification", time);
|
||||||
|
}
|
||||||
|
|
|
@ -38,7 +38,9 @@ static AttributeDescription serviceAttributes[] = {
|
||||||
{ "acknowledgement", Attribute_Replicated },
|
{ "acknowledgement", Attribute_Replicated },
|
||||||
{ "acknowledgement_expiry", Attribute_Replicated },
|
{ "acknowledgement_expiry", Attribute_Replicated },
|
||||||
{ "downtimes", Attribute_Replicated },
|
{ "downtimes", Attribute_Replicated },
|
||||||
{ "comments", Attribute_Replicated }
|
{ "comments", Attribute_Replicated },
|
||||||
|
{ "last_notification", Attribute_Replicated },
|
||||||
|
{ "next_notification", Attribute_Replicated }
|
||||||
};
|
};
|
||||||
|
|
||||||
REGISTER_TYPE(Service, serviceAttributes);
|
REGISTER_TYPE(Service, serviceAttributes);
|
||||||
|
@ -227,22 +229,6 @@ bool Service::IsReachable(void) const
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Service::IsInDowntime(void) const
|
|
||||||
{
|
|
||||||
Dictionary::Ptr downtimes = GetDowntimes();
|
|
||||||
|
|
||||||
if (!downtimes)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
Dictionary::Ptr downtime;
|
|
||||||
BOOST_FOREACH(tie(tuples::ignore, downtime), downtimes) {
|
|
||||||
if (Service::IsDowntimeActive(downtime))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Service::SetSchedulingOffset(long offset)
|
void Service::SetSchedulingOffset(long offset)
|
||||||
{
|
{
|
||||||
Set("scheduling_offset", offset);
|
Set("scheduling_offset", offset);
|
||||||
|
|
|
@ -224,7 +224,7 @@ public:
|
||||||
|
|
||||||
/* Notifications */
|
/* Notifications */
|
||||||
void RequestNotifications(NotificationType type) const;
|
void RequestNotifications(NotificationType type) const;
|
||||||
void SendNotifications(NotificationType type) const;
|
void SendNotifications(NotificationType type);
|
||||||
|
|
||||||
static void InvalidateNotificationsCache(void);
|
static void InvalidateNotificationsCache(void);
|
||||||
static void ValidateNotificationsCache(void);
|
static void ValidateNotificationsCache(void);
|
||||||
|
@ -233,6 +233,12 @@ public:
|
||||||
|
|
||||||
void UpdateSlaveNotifications(void);
|
void UpdateSlaveNotifications(void);
|
||||||
|
|
||||||
|
double GetLastNotification(void) const;
|
||||||
|
void SetLastNotification(double time);
|
||||||
|
|
||||||
|
double GetNextNotification(void) const;
|
||||||
|
void SetNextNotification(double time);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void OnAttributeChanged(const String& name, const Value& oldValue);
|
virtual void OnAttributeChanged(const String& name, const Value& oldValue);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue