mirror of
				https://github.com/Icinga/icinga2.git
				synced 2025-11-04 05:34:12 +01:00 
			
		
		
		
	Merge pull request #8043 from Icinga/bugfix/unify-application-start-times-v2114
Fix timing point for Application::GetStartTime() (related to command endpoint grace period)
This commit is contained in:
		
						commit
						949da2bc6b
					
				@ -166,8 +166,6 @@ static int Main()
 | 
			
		||||
		argv += 3;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Application::SetStartTime(Utility::GetTime());
 | 
			
		||||
 | 
			
		||||
	/* Set thread title. */
 | 
			
		||||
	Utility::SetThreadName("Main Thread", false);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -51,7 +51,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;
 | 
			
		||||
 | 
			
		||||
@ -965,7 +964,7 @@ int Application::Run()
 | 
			
		||||
	}
 | 
			
		||||
#endif /* _WIN32 */
 | 
			
		||||
 | 
			
		||||
	SetMainTime(Utility::GetTime());
 | 
			
		||||
	SetStartTime(Utility::GetTime());
 | 
			
		||||
 | 
			
		||||
	return Main();
 | 
			
		||||
}
 | 
			
		||||
@ -1152,14 +1151,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);
 | 
			
		||||
 | 
			
		||||
@ -563,6 +563,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);
 | 
			
		||||
 | 
			
		||||
@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user