Fix non-existing endpoint on ApiListener error

refs #6724
This commit is contained in:
Michael Friedrich 2014-08-04 14:03:37 +02:00
parent 9c9982616b
commit 7b8dc1d97e
2 changed files with 25 additions and 6 deletions

View File

@ -282,7 +282,7 @@ mainloop:
lastLoop = now;
}
if (m_RequestRestart) {
m_RequestRestart = false; // we are now handling the request, once is enough
@ -295,7 +295,7 @@ mainloop:
goto mainloop;
}
Log(LogInformation, "Application", "Shutting down Icinga...");
DynamicObject::StopObjects();
Application::GetInstance()->OnShutdown();
@ -342,7 +342,7 @@ pid_t Application::StartReloadProcess(void)
Process::Ptr process = make_shared<Process>(Process::PrepareCommand(args));
process->SetTimeout(300);
process->Run(&ReloadProcessCallback);
return process->GetPID();
}
@ -1009,6 +1009,7 @@ void Application::MakeVariablesConstant(void)
ScriptVariable::GetByName("PrefixDir")->SetConstant(true);
ScriptVariable::GetByName("SysconfDir")->SetConstant(true);
ScriptVariable::GetByName("LocalStateDir")->SetConstant(true);
ScriptVariable::GetByName("RunDir")->SetConstant(true);
ScriptVariable::GetByName("PkgDataDir")->SetConstant(true);
ScriptVariable::GetByName("StatePath")->SetConstant(false);
ScriptVariable::GetByName("PidPath")->SetConstant(false);

View File

@ -898,6 +898,12 @@ void ApiEvents::RepositoryTimerHandler(void)
}
Endpoint::Ptr my_endpoint = Endpoint::GetLocalEndpoint();
if (!my_endpoint) {
Log(LogWarning, "ApiEvents", "No local endpoint defined. Bailing out.");
return;
}
Zone::Ptr my_zone = my_endpoint->GetZone();
Dictionary::Ptr params = make_shared<Dictionary>();
@ -965,14 +971,26 @@ Value ApiEvents::UpdateRepositoryAPIHandler(const MessageOrigin& origin, const D
String ApiEvents::GetVirtualHostName(const Host::Ptr& host)
{
String host_name = host->GetName();
if (host_name == "localhost")
host_name = Endpoint::GetLocalEndpoint()->GetName();
if (host_name == "localhost") {
Endpoint::Ptr local = Endpoint::GetLocalEndpoint();
if (!local)
return Empty;
host_name = local->GetName();
}
return host_name;
}
Host::Ptr ApiEvents::FindHostByVirtualName(const String& hostName)
{
if (hostName == Endpoint::GetLocalEndpoint()->GetName())
Endpoint::Ptr local = Endpoint::GetLocalEndpoint();
if (!local)
return Host::Ptr();
if (hostName == local->GetName())
return Host::GetByName("localhost");
else
return Host::GetByName(hostName);