]> granicus.if.org Git - icinga2/commitdiff
Fix wrong log lag in cluster-zone check
authorMichael Friedrich <michael.friedrich@netways.de>
Fri, 25 Sep 2015 12:23:42 +0000 (14:23 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Fri, 25 Sep 2015 12:28:01 +0000 (14:28 +0200)
Refactor the calculation into a generic function.

fixes #8805

lib/methods/clusterzonechecktask.cpp
lib/remote/apilistener.cpp
lib/remote/apilistener.hpp

index 8cd788ad1595f97230cb6654119df41c2b6ead28..38c8a718df4821c1d30570699b5cd8a973bead1d 100644 (file)
@@ -81,28 +81,28 @@ void ClusterZoneCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const Che
        }
 
        bool connected = false;
-       double lag = 0;
+       double zoneLag = 0;
 
        BOOST_FOREACH(const Endpoint::Ptr& endpoint, zone->GetEndpoints()) {
-               double eplag = Utility::GetTime() - endpoint->GetRemoteLogPosition();
-
                if (endpoint->IsConnected())
                        connected = true;
 
-               if ((endpoint->GetSyncing() || !endpoint->IsConnected()) && eplag > lag)
-                       lag = eplag;
+               double eplag = ApiListener::CalculateZoneLag(endpoint);
+
+               if (eplag > 0 && eplag > zoneLag)
+                       zoneLag = eplag;
        }
 
        if (!connected) {
                cr->SetState(ServiceCritical);
-               cr->SetOutput("Zone '" + zoneName + "' is not connected. Log lag: " + Utility::FormatDuration(lag));
+               cr->SetOutput("Zone '" + zoneName + "' is not connected. Log lag: " + Utility::FormatDuration(zoneLag));
        } else {
                cr->SetState(ServiceOK);
-               cr->SetOutput("Zone '" + zoneName + "' is connected. Log lag: " + Utility::FormatDuration(lag));
+               cr->SetOutput("Zone '" + zoneName + "' is connected. Log lag: " + Utility::FormatDuration(zoneLag));
        }
 
        Array::Ptr perfdata = new Array();
-       perfdata->Add(new PerfdataValue("slave_lag", lag));
+       perfdata->Add(new PerfdataValue("slave_lag", zoneLag));
        cr->SetPerformanceData(perfdata);
 
        checkable->ProcessCheckResult(cr);
index 101efccfe885456c0a0fd689077d6b5e8dad6331..c2173cfaae0e1df208430e0fca38291ad1df19b4 100644 (file)
@@ -836,6 +836,17 @@ std::pair<Dictionary::Ptr, Dictionary::Ptr> ApiListener::GetStatus(void)
        return std::make_pair(status, perfdata);
 }
 
+double ApiListener::CalculateZoneLag(const Endpoint::Ptr& endpoint)
+{
+       double remoteLogPosition = endpoint->GetRemoteLogPosition();
+       double eplag = Utility::GetTime() - remoteLogPosition;
+
+       if ((endpoint->GetSyncing() || !endpoint->IsConnected()) && remoteLogPosition != 0)
+               return eplag;
+
+       return 0;
+}
+
 void ApiListener::AddAnonymousClient(const ApiClient::Ptr& aclient)
 {
        ObjectLock olock(this);
index 71a33e5785c2e12e00ab04ef1b0a3142824e356c..74e39b534d595ea741eaa5f30552f49c8c060ed9 100644 (file)
@@ -68,9 +68,12 @@ public:
        void RemoveAnonymousClient(const ApiClient::Ptr& aclient);
        std::set<ApiClient::Ptr> GetAnonymousClients(void) const;
 
+       static double CalculateZoneLag(const Endpoint::Ptr& endpoint);
+
        static Value ConfigUpdateHandler(const MessageOrigin& origin, const Dictionary::Ptr& params);
 
        static Value HelloAPIHandler(const MessageOrigin& origin, const Dictionary::Ptr& params);
+
 protected:
        virtual void OnConfigLoaded(void);
        virtual void OnAllConfigLoaded(void);