示例#1
0
/* 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;
    }

}
示例#2
0
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();
}
示例#3
0
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);
}