mirror of https://github.com/Icinga/icinga2.git
Use adapters in the checker/delegation components.
This commit is contained in:
parent
7d630249cc
commit
728f72dcce
|
@ -248,7 +248,7 @@ Component::Ptr Application::LoadComponent(const string& path,
|
|||
*
|
||||
* @param component The component.
|
||||
*/
|
||||
void Application::RegisterComponent(Component::Ptr component)
|
||||
void Application::RegisterComponent(const Component::Ptr& component)
|
||||
{
|
||||
m_Components[component->GetName()] = component;
|
||||
|
||||
|
@ -260,7 +260,7 @@ void Application::RegisterComponent(Component::Ptr component)
|
|||
*
|
||||
* @param component The component.
|
||||
*/
|
||||
void Application::UnregisterComponent(Component::Ptr component)
|
||||
void Application::UnregisterComponent(const Component::Ptr& component)
|
||||
{
|
||||
string name = component->GetName();
|
||||
|
||||
|
|
|
@ -57,8 +57,8 @@ public:
|
|||
|
||||
shared_ptr<Component> LoadComponent(const string& path,
|
||||
const ConfigObject::Ptr& componentConfig);
|
||||
void RegisterComponent(shared_ptr<Component> component);
|
||||
void UnregisterComponent(shared_ptr<Component> component);
|
||||
void RegisterComponent(const shared_ptr<Component>& component);
|
||||
void UnregisterComponent(const shared_ptr<Component>& component);
|
||||
shared_ptr<Component> GetComponent(const string& name) const;
|
||||
void AddComponentSearchDir(const string& componentDirectory);
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ void CheckerComponent::Start(void)
|
|||
ConfigObject::TMap::Range range = ConfigObject::GetObjects("service");
|
||||
|
||||
for (ConfigObject::TMap::Iterator it = range.first; it != range.second; it++) {
|
||||
Service svc(it->second);
|
||||
Service svc = it->second;
|
||||
CheckTask::Ptr ct = CheckTask::CreateTask(svc);
|
||||
CheckResult cr = ct->Execute();
|
||||
}
|
||||
|
|
|
@ -53,47 +53,47 @@ void DelegationComponent::Stop(void)
|
|||
mgr->UnregisterEndpoint(m_DelegationEndpoint);
|
||||
}
|
||||
|
||||
void DelegationComponent::NewServiceHandler(const ConfigObject::Ptr& object)
|
||||
void DelegationComponent::NewServiceHandler(const Service& object)
|
||||
{
|
||||
AssignService(object);
|
||||
}
|
||||
|
||||
void DelegationComponent::RemovedServiceHandler(const ConfigObject::Ptr& object)
|
||||
void DelegationComponent::RemovedServiceHandler(const Service& object)
|
||||
{
|
||||
RevokeService(object);
|
||||
}
|
||||
|
||||
void DelegationComponent::AssignService(const ConfigObject::Ptr& service)
|
||||
void DelegationComponent::AssignService(const Service& service)
|
||||
{
|
||||
RequestMessage request;
|
||||
request.SetMethod("checker::AssignService");
|
||||
|
||||
MessagePart params;
|
||||
params.SetProperty("service", service->GetProperties());
|
||||
params.SetProperty("service", service.GetConfigObject()->GetProperties());
|
||||
request.SetParams(params);
|
||||
|
||||
Application::Log(LogInformation, "delegation", "Trying to delegate service '" + service->GetName() + "'");
|
||||
Application::Log(LogInformation, "delegation", "Trying to delegate service '" + service.GetName() + "'");
|
||||
|
||||
GetEndpointManager()->SendAPIMessage(m_DelegationEndpoint, request,
|
||||
boost::bind(&DelegationComponent::AssignServiceResponseHandler, this, service, _2, _5));
|
||||
}
|
||||
|
||||
void DelegationComponent::AssignServiceResponseHandler(const ConfigObject::Ptr& service, const Endpoint::Ptr& sender, bool timedOut)
|
||||
void DelegationComponent::AssignServiceResponseHandler(Service& service, const Endpoint::Ptr& sender, bool timedOut)
|
||||
{
|
||||
if (timedOut) {
|
||||
Application::Log(LogInformation, "delegation", "Service delegation for service '" + service->GetName() + "' timed out.");
|
||||
Application::Log(LogInformation, "delegation", "Service delegation for service '" + service.GetName() + "' timed out.");
|
||||
} else {
|
||||
service->SetTag("checker", sender->GetIdentity());
|
||||
Application::Log(LogInformation, "delegation", "Service delegation for service '" + service->GetName() + "' was successful.");
|
||||
service.SetChecker(sender->GetIdentity());
|
||||
Application::Log(LogInformation, "delegation", "Service delegation for service '" + service.GetName() + "' was successful.");
|
||||
}
|
||||
}
|
||||
|
||||
void DelegationComponent::RevokeService(const ConfigObject::Ptr& service)
|
||||
void DelegationComponent::RevokeService(const Service& service)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DelegationComponent::RevokeServiceResponseHandler(const ConfigObject::Ptr& service, const Endpoint::Ptr& sender, bool timedOut)
|
||||
void DelegationComponent::RevokeServiceResponseHandler(Service& service, const Endpoint::Ptr& sender, bool timedOut)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -101,13 +101,13 @@ void DelegationComponent::DelegationTimerHandler(void)
|
|||
{
|
||||
ConfigObject::Set::Iterator it;
|
||||
for (it = m_AllServices->Begin(); it != m_AllServices->End(); it++) {
|
||||
ConfigObject::Ptr object = *it;
|
||||
Service service = *it;
|
||||
|
||||
string checker;
|
||||
if (object->GetTag("checker", &checker) && GetEndpointManager()->GetEndpointByIdentity(checker))
|
||||
string checker = service.GetChecker();
|
||||
if (!checker.empty() && GetEndpointManager()->GetEndpointByIdentity(checker))
|
||||
continue;
|
||||
|
||||
AssignService(object);
|
||||
AssignService(service);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,16 +38,16 @@ private:
|
|||
ConfigObject::Set::Ptr m_AllServices;
|
||||
Timer::Ptr m_DelegationTimer;
|
||||
|
||||
void NewServiceHandler(const ConfigObject::Ptr& object);
|
||||
void RemovedServiceHandler(const ConfigObject::Ptr& object);
|
||||
void NewServiceHandler(const Service& object);
|
||||
void RemovedServiceHandler(const Service& object);
|
||||
|
||||
void AssignServiceResponseHandler(const ConfigObject::Ptr& service, const Endpoint::Ptr& sender, bool timedOut);
|
||||
void RevokeServiceResponseHandler(const ConfigObject::Ptr& service, const Endpoint::Ptr& sender, bool timedOut);
|
||||
void AssignServiceResponseHandler(Service& service, const Endpoint::Ptr& sender, bool timedOut);
|
||||
void RevokeServiceResponseHandler(Service& service, const Endpoint::Ptr& sender, bool timedOut);
|
||||
|
||||
void DelegationTimerHandler(void);
|
||||
|
||||
void AssignService(const ConfigObject::Ptr& service);
|
||||
void RevokeService(const ConfigObject::Ptr& service);
|
||||
void AssignService(const Service& service);
|
||||
void RevokeService(const Service& service);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -16,7 +16,6 @@ public:
|
|||
|
||||
bool IsLocal(void) const;
|
||||
|
||||
protected:
|
||||
ConfigObject::Ptr GetConfigObject() const;
|
||||
|
||||
private:
|
||||
|
|
|
@ -2,27 +2,28 @@
|
|||
|
||||
using namespace icinga;
|
||||
|
||||
string MacroProcessor::ResolveMacros(string str, Dictionary::Ptr macros)
|
||||
string MacroProcessor::ResolveMacros(const string& str, const Dictionary::Ptr& macros)
|
||||
{
|
||||
string::size_type offset, pos_first, pos_second;
|
||||
|
||||
offset = 0;
|
||||
|
||||
while ((pos_first = str.find_first_of('$', offset)) != string::npos) {
|
||||
pos_second = str.find_first_of('$', pos_first + 1);
|
||||
string result = str;
|
||||
while ((pos_first = result.find_first_of('$', offset)) != string::npos) {
|
||||
pos_second = result.find_first_of('$', pos_first + 1);
|
||||
|
||||
if (pos_second == string::npos)
|
||||
throw runtime_error("Closing $ not found in macro format string.");
|
||||
|
||||
string name = str.substr(pos_first + 1, pos_second - pos_first - 1);
|
||||
string name = result.substr(pos_first + 1, pos_second - pos_first - 1);
|
||||
string value;
|
||||
if (!macros || !macros->GetProperty(name, &value))
|
||||
throw runtime_error("Macro '" + name + "' is not defined.");
|
||||
|
||||
str.replace(pos_first, pos_second - pos_first + 1, value);
|
||||
result.replace(pos_first, pos_second - pos_first + 1, value);
|
||||
|
||||
offset = pos_first + value.size();
|
||||
}
|
||||
|
||||
return str;
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ namespace icinga
|
|||
class I2_ICINGA_API MacroProcessor
|
||||
{
|
||||
public:
|
||||
static string ResolveMacros(string str, Dictionary::Ptr macros);
|
||||
static string ResolveMacros(const string& str, const Dictionary::Ptr& macros);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -74,3 +74,15 @@ time_t Service::GetNextCheck(void) const
|
|||
GetConfigObject()->GetTag("next_check", &value);
|
||||
return value;
|
||||
}
|
||||
|
||||
void Service::SetChecker(string checker)
|
||||
{
|
||||
GetConfigObject()->SetTag("checker", checker);
|
||||
}
|
||||
|
||||
string Service::GetChecker(void) const
|
||||
{
|
||||
string value;
|
||||
GetConfigObject()->GetTag("checker", &value);
|
||||
return value;
|
||||
}
|
||||
|
|
|
@ -22,8 +22,10 @@ public:
|
|||
|
||||
void SetNextCheck(time_t nextCheck);
|
||||
time_t GetNextCheck(void) const;
|
||||
void SetChecker(string checker);
|
||||
string GetChecker(void) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif /* SERVICE_H */
|
||||
#endif /* SERVICE_H */
|
||||
|
|
Loading…
Reference in New Issue