summaryrefslogtreecommitdiffstats
path: root/src/daemon
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2010-11-10 00:10:22 +0100
committerDenys Vlasenko <dvlasenk@redhat.com>2010-11-10 00:10:22 +0100
commit9d2cb4518c3a8a72ccc714ddbc131aaa84506092 (patch)
treee21efa47e3ed2e2f911c87fad8d0d992f236124a /src/daemon
parentd1c6a4329284a1daba12a7e0fbd743a90cb0d884 (diff)
downloadabrt-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.cpp8
-rw-r--r--src/daemon/Daemon.cpp4
-rw-r--r--src/daemon/MiddleWare.cpp83
-rw-r--r--src/daemon/MiddleWare.h5
-rw-r--r--src/daemon/PluginManager.cpp31
-rw-r--r--src/daemon/PluginManager.h14
-rw-r--r--src/daemon/abrt-action-print.cpp11
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))