diff options
| author | Denys Vlasenko <dvlasenk@redhat.com> | 2010-11-10 00:10:22 +0100 |
|---|---|---|
| committer | Denys Vlasenko <dvlasenk@redhat.com> | 2010-11-10 00:10:22 +0100 |
| commit | 9d2cb4518c3a8a72ccc714ddbc131aaa84506092 (patch) | |
| tree | e21efa47e3ed2e2f911c87fad8d0d992f236124a /src/daemon | |
| parent | d1c6a4329284a1daba12a7e0fbd743a90cb0d884 (diff) | |
| download | abrt-9d2cb4518c3a8a72ccc714ddbc131aaa84506092.tar.gz abrt-9d2cb4518c3a8a72ccc714ddbc131aaa84506092.tar.xz abrt-9d2cb4518c3a8a72ccc714ddbc131aaa84506092.zip | |
Decouple settings handling from old-style plugins
The breakage was discovered when i removed Logger class.
it turned out the fix is somewhat involved.
This change implements it as discussed with the rest of the team.
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'src/daemon')
| -rw-r--r-- | src/daemon/CommLayerServerDBus.cpp | 8 | ||||
| -rw-r--r-- | src/daemon/Daemon.cpp | 4 | ||||
| -rw-r--r-- | src/daemon/MiddleWare.cpp | 83 | ||||
| -rw-r--r-- | src/daemon/MiddleWare.h | 5 | ||||
| -rw-r--r-- | src/daemon/PluginManager.cpp | 31 | ||||
| -rw-r--r-- | src/daemon/PluginManager.h | 14 | ||||
| -rw-r--r-- | src/daemon/abrt-action-print.cpp | 11 |
7 files changed, 87 insertions, 69 deletions
diff --git a/src/daemon/CommLayerServerDBus.cpp b/src/daemon/CommLayerServerDBus.cpp index 5ce8e474..3e98ab80 100644 --- a/src/daemon/CommLayerServerDBus.cpp +++ b/src/daemon/CommLayerServerDBus.cpp @@ -337,7 +337,10 @@ static int handle_GetPluginsInfo(DBusMessage* call, DBusMessage* reply) { DBusMessageIter out_iter; dbus_message_iter_init_append(reply, &out_iter); - store_val(&out_iter, g_pPluginManager->GetPluginsInfo()); + + map_map_string_t map_of_plugin_info; + GetPluginsInfo(map_of_plugin_info); + store_val(&out_iter, map_of_plugin_info); send_flush_and_unref(reply); return 0; @@ -358,7 +361,8 @@ static int handle_GetPluginSettings(DBusMessage* call, DBusMessage* reply) //long unix_uid = get_remote_uid(call); //VERB1 log("got %s('%s') call from uid %ld", "GetPluginSettings", PluginName, unix_uid); - map_plugin_settings_t plugin_settings = g_pPluginManager->GetPluginSettings(PluginName); //, to_string(unix_uid).c_str()); + map_plugin_settings_t plugin_settings; + GetPluginSettings(PluginName, plugin_settings); DBusMessageIter out_iter; dbus_message_iter_init_append(reply, &out_iter); diff --git a/src/daemon/Daemon.cpp b/src/daemon/Daemon.cpp index 0aa04a30..a30b2d97 100644 --- a/src/daemon/Daemon.cpp +++ b/src/daemon/Daemon.cpp @@ -666,8 +666,8 @@ static gboolean handle_inotify_cb(GIOChannel *gio, GIOCondition condition, gpoin const char *uid_str = get_crash_data_item_content(crashinfo, CD_UID).c_str(); /* Send dbus signal */ - if (analyzer_has_InformAllUsers(analyzer)) - uid_str = NULL; + //if (analyzer_has_InformAllUsers(analyzer)) + // uid_str = NULL; char *crash_id = xasprintf("%s:%s", get_crash_data_item_content(crashinfo, CD_UID).c_str(), get_crash_data_item_content(crashinfo, CD_UUID).c_str() diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 0349514c..bc807d4b 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -401,20 +401,6 @@ static bool is_debug_dump_saved(const char *debug_dump_dir) return row != NULL; } -bool analyzer_has_InformAllUsers(const char *analyzer_name) -{ - CAnalyzer* analyzer = g_pPluginManager->GetAnalyzer(analyzer_name); - if (!analyzer) - { - return false; - } - map_plugin_settings_t settings = analyzer->GetSettings(); - map_plugin_settings_t::const_iterator it = settings.find("InformAllUsers"); - if (it == settings.end()) - return false; - return string_to_bool(it->second.c_str()); -} - /** * Save a debugdump into database. If saving is * successful, then crash info is filled. Otherwise the crash info is @@ -567,7 +553,7 @@ mw_result_t SaveDebugDump(const char *dump_dir_name, * else: an error code */ res = SaveDebugDumpToDatabase(state.crash_id, - analyzer_has_InformAllUsers(analyzer), + true, /*analyzer_has_InformAllUsers(analyzer),*/ time, dump_dir_name, pCrashData); @@ -844,3 +830,70 @@ void DeleteDebugDump_by_dir(const char *dump_dir) error_msg("%s", e.what()); } } + +void GetPluginsInfo(map_map_string_t &map_of_plugin_info) +{ + DIR *dir = opendir(PLUGINS_CONF_DIR); + if (!dir) + return; + + struct dirent *dent; + while ((dent = readdir(dir)) != NULL) + { + if (!is_regular_file(dent, PLUGINS_CONF_DIR)) + continue; + char *ext = strrchr(dent->d_name, '.'); + if (!ext || strcmp(ext + 1, PLUGINS_CONF_EXTENSION) != 0) + continue; + VERB3 log("Found %s", dent->d_name); + *ext = '\0'; + + char *glade_file = xasprintf(PLUGINS_LIB_DIR"/%s.glade", dent->d_name); + if (access(glade_file, F_OK) == 0) + { + *ext = '.'; + char *conf_file = concat_path_file(PLUGINS_CONF_DIR, dent->d_name); + *ext = '\0'; + FILE *fp = fopen(conf_file, "r"); + free(conf_file); + + char *descr = NULL; + if (fp) + { + descr = xmalloc_fgetline(fp); + fclose(fp); + if (descr && strncmp("# Description:", descr, strlen("# Description:")) == 0) + overlapping_strcpy(descr, skip_whitespace(descr + strlen("# Description:"))); + else + { + free(descr); + descr = NULL; + } + } + map_string_t plugin_info; + plugin_info["Name"] = dent->d_name; + plugin_info["Enabled"] = "yes"; + plugin_info["Type"] = "Reporter"; //was: plugin_type_str[module->GetType()]; field to be removed + plugin_info["Version"] = VERSION; //was: module->GetVersion(); field to be removed? + plugin_info["Description"] = descr ? descr : ""; //was: module->GetDescription(); + plugin_info["Email"] = ""; //was: module->GetEmail(); field to be removed + plugin_info["WWW"] = ""; //was: module->GetWWW(); field to be removed + plugin_info["GTKBuilder"] = glade_file; //was: module->GetGTKBuilder(); + free(descr); + map_of_plugin_info[dent->d_name] = plugin_info; + } + free(glade_file); + + } + closedir(dir); +} + +void GetPluginSettings(const char *plugin_name, map_plugin_settings_t &plugin_settings) +{ + char *conf_file = xasprintf(PLUGINS_CONF_DIR"/%s.conf", plugin_name); + LoadPluginSettings(conf_file, plugin_settings); + free(conf_file); + /* If settings are empty, most likely .conf file does not exist. + * Don't mislead the user: */ + VERB3 if (!plugin_settings.empty()) log("Loaded %s.conf", plugin_name); +} diff --git a/src/daemon/MiddleWare.h b/src/daemon/MiddleWare.h index 100a0720..cb0db9eb 100644 --- a/src/daemon/MiddleWare.h +++ b/src/daemon/MiddleWare.h @@ -130,7 +130,7 @@ void AddAnalyzerActionOrReporter(const char *pAnalyzer, const char *pActionOrReporter, const char *pArgs); -bool analyzer_has_InformAllUsers(const char *analyzer_name); +//bool analyzer_has_InformAllUsers(const char *analyzer_name); vector_map_crash_data_t GetCrashInfos(long caller_uid); int CreateReportThread(const char* crash_id, long caller_uid, int force, const char* pSender); @@ -138,4 +138,7 @@ void CreateReport(const char* crash_id, long caller_uid, int force, map_crash_da int DeleteDebugDump(const char *crash_id, long caller_uid); void DeleteDebugDump_by_dir(const char *dump_dir); +void GetPluginsInfo(map_map_string_t &map_of_plugin_info); +void GetPluginSettings(const char *plugin_name, map_plugin_settings_t &plugin_settings); + #endif /*MIDDLEWARE_H_*/ diff --git a/src/daemon/PluginManager.cpp b/src/daemon/PluginManager.cpp index ecc574d9..583b665e 100644 --- a/src/daemon/PluginManager.cpp +++ b/src/daemon/PluginManager.cpp @@ -154,7 +154,6 @@ CPlugin* CPluginManager::LoadPlugin(const char *pName, bool enabled_only) plugin_info["Email"] = empty; plugin_info["WWW"] = empty; plugin_info["GTKBuilder"] = empty; - m_map_plugin_info[pName] = plugin_info; VERB3 log("Plugin %s: 'Enabled' is not set, not loading it (yet)", pName); return NULL; /* error */ } @@ -208,7 +207,6 @@ CPlugin* CPluginManager::LoadPlugin(const char *pName, bool enabled_only) plugin_info["WWW"] = module->GetWWW(); plugin_info["GTKBuilder"] = module->GetGTKBuilder(); - m_map_plugin_info[pName] = plugin_info; m_mapLoadedModules[pName] = module; m_mapPlugins[pName] = plugin; log("Registered %s plugin '%s'", plugin_type_str[module->GetType()], pName); @@ -407,32 +405,3 @@ void CPluginManager::SetPluginSettings(const char *pName, */ #endif } - -map_plugin_settings_t CPluginManager::GetPluginSettings(const char *pName) -{ - map_plugin_settings_t ret; - - map_loaded_module_t::iterator it_module = m_mapLoadedModules.find(pName); - if (it_module != m_mapLoadedModules.end()) - { - map_plugin_t::iterator it_plugin = m_mapPlugins.find(pName); - if (it_plugin != m_mapPlugins.end()) - { - VERB3 log("Returning settings for loaded plugin %s", pName); - ret = it_plugin->second->GetSettings(); - return ret; - } - } - /* else: module is not loaded */ - map_map_string_t::iterator it_settings = m_map_plugin_settings.find(pName); - if (it_settings != m_map_plugin_settings.end()) - { - /* but it exists, its settings are available nevertheless */ - VERB3 log("Returning settings for non-loaded plugin %s", pName); - ret = it_settings->second; - return ret; - } - - VERB3 log("Request for settings of unknown plugin %s, returning null result", pName); - return ret; -} diff --git a/src/daemon/PluginManager.h b/src/daemon/PluginManager.h index a00fd3e4..c372aa7f 100644 --- a/src/daemon/PluginManager.h +++ b/src/daemon/PluginManager.h @@ -53,7 +53,6 @@ class CPluginManager /** * List of all possible plugins (loaded or not), with some attributes. */ - map_map_string_t m_map_plugin_info; map_map_string_t m_map_plugin_settings; public: @@ -130,13 +129,6 @@ class CPluginManager */ plugin_type_t GetPluginType(const char *pName); /** - * A method, which gets all plugins info (even those plugins which are - * disabled). It can be sent via DBus to GUI and displayed to an user. - * Then user can fill all needed informations like URLs etc. - * @return A vector of maps <key, value> - */ - const map_map_string_t& GetPluginsInfo() { return m_map_plugin_info; } - /** * A method, which sets up a plugin. The settings are also saved in home * directory of an user. * @param pName A plugin name. @@ -146,12 +138,6 @@ class CPluginManager void SetPluginSettings(const char *pName, const char *pUID, const map_plugin_settings_t& pSettings); - /** - * A method, which returns plugin's settings according to user. - * @param pName A plugin name. - * @return Plugin's settings. - */ - map_plugin_settings_t GetPluginSettings(const char *pName); }; #endif /*PLUGINMANAGER_H_*/ diff --git a/src/daemon/abrt-action-print.cpp b/src/daemon/abrt-action-print.cpp index 437387e1..a4db373a 100644 --- a/src/daemon/abrt-action-print.cpp +++ b/src/daemon/abrt-action-print.cpp @@ -53,18 +53,21 @@ int main(int argc, char **argv) OPT_END() }; + /*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage); + + putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose)); + //msg_prefix = PROGNAME; + char *env = getenv("Logger_LogPath"); + VERB3 log("output_file:'%s' Logger_LogPath env:'%s'", output_file, env); if (env) output_file = env; env = getenv("Logger_AppendLogs"); + VERB3 log("Logger_AppendLogs env:'%s'", env); if (env && string_to_bool(env)) open_mode = "a"; - /*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage); - - putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose)); - if (output_file) { if (!freopen(output_file, open_mode, stdout)) |
