From: Gunnar Beutner Date: Thu, 29 Aug 2013 11:06:36 +0000 (+0200) Subject: Implement cluster events for notifications/flapping. X-Git-Tag: v0.0.3~663 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0a60128080b848d296f3d01b19a2618ed119bea4;p=icinga2 Implement cluster events for notifications/flapping. --- diff --git a/components/cluster/clustercomponent.cpp b/components/cluster/clustercomponent.cpp index 90d1868c9..231f0c2ac 100644 --- a/components/cluster/clustercomponent.cpp +++ b/components/cluster/clustercomponent.cpp @@ -59,6 +59,8 @@ void ClusterComponent::Start(void) Service::OnForceNextNotificationChanged.connect(bind(&ClusterComponent::ForceNextNotificationChangedHandler, this, _1, _2, _3)); Service::OnEnableActiveChecksChanged.connect(bind(&ClusterComponent::EnableActiveChecksChangedHandler, this, _1, _2, _3)); Service::OnEnablePassiveChecksChanged.connect(bind(&ClusterComponent::EnablePassiveChecksChangedHandler, this, _1, _2, _3)); + Service::OnEnableNotificationsChanged.connect(bind(&ClusterComponent::EnableNotificationsChangedHandler, this, _1, _2, _3)); + Service::OnEnableFlappingChanged.connect(bind(&ClusterComponent::EnableFlappingChangedHandler, this, _1, _2, _3)); Service::OnCommentAdded.connect(bind(&ClusterComponent::CommentAddedHandler, this, _1, _2, _3)); Service::OnCommentRemoved.connect(bind(&ClusterComponent::CommentRemovedHandler, this, _1, _2, _3)); Service::OnDowntimeAdded.connect(bind(&ClusterComponent::DowntimeAddedHandler, this, _1, _2, _3)); @@ -388,6 +390,44 @@ void ClusterComponent::EnablePassiveChecksChangedHandler(const Service::Ptr& ser } } +void ClusterComponent::EnableNotificationsChangedHandler(const Service::Ptr& service, bool enabled, const String& authority) +{ + if (!authority.IsEmpty() && authority != GetIdentity()) + return; + + Dictionary::Ptr params = boost::make_shared(); + params->Set("service", service->GetName()); + params->Set("enabled", enabled); + + Dictionary::Ptr message = boost::make_shared(); + message->Set("jsonrpc", "2.0"); + message->Set("method", "cluster::SetEnableNotifications"); + message->Set("params", params); + + BOOST_FOREACH(const Endpoint::Ptr& endpoint, DynamicType::GetObjects()) { + endpoint->SendMessage(message); + } +} + +void ClusterComponent::EnableFlappingChangedHandler(const Service::Ptr& service, bool enabled, const String& authority) +{ + if (!authority.IsEmpty() && authority != GetIdentity()) + return; + + Dictionary::Ptr params = boost::make_shared(); + params->Set("service", service->GetName()); + params->Set("enabled", enabled); + + Dictionary::Ptr message = boost::make_shared(); + message->Set("jsonrpc", "2.0"); + message->Set("method", "cluster::SetEnableFlapping"); + message->Set("params", params); + + BOOST_FOREACH(const Endpoint::Ptr& endpoint, DynamicType::GetObjects()) { + endpoint->SendMessage(message); + } +} + void ClusterComponent::CommentAddedHandler(const Service::Ptr& service, const Dictionary::Ptr& comment, const String& authority) { if (!authority.IsEmpty() && authority != GetIdentity()) @@ -545,6 +585,28 @@ void ClusterComponent::MessageHandler(const Endpoint::Ptr& sender, const Diction bool enabled = params->Get("enabled"); service->SetEnablePassiveChecks(enabled, sender->GetName()); + } else if (message->Get("method") == "cluster::SetEnableNotifications") { + String svc = params->Get("service"); + + Service::Ptr service = Service::GetByName(svc); + + if (!service) + return; + + bool enabled = params->Get("enabled"); + + service->SetEnableNotifications(enabled, sender->GetName()); + } else if (message->Get("method") == "cluster::SetEnableFlapping") { + String svc = params->Get("service"); + + Service::Ptr service = Service::GetByName(svc); + + if (!service) + return; + + bool enabled = params->Get("enabled"); + + service->SetEnableFlapping(enabled, sender->GetName()); } else if (message->Get("method") == "cluster::SetNextNotification") { String nfc = params->Get("notification"); diff --git a/components/cluster/clustercomponent.h b/components/cluster/clustercomponent.h index 9dc3e7f2e..991e051c8 100644 --- a/components/cluster/clustercomponent.h +++ b/components/cluster/clustercomponent.h @@ -86,6 +86,8 @@ private: void ForceNextNotificationChangedHandler(const Service::Ptr& service, bool forced, const String& authority); void EnableActiveChecksChangedHandler(const Service::Ptr& service, bool enabled, const String& authority); void EnablePassiveChecksChangedHandler(const Service::Ptr& service, bool enabled, const String& authority); + void EnableNotificationsChangedHandler(const Service::Ptr& service, bool enabled, const String& authority); + void EnableFlappingChangedHandler(const Service::Ptr& service, bool enabled, const String& authority); void CommentAddedHandler(const Service::Ptr& service, const Dictionary::Ptr& comment, const String& authority); void CommentRemovedHandler(const Service::Ptr& service, const Dictionary::Ptr& comment, const String& authority); void DowntimeAddedHandler(const Service::Ptr& service, const Dictionary::Ptr& downtime, const String& authority); diff --git a/lib/icinga/service-check.cpp b/lib/icinga/service-check.cpp index 00f51268b..36cdd202f 100644 --- a/lib/icinga/service-check.cpp +++ b/lib/icinga/service-check.cpp @@ -43,6 +43,8 @@ boost::signals2::signal Servi boost::signals2::signal Service::OnForceNextCheckChanged; boost::signals2::signal Service::OnEnableActiveChecksChanged; boost::signals2::signal Service::OnEnablePassiveChecksChanged; +boost::signals2::signal Service::OnEnableNotificationsChanged; +boost::signals2::signal Service::OnEnableFlappingChanged; boost::signals2::signal Service::OnFlappingChanged; CheckCommand::Ptr Service::GetCheckCommand(void) const diff --git a/lib/icinga/service-flapping.cpp b/lib/icinga/service-flapping.cpp index 562af9131..56f7239c7 100644 --- a/lib/icinga/service-flapping.cpp +++ b/lib/icinga/service-flapping.cpp @@ -57,11 +57,12 @@ bool Service::GetEnableFlapping(void) const } -void Service::SetEnableFlapping(bool enabled) +void Service::SetEnableFlapping(bool enabled, const String& authority) { - OnFlappingChanged(GetSelf(), enabled ? FlappingEnabled : FlappingDisabled); - m_EnableFlapping = enabled; + + OnFlappingChanged(GetSelf(), enabled ? FlappingEnabled : FlappingDisabled); + Utility::QueueAsyncCallback(bind(boost::ref(OnEnableFlappingChanged), GetSelf(), enabled, authority)); } void Service::UpdateFlappingStatus(bool stateChange) diff --git a/lib/icinga/service-notification.cpp b/lib/icinga/service-notification.cpp index 551061960..d7c520f8e 100644 --- a/lib/icinga/service-notification.cpp +++ b/lib/icinga/service-notification.cpp @@ -207,9 +207,11 @@ bool Service::GetEnableNotifications(void) const return m_EnableNotifications; } -void Service::SetEnableNotifications(bool enabled) +void Service::SetEnableNotifications(bool enabled, const String& authority) { m_EnableNotifications = enabled; + + Utility::QueueAsyncCallback(bind(boost::ref(OnEnableNotificationsChanged), GetSelf(), enabled, authority)); } bool Service::GetForceNextNotification(void) const diff --git a/lib/icinga/service.h b/lib/icinga/service.h index 3febc6931..5ab542a95 100644 --- a/lib/icinga/service.h +++ b/lib/icinga/service.h @@ -239,14 +239,16 @@ public: static boost::signals2::signal OnForceNextNotificationChanged; static boost::signals2::signal OnEnableActiveChecksChanged; static boost::signals2::signal OnEnablePassiveChecksChanged; + static boost::signals2::signal OnEnableNotificationsChanged; + static boost::signals2::signal OnEnableFlappingChanged; static boost::signals2::signal OnNewCheckResult; static boost::signals2::signal OnNotificationsRequested; static boost::signals2::signal OnNotificationSentChanged; - static boost::signals2::signal OnFlappingChanged; static boost::signals2::signal OnCommentAdded; static boost::signals2::signal OnCommentRemoved; static boost::signals2::signal OnDowntimeAdded; static boost::signals2::signal OnDowntimeRemoved; + static boost::signals2::signal OnFlappingChanged; static boost::signals2::signal OnDowntimeTriggered; virtual bool ResolveMacro(const String& macro, const Dictionary::Ptr& cr, String *result) const; @@ -299,7 +301,7 @@ public: Dictionary::Ptr GetNotificationDescriptions(void) const; bool GetEnableNotifications(void) const; - void SetEnableNotifications(bool enabled); + void SetEnableNotifications(bool enabled, const String& authority = String()); void SendNotifications(NotificationType type, const Dictionary::Ptr& cr, const String& author = "", const String& text = ""); @@ -320,7 +322,7 @@ public: /* Flapping Detection */ bool GetEnableFlapping(void) const; - void SetEnableFlapping(bool enabled); + void SetEnableFlapping(bool enabled, const String& authority = String()); double GetFlappingCurrent(void) const; double GetFlappingThreshold(void) const;