Report failed reload attempts for the icinga check

fixes #9060
fixes #9997
fixes #11129
This commit is contained in:
Gunnar Beutner 2016-05-11 16:07:28 +02:00
parent 21d1ffa28b
commit ff24863a72
3 changed files with 26 additions and 2 deletions

View File

@ -62,6 +62,7 @@ char **Application::m_ArgV;
double Application::m_StartTime; double Application::m_StartTime;
double Application::m_MainTime; double Application::m_MainTime;
bool Application::m_ScriptDebuggerEnabled = false; bool Application::m_ScriptDebuggerEnabled = false;
double Application::m_LastReloadFailed;
/** /**
* Constructor for the Application class. * Constructor for the Application class.
@ -330,8 +331,10 @@ void Application::OnShutdown(void)
static void ReloadProcessCallbackInternal(const ProcessResult& pr) 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"); Log(LogCritical, "Application", "Found error in config: reloading aborted");
}
#ifdef _WIN32 #ifdef _WIN32
else else
Application::Exit(7); /* keep this exit code in sync with icinga-app */ Application::Exit(7); /* keep this exit code in sync with icinga-app */
@ -1387,6 +1390,16 @@ void Application::SetScriptDebuggerEnabled(bool enabled)
m_ScriptDebuggerEnabled = enabled; 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) void Application::ValidateName(const String& value, const ValidationUtils& utils)
{ {
ObjectImpl<Application>::ValidateName(value, utils); ObjectImpl<Application>::ValidateName(value, utils);

View File

@ -140,6 +140,9 @@ public:
static bool GetScriptDebuggerEnabled(void); static bool GetScriptDebuggerEnabled(void);
static void SetScriptDebuggerEnabled(bool enabled); static void SetScriptDebuggerEnabled(bool enabled);
static double GetLastReloadFailed(void);
static void SetLastReloadFailed(double ts);
static void DisplayInfoMessage(std::ostream& os, bool skipVersion = false); static void DisplayInfoMessage(std::ostream& os, bool skipVersion = false);
protected: protected:
@ -172,6 +175,7 @@ private:
static double m_StartTime; static double m_StartTime;
static double m_MainTime; static double m_MainTime;
static bool m_ScriptDebuggerEnabled; static bool m_ScriptDebuggerEnabled;
static double m_LastReloadFailed;
#ifndef _WIN32 #ifndef _WIN32
static void SigIntTermHandler(int signum); static void SigIntTermHandler(int signum);

View File

@ -100,7 +100,14 @@ void IcingaCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResul
cr->SetOutput("Icinga 2 has been running for " + Utility::FormatDuration(uptime) + cr->SetOutput("Icinga 2 has been running for " + Utility::FormatDuration(uptime) +
". Version: " + Application::GetAppVersion()); ". Version: " + Application::GetAppVersion());
cr->SetPerformanceData(perfdata); 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); service->ProcessCheckResult(cr);
} }