diff --git a/lib/methods/clusterzonechecktask.cpp b/lib/methods/clusterzonechecktask.cpp index 8cd788ad159..38c8a718df4 100644 --- a/lib/methods/clusterzonechecktask.cpp +++ b/lib/methods/clusterzonechecktask.cpp @@ -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); diff --git a/lib/remote/apilistener.cpp b/lib/remote/apilistener.cpp index c2914d013b1..c4422108f8e 100644 --- a/lib/remote/apilistener.cpp +++ b/lib/remote/apilistener.cpp @@ -895,9 +895,9 @@ std::pair ApiListener::GetStatus(void) if (endpoint->GetName() == GetIdentity()) continue; - double eplag = Utility::GetTime() - endpoint->GetRemoteLogPosition(); + double eplag = CalculateZoneLag(endpoint); - if ((endpoint->GetSyncing() || !endpoint->IsConnected()) && eplag > zoneLag) + if (eplag > 0 && eplag > zoneLag) zoneLag = eplag; allEndpoints++; @@ -945,6 +945,17 @@ std::pair 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 JsonRpcConnection::Ptr& aclient) { ObjectLock olock(this); diff --git a/lib/remote/apilistener.hpp b/lib/remote/apilistener.hpp index 786714b5aa7..203cdadc518 100644 --- a/lib/remote/apilistener.hpp +++ b/lib/remote/apilistener.hpp @@ -75,6 +75,8 @@ class I2_REMOTE_API ApiListener : public ObjectImpl void RemoveHttpClient(const HttpServerConnection::Ptr& aclient); std::set GetHttpClients(void) const; + static double CalculateZoneLag(const Endpoint::Ptr& endpoint); + /* filesync */ static Value ConfigUpdateHandler(const MessageOrigin::Ptr& origin, const Dictionary::Ptr& params);