double Application::m_StartTime;
double Application::m_MainTime;
bool Application::m_ScriptDebuggerEnabled = false;
+double Application::m_LastReloadFailed;
/**
* Constructor for the Application class.
static void ReloadProcessCallbackInternal(const ProcessResult& pr)
{
- if (pr.ExitStatus != 0)
+ if (pr.ExitStatus != 0) {
+ Application::SetLastReloadFailed(Utility::GetTime());
Log(LogCritical, "Application", "Found error in config: reloading aborted");
+ }
#ifdef _WIN32
else
Application::Exit(7); /* keep this exit code in sync with icinga-app */
m_ScriptDebuggerEnabled = enabled;
}
+double Application::GetLastReloadFailed(void)
+{
+ return m_LastReloadFailed;
+}
+
+void Application::SetLastReloadFailed(double ts)
+{
+ m_LastReloadFailed = ts;
+}
+
void Application::ValidateName(const String& value, const ValidationUtils& utils)
{
ObjectImpl<Application>::ValidateName(value, utils);
static bool GetScriptDebuggerEnabled(void);
static void SetScriptDebuggerEnabled(bool enabled);
+ static double GetLastReloadFailed(void);
+ static void SetLastReloadFailed(double ts);
+
static void DisplayInfoMessage(std::ostream& os, bool skipVersion = false);
protected:
static double m_StartTime;
static double m_MainTime;
static bool m_ScriptDebuggerEnabled;
+ static double m_LastReloadFailed;
#ifndef _WIN32
static void SigIntTermHandler(int signum);
cr->SetOutput("Icinga 2 has been running for " + Utility::FormatDuration(uptime) +
". Version: " + Application::GetAppVersion());
cr->SetPerformanceData(perfdata);
- cr->SetState(ServiceOK);
+
+ double lastReloadFailed = Application::GetLastReloadFailed();
+
+ if (lastReloadFailed > 0) {
+ cr->SetOutput(cr->GetOutput() + "; Last reload attempt failed at " + Utility::FormatDateTime("%Y-%m-%d %H:%M:%S %z", lastReloadFailed));
+ cr->SetState(ServiceWarning);
+ } else
+ cr->SetState(ServiceOK);
service->ProcessCheckResult(cr);
}