Auto-load components when component config objects are created.

This commit is contained in:
Gunnar Beutner 2012-04-01 09:30:38 +02:00
parent a368030a80
commit a49876a1ae
2 changed files with 24 additions and 4 deletions

View File

@ -14,16 +14,15 @@ IcingaApplication::IcingaApplication(void)
int IcingaApplication::Main(const vector<string>& args)
{
GetConfigHive()->OnObjectCreated.bind(bind_weak(&IcingaApplication::ConfigObjectCreatedHandler, shared_from_this()));
GetConfigHive()->OnObjectRemoved.bind(bind_weak(&IcingaApplication::ConfigObjectRemovedHandler, shared_from_this()));
ConfigObject::RefType fileComponentConfig = new_object<ConfigObject>();
fileComponentConfig->SetName("configfilecomponent");
fileComponentConfig->SetType("component");
fileComponentConfig->SetProperty("filename", "icinga.conf");
GetConfigHive()->AddObject(fileComponentConfig);
LoadComponent("configfilecomponent");
LoadComponent("configrpccomponent");
RunEventLoop();
return 0;
@ -34,4 +33,22 @@ ConnectionManager::RefType IcingaApplication::GetConnectionManager(void)
return m_ConnectionManager;
}
int IcingaApplication::ConfigObjectCreatedHandler(ConfigHiveEventArgs::RefType ea)
{
if (ea->ConfigObject->GetType() == "component") {
LoadComponent(ea->ConfigObject->GetName());
}
return 0;
}
int IcingaApplication::ConfigObjectRemovedHandler(ConfigHiveEventArgs::RefType ea)
{
if (ea->ConfigObject->GetType() == "component") {
UnloadComponent(ea->ConfigObject->GetName());
}
return 0;
}
SET_START_CLASS(icinga::IcingaApplication);

View File

@ -9,6 +9,9 @@ class IcingaApplication : public Application
private:
ConnectionManager::RefType m_ConnectionManager;
int ConfigObjectCreatedHandler(ConfigHiveEventArgs::RefType ea);
int ConfigObjectRemovedHandler(ConfigHiveEventArgs::RefType ea);
public:
typedef shared_ptr<IcingaApplication> RefType;
typedef weak_ptr<IcingaApplication> WeakRefType;