]> granicus.if.org Git - icinga2/commitdiff
Fix cluster check w/ immediate parent and child zone endpoints
authorMichael Friedrich <michael.friedrich@netways.de>
Fri, 31 Jul 2015 14:19:58 +0000 (16:19 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Wed, 12 Aug 2015 08:51:37 +0000 (10:51 +0200)
fixes #9262

lib/remote/apilistener.cpp

index ea55fa459ed9ca9d070661cc5cf514f5ca410798..94f94a7801ac89b82ed760880879c6815e282b13 100644 (file)
@@ -797,16 +797,27 @@ std::pair<Dictionary::Ptr, Dictionary::Ptr> ApiListener::GetStatus(void)
        Array::Ptr not_connected_endpoints = new Array();
        Array::Ptr connected_endpoints = new Array();
 
-       BOOST_FOREACH(const Endpoint::Ptr& endpoint, DynamicType::GetObjectsByType<Endpoint>()) {
-               if (endpoint->GetName() == GetIdentity())
+       Zone::Ptr my_zone = Zone::GetLocalZone();
+
+       BOOST_FOREACH(const Zone::Ptr& zone, DynamicType::GetObjectsByType<Zone>()) {
+               /* only check endpoints in a) the same zone b) our parent zone c) immediate child zones */
+               if (my_zone != zone && my_zone != zone->GetParent() && zone != my_zone->GetParent()) {
+                       Log(LogDebug, "ApiListener")
+                           << "Not checking connection to Zone '" << zone->GetName() << "' because it's not in the same zone, a parent or a child zone.";
                        continue;
+               }
 
-               count_endpoints++;
+               BOOST_FOREACH(const Endpoint::Ptr& endpoint, zone->GetEndpoints()) {
+                       if (endpoint->GetName() == GetIdentity())
+                               continue;
 
-               if (!endpoint->IsConnected())
-                       not_connected_endpoints->Add(endpoint->GetName());
-               else
-                       connected_endpoints->Add(endpoint->GetName());
+                       count_endpoints++;
+
+                       if (!endpoint->IsConnected())
+                               not_connected_endpoints->Add(endpoint->GetName());
+                       else
+                               connected_endpoints->Add(endpoint->GetName());
+               }
        }
 
        status->Set("num_endpoints", count_endpoints);