X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fcore%2Fplugin.c;h=6b1560336b311a659c35566333d78a147d8d39c2;hp=26b1408001717d0a7fb2aa9d953a3c3a0125a8f9;hb=502bbcd0731ca35b4f3d93653a818f5246f81e0b;hpb=182112ccd9852672b39ff958ab0c605c9ef856ad diff --git a/src/core/plugin.c b/src/core/plugin.c index 26b1408..6b15603 100644 --- a/src/core/plugin.c +++ b/src/core/plugin.c @@ -1459,22 +1459,37 @@ sdb_plugin_query(sdb_ast_node_t *ast, sdb_strbuf_t *buf, sdb_strbuf_t *errbuf) int sdb_plugin_store_host(const char *name, sdb_time_t last_update) { + char *cname; + sdb_llist_iter_t *iter; int status = 0; if (! name) return -1; + if (! sdb_llist_len(writer_list)) { + sdb_log(SDB_LOG_ERR, "core: Cannot store host: " + "no writers registered"); + return -1; + } + + cname = sdb_plugin_cname(strdup(name)); + if (! cname) { + sdb_log(SDB_LOG_ERR, "core: strdup failed"); + return -1; + } + iter = sdb_llist_get_iter(writer_list); while (sdb_llist_iter_has_next(iter)) { writer_t *writer = WRITER(sdb_llist_iter_get_next(iter)); int s; assert(writer); - s = writer->impl.store_host(name, last_update, writer->w_user_data); + s = writer->impl.store_host(cname, last_update, writer->w_user_data); if (((s > 0) && (status >= 0)) || (s < 0)) status = s; } sdb_llist_iter_destroy(iter); + free(cname); return status; } /* sdb_plugin_store_host */ @@ -1482,23 +1497,38 @@ int sdb_plugin_store_service(const char *hostname, const char *name, sdb_time_t last_update) { + char *cname; + sdb_llist_iter_t *iter; int status = 0; if ((! hostname) || (! name)) return -1; + if (! sdb_llist_len(writer_list)) { + sdb_log(SDB_LOG_ERR, "core: Cannot store service: " + "no writers registered"); + return -1; + } + + cname = sdb_plugin_cname(strdup(hostname)); + if (! cname) { + sdb_log(SDB_LOG_ERR, "core: strdup failed"); + return -1; + } + iter = sdb_llist_get_iter(writer_list); while (sdb_llist_iter_has_next(iter)) { writer_t *writer = WRITER(sdb_llist_iter_get_next(iter)); int s; assert(writer); - s = writer->impl.store_service(hostname, name, last_update, + s = writer->impl.store_service(cname, name, last_update, writer->w_user_data); if (((s > 0) && (status >= 0)) || (s < 0)) status = s; } sdb_llist_iter_destroy(iter); + free(cname); return status; } /* sdb_plugin_store_service */ @@ -1506,12 +1536,26 @@ int sdb_plugin_store_metric(const char *hostname, const char *name, sdb_metric_store_t *store, sdb_time_t last_update) { + char *cname; + sdb_llist_iter_t *iter; int status = 0; if ((! hostname) || (! name)) return -1; + if (! sdb_llist_len(writer_list)) { + sdb_log(SDB_LOG_ERR, "core: Cannot store metric: " + "no writers registered"); + return -1; + } + + cname = sdb_plugin_cname(strdup(hostname)); + if (! cname) { + sdb_log(SDB_LOG_ERR, "core: strdup failed"); + return -1; + } + if (store && ((! store->type) || (! store->id))) store = NULL; @@ -1520,12 +1564,13 @@ sdb_plugin_store_metric(const char *hostname, const char *name, writer_t *writer = WRITER(sdb_llist_iter_get_next(iter)); int s; assert(writer); - s = writer->impl.store_metric(hostname, name, store, last_update, + s = writer->impl.store_metric(cname, name, store, last_update, writer->w_user_data); if (((s > 0) && (status >= 0)) || (s < 0)) status = s; } sdb_llist_iter_destroy(iter); + free(cname); return status; } /* sdb_plugin_store_metric */ @@ -1533,23 +1578,38 @@ int sdb_plugin_store_attribute(const char *hostname, const char *key, const sdb_data_t *value, sdb_time_t last_update) { + char *cname; + sdb_llist_iter_t *iter; int status = 0; if ((! hostname) || (! key) || (! value)) return -1; + if (! sdb_llist_len(writer_list)) { + sdb_log(SDB_LOG_ERR, "core: Cannot store attribute: " + "no writers registered"); + return -1; + } + + cname = sdb_plugin_cname(strdup(hostname)); + if (! cname) { + sdb_log(SDB_LOG_ERR, "core: strdup failed"); + return -1; + } + iter = sdb_llist_get_iter(writer_list); while (sdb_llist_iter_has_next(iter)) { writer_t *writer = WRITER(sdb_llist_iter_get_next(iter)); int s; assert(writer); - s = writer->impl.store_attribute(hostname, key, value, last_update, + s = writer->impl.store_attribute(cname, key, value, last_update, writer->w_user_data); if (((s > 0) && (status >= 0)) || (s < 0)) status = s; } sdb_llist_iter_destroy(iter); + free(cname); return status; } /* sdb_plugin_store_attribute */ @@ -1557,23 +1617,38 @@ int sdb_plugin_store_service_attribute(const char *hostname, const char *service, const char *key, const sdb_data_t *value, sdb_time_t last_update) { + char *cname; + sdb_llist_iter_t *iter; int status = 0; if ((! hostname) || (! service) || (! key) || (! value)) return -1; + if (! sdb_llist_len(writer_list)) { + sdb_log(SDB_LOG_ERR, "core: Cannot store service attribute: " + "no writers registered"); + return -1; + } + + cname = sdb_plugin_cname(strdup(hostname)); + if (! cname) { + sdb_log(SDB_LOG_ERR, "core: strdup failed"); + return -1; + } + iter = sdb_llist_get_iter(writer_list); while (sdb_llist_iter_has_next(iter)) { writer_t *writer = WRITER(sdb_llist_iter_get_next(iter)); int s; assert(writer); - s = writer->impl.store_service_attr(hostname, service, + s = writer->impl.store_service_attr(cname, service, key, value, last_update, writer->w_user_data); if (((s > 0) && (status >= 0)) || (s < 0)) status = s; } sdb_llist_iter_destroy(iter); + free(cname); return status; } /* sdb_plugin_store_service_attribute */ @@ -1581,23 +1656,38 @@ int sdb_plugin_store_metric_attribute(const char *hostname, const char *metric, const char *key, const sdb_data_t *value, sdb_time_t last_update) { + char *cname; + sdb_llist_iter_t *iter; int status = 0; if ((! hostname) || (! metric) || (! key) || (! value)) return -1; + if (! sdb_llist_len(writer_list)) { + sdb_log(SDB_LOG_ERR, "core: Cannot store metric attribute: " + "no writers registered"); + return -1; + } + + cname = sdb_plugin_cname(strdup(hostname)); + if (! cname) { + sdb_log(SDB_LOG_ERR, "core: strdup failed"); + return -1; + } + iter = sdb_llist_get_iter(writer_list); while (sdb_llist_iter_has_next(iter)) { writer_t *writer = WRITER(sdb_llist_iter_get_next(iter)); int s; assert(writer); - s = writer->impl.store_metric_attr(hostname, metric, + s = writer->impl.store_metric_attr(cname, metric, key, value, last_update, writer->w_user_data); if (((s > 0) && (status >= 0)) || (s < 0)) status = s; } sdb_llist_iter_destroy(iter); + free(cname); return status; } /* sdb_plugin_store_metric_attribute */