mirror of https://github.com/Icinga/icinga2.git
Merge pull request #7823 from Icinga/bugfix/unify-application-start-times
Fix timing point for Application::GetStartTime() (related to command endpoint grace period)
This commit is contained in:
commit
4c9e4959f3
|
@ -166,8 +166,6 @@ static int Main()
|
|||
argv += 3;
|
||||
}
|
||||
|
||||
Application::SetStartTime(Utility::GetTime());
|
||||
|
||||
/* Set thread title. */
|
||||
Utility::SetThreadName("Main Thread", false);
|
||||
|
||||
|
|
|
@ -52,7 +52,6 @@ static bool l_InExceptionHandler = false;
|
|||
int Application::m_ArgC;
|
||||
char **Application::m_ArgV;
|
||||
double Application::m_StartTime;
|
||||
double Application::m_MainTime;
|
||||
bool Application::m_ScriptDebuggerEnabled = false;
|
||||
double Application::m_LastReloadFailed;
|
||||
|
||||
|
@ -967,7 +966,7 @@ int Application::Run()
|
|||
}
|
||||
#endif /* _WIN32 */
|
||||
|
||||
SetMainTime(Utility::GetTime());
|
||||
SetStartTime(Utility::GetTime());
|
||||
|
||||
return Main();
|
||||
}
|
||||
|
@ -1154,14 +1153,9 @@ void Application::SetStartTime(double ts)
|
|||
m_StartTime = ts;
|
||||
}
|
||||
|
||||
double Application::GetMainTime()
|
||||
double Application::GetUptime()
|
||||
{
|
||||
return m_MainTime;
|
||||
}
|
||||
|
||||
void Application::SetMainTime(double ts)
|
||||
{
|
||||
m_MainTime = ts;
|
||||
return Utility::GetTime() - m_StartTime;
|
||||
}
|
||||
|
||||
bool Application::GetScriptDebuggerEnabled()
|
||||
|
|
|
@ -95,8 +95,7 @@ public:
|
|||
static double GetStartTime();
|
||||
static void SetStartTime(double ts);
|
||||
|
||||
static double GetMainTime();
|
||||
static void SetMainTime(double ts);
|
||||
static double GetUptime();
|
||||
|
||||
static bool GetScriptDebuggerEnabled();
|
||||
static void SetScriptDebuggerEnabled(bool enabled);
|
||||
|
|
|
@ -588,6 +588,12 @@ void Checkable::ExecuteCheck()
|
|||
* using the proper check interval once we've received a check result.
|
||||
*/
|
||||
SetNextCheck(Utility::GetTime() + GetCheckCommand()->GetTimeout() + 30);
|
||||
|
||||
/*
|
||||
* Let the user know that there was a problem with the check if
|
||||
* 1) The endpoint is not syncing (replay log, etc.)
|
||||
* 2) Outside of the cold startup window (5min)
|
||||
*/
|
||||
} else if (!endpoint->GetSyncing() && Application::GetInstance()->GetStartTime() < Utility::GetTime() - 300) {
|
||||
/* fail to perform check on unconnected endpoint */
|
||||
cr->SetState(ServiceUnknown);
|
||||
|
|
|
@ -194,6 +194,7 @@ Timestamp Checkable::GetNextUpdate() const
|
|||
auto cr (GetLastCheckResult());
|
||||
double interval, latency;
|
||||
|
||||
// TODO: Document this behavior.
|
||||
if (cr) {
|
||||
interval = GetEnableActiveChecks() && GetProblem() && GetStateType() == StateTypeSoft ? GetRetryInterval() : GetCheckInterval();
|
||||
latency = cr->GetExecutionEnd() - cr->GetScheduleStart();
|
||||
|
@ -202,7 +203,7 @@ Timestamp Checkable::GetNextUpdate() const
|
|||
latency = 0.0;
|
||||
}
|
||||
|
||||
return (GetEnableActiveChecks() ? GetNextCheck() : (cr ? cr->GetExecutionEnd() : Application::GetMainTime()) + interval) + interval + 2 * latency;
|
||||
return (GetEnableActiveChecks() ? GetNextCheck() : (cr ? cr->GetExecutionEnd() : Application::GetStartTime()) + interval) + interval + 2 * latency;
|
||||
}
|
||||
|
||||
void Checkable::NotifyFixedDowntimeStart(const Downtime::Ptr& downtime)
|
||||
|
|
|
@ -329,7 +329,7 @@ void CIB::StatsFunc(const Dictionary::Ptr& status, const Array::Ptr& perfdata) {
|
|||
status->Set("num_services_handled", ss.services_handled);
|
||||
status->Set("num_services_problem", ss.services_problem);
|
||||
|
||||
double uptime = Utility::GetTime() - Application::GetStartTime();
|
||||
double uptime = Application::GetUptime();
|
||||
status->Set("uptime", uptime);
|
||||
|
||||
HostStatistics hs = CalculateHostStats();
|
||||
|
|
|
@ -206,7 +206,7 @@ bool IcingaApplication::ResolveMacro(const String& macro, const CheckResult::Ptr
|
|||
*result = Utility::FormatDateTime("%H:%M:%S %z", now);
|
||||
return true;
|
||||
} else if (macro == "uptime") {
|
||||
*result = Utility::FormatDuration(Utility::GetTime() - Application::GetStartTime());
|
||||
*result = Utility::FormatDuration(Application::GetUptime());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@ void IcingaCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckRes
|
|||
perfdata->Add(new PerfdataValue("num_services_handled", ss.services_handled));
|
||||
perfdata->Add(new PerfdataValue("num_services_problem", ss.services_problem));
|
||||
|
||||
double uptime = Utility::GetTime() - Application::GetStartTime();
|
||||
double uptime = Application::GetUptime();
|
||||
perfdata->Add(new PerfdataValue("uptime", uptime));
|
||||
|
||||
HostStatistics hs = CIB::CalculateHostStats();
|
||||
|
|
|
@ -25,7 +25,7 @@ void RandomCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckRes
|
|||
return;
|
||||
|
||||
double now = Utility::GetTime();
|
||||
double uptime = now - Application::GetStartTime();
|
||||
double uptime = Application::GetUptime();
|
||||
|
||||
String output = "Hello from " + IcingaApplication::GetInstance()->GetNodeName()
|
||||
+ ". Icinga 2 has been running for " + Utility::FormatDuration(uptime)
|
||||
|
|
|
@ -40,10 +40,10 @@ void ApiListener::UpdateObjectAuthority()
|
|||
endpoints.push_back(endpoint);
|
||||
}
|
||||
|
||||
double mainTime = Application::GetMainTime();
|
||||
double startTime = Application::GetStartTime();
|
||||
|
||||
/* 30 seconds cold startup, don't update any authority to give the secondary endpoint time to reconnect. */
|
||||
if (num_total > 1 && endpoints.size() <= 1 && (mainTime == 0 || Utility::GetTime() - mainTime < 30))
|
||||
if (num_total > 1 && endpoints.size() <= 1 && (startTime == 0 || Utility::GetTime() - startTime < 30))
|
||||
return;
|
||||
|
||||
std::sort(endpoints.begin(), endpoints.end(),
|
||||
|
|
Loading…
Reference in New Issue