}
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);
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);
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);