/* Destructor */ sentry::Sentry::~Sentry() throw(){ /* Execute the pre-shutdown actions */ IHookPoint* pre_shutdown = findHookPoint("core.pre_shutdown"); if( ! pre_shutdown ){ Logger::log("Could not find hookpoint core.pre_shutdown", Logger::LOG_ERROR); }else{ _executeCommandsIn(pre_shutdown); delete pre_shutdown; } /* Unload the plug-ins */ for(map<string, IPlugin*>::iterator it = _plugins.begin(); it != _plugins.end(); it++){ IPlugin* plugin = it->second; Logger::log("Unloading " + plugin->getName(), Logger::LOG_INFO); delete plugin; } delete _config; /* elete the hookpoints */ for(map<string, IHookPoint*>::iterator it = _hookpoints.begin(); it != _hookpoints.end(); it++){ IHookPoint* hookpoint = it->second; delete hookpoint; } }
void sentry::Sentry::loadPlugins(){ string plugindir(_config->getValue("application", "plugindir")); if(plugindir.empty()){ Logger::log("Plugin directory not in config.", Logger::LOG_FATAL); exit(Sentry::EXIT_NO_PLUGIN_DIR); }else{ plugindir += "/"; } vector<string> files = _getPluginLibNames(plugindir); /** * Load the plug-ins */ for(unsigned int i = 0; i < files.size(); i++){ try{ string pluginfile = files.at(i); IPlugin* plugin = PluginLoader::loadPlugin(pluginfile, this); if(plugin != 0){ _plugins[plugin->getName()] = plugin; _pluginpathmap[plugin->getName()] = pluginfile; vector<IHookPoint*> hookpoints = plugin->getProvidingHookPoints(); for(int h = 0; h < hookpoints.size(); h++){ IHookPoint* hookpoint = hookpoints.at(h); if( findHookPoint(hookpoint->getName()) == 0 ){ _hookpoints[hookpoint->getName()] = hookpoint; }else{ Logger::log("Ignoring already available hookpoint " + hookpoint->getName(), Logger::LOG_WARNING); } } } } catch(NoSuchLibraryException& nsle){ Logger::log(nsle.what(), Logger::LOG_ERROR); } catch(NoSuchSymbolException& nsse){ Logger::log(nsse.what(), Logger::LOG_ERROR); } } this->_activatePlugins(); }
void sentry::Sentry::_activatePlugins(){ // activate all the plug-ins for(map<string, IPlugin*>::iterator it = _plugins.begin(); it != _plugins.end(); it++){ IPlugin* plugin = it->second; if( ! plugin->activate()){ Logger::log("Could not activate plug-in " + plugin->getName(), Logger::LOG_WARNING); } } IHookPoint* post_load_plugins = findHookPoint("core.post_load_plugins"); if(post_load_plugins == 0){ Logger::log("Could not find hookpoint core.post_load_plugins", Logger::LOG_ERROR); }else{ _executeCommandsIn(post_load_plugins); } while(this->_haveActivePlugins()){ usleep(100000); } Logger::log("No more active plug-ins, shutting down.", Logger::LOG_INFO); }