netapp plugin: Added support for SnapVaultĀ® statistics.
[collectd.git] / src / write_riemann.c
index e3f013e..62d75f3 100644 (file)
@@ -44,6 +44,7 @@ struct riemann_host {
        uint8_t                  flags;
        pthread_mutex_t          lock;
        _Bool                    store_rates;
+       _Bool                    always_append_ds;
        char                    *node;
        char                    *service;
        int                      s;
@@ -235,11 +236,10 @@ static Msg *riemann_notification_to_protobuf (struct riemann_host *host, /* {{{
        for (i = 0; i < riemann_tags_num; i++)
                riemann_event_add_tag (event, "%s", riemann_tags[i]);
 
-       /* TODO: Use FORMAT_VL() here. */
-       ssnprintf (service_buffer, sizeof(service_buffer),
-                       "%s-%s-%s-%s", n->plugin, n->plugin_instance,
+       format_name (service_buffer, sizeof (service_buffer),
+                       /* host = */ "", n->plugin, n->plugin_instance,
                        n->type, n->type_instance);
-       event->service = strdup (service_buffer);
+       event->service = strdup (&service_buffer[1]);
 
        /* Pull in values from threshold */
        for (meta = n->meta; meta != NULL; meta = meta->next)
@@ -264,6 +264,7 @@ static Event *riemann_value_to_protobuf (struct riemann_host const *host, /* {{{
                gauge_t const *rates)
 {
        Event *event;
+       char name_buffer[5 * DATA_MAX_NAME_LEN];
        char service_buffer[6 * DATA_MAX_NAME_LEN];
        int i;
 
@@ -329,10 +330,16 @@ static Event *riemann_value_to_protobuf (struct riemann_host const *host, /* {{{
                        event->metric_sint64 = (int64_t) vl->values[index].counter;
        }
 
-       /* TODO: Use FORMAT_VL() here. */
-       ssnprintf (service_buffer, sizeof(service_buffer),
-                       "%s-%s-%s-%s-%s", vl->plugin, vl->plugin_instance,
-                       vl->type, vl->type_instance, ds->ds[index].name);
+       format_name (name_buffer, sizeof (name_buffer),
+                       /* host = */ "", vl->plugin, vl->plugin_instance,
+                       vl->type, vl->type_instance);
+       if (host->always_append_ds || (ds->ds_num > 1))
+               ssnprintf (service_buffer, sizeof (service_buffer),
+                               "%s/%s", &name_buffer[1], ds->ds[index].name);
+       else
+               sstrncpy (service_buffer, &name_buffer[1],
+                               sizeof (service_buffer));
+
        event->service = strdup (service_buffer);
 
        DEBUG ("write_riemann plugin: Successfully created protobuf for metric: "
@@ -554,6 +561,7 @@ riemann_config_node(oconfig_item_t *ci)
        host->node = NULL;
        host->service = NULL;
        host->store_rates = 1;
+       host->always_append_ds = 0;
 
        status = cf_util_get_string (ci, &host->name);
        if (status != 0) {
@@ -586,6 +594,11 @@ riemann_config_node(oconfig_item_t *ci)
                        status = cf_util_get_boolean (child, &host->store_rates);
                        if (status != 0)
                                break;
+               } else if (strcasecmp ("AlwaysAppendDS", child->key) == 0) {
+                       status = cf_util_get_boolean (child,
+                                       &host->always_append_ds);
+                       if (status != 0)
+                               break;
                } else {
                        WARNING("write_riemann plugin: ignoring unknown config "
                                "option: \"%s\"", child->key);