X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fcore%2Fplugin.c;h=205c74f148d3f41cb97a1c5b9c891228d1fcc490;hb=231b242faad442e8e7eb7dada96260edf85053c1;hp=c8e8e9e0db06a7799275608b4724eb8929d5b89f;hpb=71fee3e1ba309196cfc07c1df29c366385896223;p=sysdb.git diff --git a/src/core/plugin.c b/src/core/plugin.c index c8e8e9e..205c74f 100644 --- a/src/core/plugin.c +++ b/src/core/plugin.c @@ -184,6 +184,10 @@ sdb_plugin_find_by_name(sdb_llist_t *list, const char *name) return SDB_PLUGIN_CB(obj); } /* sdb_plugin_find_by_name */ +/* + * private types + */ + static int sdb_plugin_cb_init(sdb_object_t *obj, va_list ap) { @@ -200,7 +204,7 @@ sdb_plugin_cb_init(sdb_object_t *obj, va_list ap) if (sdb_plugin_find_by_name(*list, name)) { sdb_log(SDB_LOG_WARNING, "plugin: %s callback '%s' " "has already been registered. Ignoring newly " - "registered version.\n", type, name); + "registered version.", type, name); return -1; } @@ -223,6 +227,22 @@ sdb_plugin_cb_destroy(sdb_object_t *obj) sdb_object_deref(SDB_PLUGIN_CB(obj)->cb_user_data); } /* sdb_plugin_cb_destroy */ +static sdb_type_t sdb_plugin_cb_type = { + sizeof(sdb_plugin_cb_t), + + sdb_plugin_cb_init, + sdb_plugin_cb_destroy, + /* clone = */ NULL +}; + +static sdb_type_t sdb_plugin_collector_cb_type = { + sizeof(sdb_plugin_collector_cb_t), + + sdb_plugin_cb_init, + sdb_plugin_cb_destroy, + /* clone = */ NULL +}; + static int sdb_plugin_add_callback(sdb_llist_t **list, const char *type, const char *name, void *callback, sdb_object_t *user_data) @@ -239,8 +259,8 @@ sdb_plugin_add_callback(sdb_llist_t **list, const char *type, if (! *list) return -1; - obj = sdb_object_create(sizeof(sdb_plugin_cb_t), sdb_plugin_cb_init, - sdb_plugin_cb_destroy, list, type, name, callback, user_data); + obj = sdb_object_create(sdb_plugin_cb_type, + list, type, name, callback, user_data); if (! obj) return -1; @@ -252,7 +272,7 @@ sdb_plugin_add_callback(sdb_llist_t **list, const char *type, /* pass control to the list */ sdb_object_deref(obj); - sdb_log(SDB_LOG_INFO, "plugin: Registered %s callback '%s'.\n", + sdb_log(SDB_LOG_INFO, "plugin: Registered %s callback '%s'.", type, name); return 0; } /* sdb_plugin_add_callback */ @@ -296,7 +316,7 @@ sdb_plugin_load(const char *name) if (access(filename, R_OK)) { char errbuf[1024]; - sdb_log(SDB_LOG_ERR, "plugin: Failed to load plugin '%s' (%s): %s\n", + sdb_log(SDB_LOG_ERR, "plugin: Failed to load plugin '%s' (%s): %s", name, filename, sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; } @@ -306,7 +326,7 @@ sdb_plugin_load(const char *name) lh = lt_dlopen(filename); if (! lh) { - sdb_log(SDB_LOG_ERR, "plugin: Failed to load plugin '%s': %s\n" + sdb_log(SDB_LOG_ERR, "plugin: Failed to load plugin '%s': %s" "The most common cause for this problem are missing " "dependencies.\n", name, lt_dlerror()); return -1; @@ -315,14 +335,14 @@ sdb_plugin_load(const char *name) mod_init = (int (*)(sdb_plugin_info_t *))lt_dlsym(lh, "sdb_module_init"); if (! mod_init) { sdb_log(SDB_LOG_ERR, "plugin: Failed to load plugin '%s': " - "could not find symbol 'sdb_module_init'\n", name); + "could not find symbol 'sdb_module_init'", name); return -1; } status = mod_init(&plugin_info); if (status) { sdb_log(SDB_LOG_ERR, "plugin: Failed to initialize " - "plugin '%s'\n", name); + "plugin '%s'", name); return -1; } @@ -331,12 +351,12 @@ sdb_plugin_load(const char *name) || ((int)(plugin_info.version / 100) != (int)(SDB_VERSION / 100))) sdb_log(SDB_LOG_WARNING, "plugin: WARNING: version of " "plugin '%s' (%i.%i.%i) does not match our version " - "(%i.%i.%i); this might cause problems\n", + "(%i.%i.%i); this might cause problems", name, SDB_VERSION_DECODE(plugin_info.version), SDB_VERSION_DECODE(SDB_VERSION)); sdb_log(SDB_LOG_INFO, "plugin: Successfully loaded " - "plugin '%s' v%i (%s)\n\t%s\n", + "plugin '%s' v%i (%s)\n\t%s", plugin_info.name, plugin_info.plugin_version, plugin_info.description, plugin_info.copyright); return 0; @@ -435,8 +455,7 @@ sdb_plugin_register_collector(const char *name, sdb_plugin_collector_cb callback if (! collector_list) return -1; - obj = sdb_object_create(sizeof(sdb_plugin_collector_cb_t), - sdb_plugin_cb_init, sdb_plugin_cb_destroy, + obj = sdb_object_create(sdb_plugin_collector_cb_type, &collector_list, "collector", name, callback, user_data); if (! obj) return -1; @@ -455,7 +474,7 @@ sdb_plugin_register_collector(const char *name, sdb_plugin_collector_cb callback if (! (SDB_PLUGIN_CCB(obj)->ccb_next_update = sdb_gettime())) { char errbuf[1024]; sdb_log(SDB_LOG_ERR, "plugin: Failed to determine current " - "time: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); + "time: %s", sdb_strerror(errno, errbuf, sizeof(errbuf))); sdb_object_deref(obj); return -1; } @@ -470,7 +489,7 @@ sdb_plugin_register_collector(const char *name, sdb_plugin_collector_cb callback sdb_object_deref(obj); sdb_log(SDB_LOG_INFO, "plugin: Registered collector callback '%s' " - "(interval = %.3fs).\n", name, + "(interval = %.3fs).", name, SDB_TIME_TO_DOUBLE(SDB_PLUGIN_CCB(obj)->ccb_interval)); return 0; } /* sdb_plugin_register_collector */ @@ -528,7 +547,7 @@ sdb_plugin_configure(const char *name, oconfig_item_t *ci) if (! plugin) { /* XXX: check if any such plugin has been loaded */ sdb_log(SDB_LOG_ERR, "plugin: Plugin '%s' did not register " - "a config callback.\n", name); + "a config callback.", name); errno = ENOENT; return -1; } @@ -567,7 +586,13 @@ sdb_plugin_init_all(void) int sdb_plugin_collector_loop(sdb_plugin_loop_t *loop) { - if ((! collector_list) || (! loop)) + if (! collector_list) { + sdb_log(SDB_LOG_WARNING, "plugin: No collectors registered. " + "Quiting main loop."); + return -1; + } + + if (! loop) return -1; while (loop->do_loop) { @@ -585,7 +610,7 @@ sdb_plugin_collector_loop(sdb_plugin_loop_t *loop) if (! (now = sdb_gettime())) { char errbuf[1024]; sdb_log(SDB_LOG_ERR, "plugin: Failed to determine current " - "time: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); + "time: %s", sdb_strerror(errno, errbuf, sizeof(errbuf))); now = SDB_PLUGIN_CCB(obj)->ccb_next_update; } @@ -596,7 +621,7 @@ sdb_plugin_collector_loop(sdb_plugin_loop_t *loop) while (loop->do_loop && sdb_sleep(interval, &interval)) { if (errno != EINTR) { char errbuf[1024]; - sdb_log(SDB_LOG_ERR, "plugin: Failed to sleep: %s\n", + sdb_log(SDB_LOG_ERR, "plugin: Failed to sleep: %s", sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; } @@ -619,7 +644,7 @@ sdb_plugin_collector_loop(sdb_plugin_loop_t *loop) if (! interval) { sdb_log(SDB_LOG_WARNING, "plugin: No interval configured " "for plugin '%s'; skipping any further " - "iterations.\n", SDB_PLUGIN_CCB(obj)->ccb_name); + "iterations.", SDB_PLUGIN_CCB(obj)->ccb_name); sdb_object_deref(obj); continue; } @@ -629,13 +654,13 @@ sdb_plugin_collector_loop(sdb_plugin_loop_t *loop) if (! (now = sdb_gettime())) { char errbuf[1024]; sdb_log(SDB_LOG_ERR, "plugin: Failed to determine current " - "time: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); + "time: %s", sdb_strerror(errno, errbuf, sizeof(errbuf))); now = SDB_PLUGIN_CCB(obj)->ccb_next_update; } if (now > SDB_PLUGIN_CCB(obj)->ccb_next_update) { sdb_log(SDB_LOG_WARNING, "plugin: Plugin '%s' took too " - "long; skipping iterations to keep up.\n", + "long; skipping iterations to keep up.", SDB_PLUGIN_CCB(obj)->ccb_name); SDB_PLUGIN_CCB(obj)->ccb_next_update = now; } @@ -644,7 +669,7 @@ sdb_plugin_collector_loop(sdb_plugin_loop_t *loop) sdb_plugin_cmp_next_update)) { sdb_log(SDB_LOG_ERR, "plugin: Failed to re-insert " "plugin '%s' into collector list. Unable to further " - "use the plugin.\n", + "use the plugin.", SDB_PLUGIN_CCB(obj)->ccb_name); sdb_object_deref(obj); return -1;