From: Gunnar Beutner Date: Thu, 12 Sep 2013 08:17:14 +0000 (+0200) Subject: Refactor authority checks a bit. X-Git-Tag: v0.0.3~549 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3b1b9d127472752792d28d78819f26dd11e23dbf;p=icinga2 Refactor authority checks a bit. --- diff --git a/components/cluster/clustercomponent.cpp b/components/cluster/clustercomponent.cpp index 8e175ad3b..fbd4dff59 100644 --- a/components/cluster/clustercomponent.cpp +++ b/components/cluster/clustercomponent.cpp @@ -458,8 +458,8 @@ void ClusterComponent::ClusterTimerHandler(void) /* Eww. */ Dictionary::Ptr features = boost::make_shared(); - features->Set("checker", DynamicType::GetByName("CheckerComponent") ? 1 : 0); - features->Set("notification", DynamicType::GetByName("NotificationComponent") ? 1 : 0); + features->Set("checker", SupportsChecks() ? 1 : 0); + features->Set("notification", SupportsNotifications() ? 1 : 0); params->Set("features", features); Dictionary::Ptr message = boost::make_shared(); @@ -1126,14 +1126,14 @@ void ClusterComponent::CheckAuthorityHandler(const DynamicObject::Ptr& object, c Array::Ptr authorities = object->GetAuthorities(); std::vector endpoints; - if ((type == "checker" && DynamicType::GetByName("CheckerComponent")) || - (type == "notification" && DynamicType::GetByName("NotificationComponent"))) + if ((type == "checker" && SupportsChecks()) || + (type == "notification" && SupportsNotifications())) endpoints.push_back(GetIdentity()); BOOST_FOREACH(const Endpoint::Ptr& endpoint, DynamicType::GetObjects()) { bool match = false; - if (!endpoint->IsConnected()) + if (!endpoint->IsConnected() || !endpoint->HasFeature(type)) continue; if (authorities) { @@ -1163,6 +1163,16 @@ void ClusterComponent::CheckAuthorityHandler(const DynamicObject::Ptr& object, c result = (endpoints[index] == GetIdentity()); } +bool ClusterComponent::SupportsChecks(void) +{ + return DynamicType::GetByName("CheckerComponent"); +} + +bool ClusterComponent::SupportsNotifications(void) +{ + return DynamicType::GetByName("NotificationComponent"); +} + void ClusterComponent::InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes) const { DynamicObject::InternalSerialize(bag, attributeTypes); diff --git a/components/cluster/clustercomponent.h b/components/cluster/clustercomponent.h index 593044198..2af62e34d 100644 --- a/components/cluster/clustercomponent.h +++ b/components/cluster/clustercomponent.h @@ -112,6 +112,9 @@ private: void AcknowledgementClearedHandler(const Service::Ptr& service, const String& authority); void MessageHandler(const Endpoint::Ptr& sender, const Dictionary::Ptr& message); void CheckAuthorityHandler(const DynamicObject::Ptr& object, const String& type, bool& result); + + static bool SupportsChecks(void); + static bool SupportsNotifications(void); }; }