Code

Let the front-end handle STORE commands.
[sysdb.git] / src / core / plugin.c
index da8a485b960a4786b914102e9f9fbc741378170a..235b8c7721ba97d08dc1b165c6ac0812ed7c6292 100644 (file)
@@ -1433,6 +1433,17 @@ sdb_plugin_query(sdb_ast_node_t *ast, sdb_strbuf_t *buf, sdb_strbuf_t *errbuf)
        if (! ast)
                return 0;
 
+       if ((ast->type != SDB_AST_TYPE_FETCH)
+                       && (ast->type != SDB_AST_TYPE_LIST)
+                       && (ast->type != SDB_AST_TYPE_LOOKUP)
+                       && (ast->type != SDB_AST_TYPE_TIMESERIES)) {
+               sdb_log(SDB_LOG_ERR, "core: Cannot execute query of type %s",
+                               SDB_AST_TYPE_TO_STRING(ast));
+               sdb_strbuf_sprintf(errbuf, "Cannot execute query of type %s",
+                               SDB_AST_TYPE_TO_STRING(ast));
+               return -1;
+       }
+
        if (n != 1) {
                char *msg = (n > 0)
                        ? "Cannot execute query: multiple readers not supported"
@@ -1459,6 +1470,8 @@ 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;
 
@@ -1471,16 +1484,23 @@ sdb_plugin_store_host(const char *name, sdb_time_t last_update)
                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 */
 
@@ -1488,6 +1508,8 @@ 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;
 
@@ -1500,17 +1522,24 @@ sdb_plugin_store_service(const char *hostname, const char *name,
                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 */
 
@@ -1518,6 +1547,8 @@ 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;
 
@@ -1530,6 +1561,12 @@ sdb_plugin_store_metric(const char *hostname, const char *name,
                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;
 
@@ -1538,12 +1575,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 */
 
@@ -1551,6 +1589,8 @@ 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;
 
@@ -1563,17 +1603,24 @@ sdb_plugin_store_attribute(const char *hostname, const char *key,
                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 */
 
@@ -1581,6 +1628,8 @@ 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;
 
@@ -1593,17 +1642,24 @@ sdb_plugin_store_service_attribute(const char *hostname, const char *service,
                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 */
 
@@ -1611,6 +1667,8 @@ 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;
 
@@ -1623,17 +1681,24 @@ sdb_plugin_store_metric_attribute(const char *hostname, const char *metric,
                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 */