double lastCheck = cr->Get("execution_end");
int missed = (Utility::GetTime() - lastCheck) / service->GetCheckInterval() - 1;
- if (missed > 0) {
+ if (missed > 0 && !service->GetFirstCheck()) {
missedChecks += missed;
missedServices++;
}
}
+ service->SetFirstCheck(false);
+
Logger::Write(LogDebug, "checker", "Executing service check for '" + service->GetName() + "'");
m_PendingServices.insert(service);
{ "checkers", Attribute_Config },
{ "scheduling_offset", Attribute_Transient },
+ { "first_check", Attribute_Transient },
{ "next_check", Attribute_Replicated },
{ "checker", Attribute_Replicated },
{ "check_attempt", Attribute_Replicated },
return value;
}
+void Service::SetFirstCheck(bool first)
+{
+ Set("first_check", first ? 1 : 0);
+}
+
+bool Service::GetFirstCheck(void) const
+{
+ Value value = Get("first_check");
+
+ if (value.IsEmpty())
+ return true;
+
+ return static_cast<long>(value);
+}
+
+
void Service::SetNextCheck(double nextCheck)
{
Set("next_check", nextCheck);
long GetSchedulingOffset(void);
void SetSchedulingOffset(long offset);
-
+
+ void SetFirstCheck(bool first);
+ bool GetFirstCheck(void) const;
+
void SetNextCheck(double nextCheck);
double GetNextCheck(void);
void UpdateNextCheck(void);