Code

Let the JSON formatter include a metric's data_names.
[sysdb.git] / src / plugins / backend / collectd / unixsock.c
index b1db539b84738a571a8b456b45658c6a6099593f..73d0dc6228e8aff05c5c7b41195412a1cfc63ffa 100644 (file)
@@ -44,6 +44,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <strings.h>
 
 SDB_PLUGIN_MAGIC;
 
@@ -90,6 +91,8 @@ user_data_destroy(void *obj)
        if (ud->ts_base)
                free(ud->ts_base);
        ud->ts_type = ud->ts_base = NULL;
+
+       free(ud);
 } /* user_data_destroy */
 
 /* store the specified host-name (once per iteration) */
@@ -123,7 +126,7 @@ store_host(state_t *state, const char *hostname, sdb_time_t last_update)
                return -1;
        }
 
-       status = sdb_store_host(hostname, last_update);
+       status = sdb_plugin_store_host(hostname, last_update);
 
        if (status < 0) {
                sdb_log(SDB_LOG_ERR, "collectd::unixsock backend: Failed to "
@@ -148,7 +151,7 @@ add_metrics(const char *hostname, char *plugin, char *type,
 
        char metric_id[(ud->ts_base ? strlen(ud->ts_base) : 0)
                + strlen(hostname) + sizeof(name) + 7];
-       sdb_metric_store_t store = { ud->ts_type, metric_id };
+       sdb_metric_store_t store = { ud->ts_type, metric_id, NULL, last_update };
 
        sdb_data_t data = { SDB_TYPE_STRING, { .string = NULL } };
 
@@ -159,10 +162,10 @@ add_metrics(const char *hostname, char *plugin, char *type,
        if (ud->ts_base) {
                snprintf(metric_id, sizeof(metric_id), "%s/%s/%s.rrd",
                                ud->ts_base, hostname, name);
-               status = sdb_store_metric(hostname, name, &store, last_update);
+               status = sdb_plugin_store_metric(hostname, name, &store, last_update);
        }
        else
-               status = sdb_store_metric(hostname, name, NULL, last_update);
+               status = sdb_plugin_store_metric(hostname, name, NULL, last_update);
        if (status < 0) {
                sdb_log(SDB_LOG_ERR, "collectd::unixsock backend: Failed to "
                                "store/update metric '%s/%s'.", hostname, name);
@@ -175,7 +178,7 @@ add_metrics(const char *hostname, char *plugin, char *type,
                ++plugin_instance;
 
                data.data.string = plugin_instance;
-               sdb_store_metric_attr(hostname, name,
+               sdb_plugin_store_metric_attribute(hostname, name,
                                "plugin_instance", &data, last_update);
        }
 
@@ -185,14 +188,14 @@ add_metrics(const char *hostname, char *plugin, char *type,
                ++type_instance;
 
                data.data.string = type_instance;
-               sdb_store_metric_attr(hostname, name,
+               sdb_plugin_store_metric_attribute(hostname, name,
                                "type_instance", &data, last_update);
        }
 
        data.data.string = plugin;
-       sdb_store_metric_attr(hostname, name, "plugin", &data, last_update);
+       sdb_plugin_store_metric_attribute(hostname, name, "plugin", &data, last_update);
        data.data.string = type;
-       sdb_store_metric_attr(hostname, name, "type", &data, last_update);
+       sdb_plugin_store_metric_attribute(hostname, name, "type", &data, last_update);
        return 0;
 } /* add_metrics */
 
@@ -405,6 +408,18 @@ sdb_collectd_config_instance(oconfig_item_t *ci)
        }
 
        if (ud->ts_type) {
+               /* TODO: add support for other backend types
+                * -> will require different ID generation */
+               if (strcasecmp(ud->ts_type, "rrdtool")
+                               && strcasecmp(ud->ts_type, "rrdcached")) {
+                       sdb_log(SDB_LOG_ERR, "collectd::unixsock backend: "
+                                       "TimeseriesBackend '%s' is not supported - "
+                                       "use 'rrdtool' instead.", ud->ts_type);
+                       ud->ts_type = ud->ts_base = NULL;
+                       user_data_destroy(ud);
+                       return -1;
+               }
+
                ud->ts_type = strdup(ud->ts_type);
                ud->ts_base = strdup(ud->ts_base);
                if ((! ud->ts_type) || (! ud->ts_base)) {