ignore EventServicePrefix when its empty ("")
[collectd.git] / src / write_riemann.c
index 9d2b539..7f0211f 100644 (file)
@@ -1,20 +1,25 @@
 /**
  * collectd - src/write_riemann.c
- *
  * Copyright (C) 2012,2013  Pierre-Yves Ritschard
  * Copyright (C) 2013       Florian octo Forster
  *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
  *
  * Authors:
  *   Pierre-Yves Ritschard <pyr at spootnik.org>
@@ -43,6 +48,7 @@ int write_riemann_threshold_check(const data_set_t *, const value_list_t *, int
 
 struct riemann_host {
        char                    *name;
+       char                    *prefix;
 #define F_CONNECT               0x01
        uint8_t                  flags;
        pthread_mutex_t          lock;
@@ -154,7 +160,7 @@ static int riemann_connect(struct riemann_host *host) /* {{{ */
                }
 
                host->flags |= F_CONNECT;
-               DEBUG("write_riemann plugin: got a succesful connection for: %s:%s",
+               DEBUG("write_riemann plugin: got a successful connection for: %s:%s",
                                node, service);
                break;
        }
@@ -564,11 +570,19 @@ static Event *riemann_value_to_protobuf (struct riemann_host const *host, /* {{{
                        /* 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);
+               if (host->prefix == NULL || host->prefix[0] == '\0')
+                       ssnprintf (service_buffer, sizeof (service_buffer),
+                                       "%s/%s", &name_buffer[1], ds->ds[index].name);
+               else
+                       ssnprintf (service_buffer, sizeof (service_buffer),
+                                       "%s/%s/%s", host->prefix, &name_buffer[1], ds->ds[index].name);
        else
-               sstrncpy (service_buffer, &name_buffer[1],
-                               sizeof (service_buffer));
+               if (host->prefix == NULL || host->prefix[0] == '\0')
+                       sstrncpy (service_buffer, &name_buffer[1],
+                                       sizeof (service_buffer));
+               else
+                       ssnprintf (service_buffer, sizeof (service_buffer),
+                                       "%s/%s", host->prefix, &name_buffer[1]);
 
        event->service = strdup (service_buffer);
 
@@ -750,6 +764,9 @@ static int riemann_config_node(oconfig_item_t *ci) /* {{{ */
             status = cf_util_get_boolean(child, &host->notifications);
             if (status != 0)
                 break;
+        } else if (strcasecmp ("EventServicePrefix", child->key) == 0) {
+            status = cf_util_get_string (child, &host->prefix);
+                break;
         } else if (strcasecmp ("CheckThresholds", child->key) == 0) {
             status = cf_util_get_boolean(child, &host->check_thresholds);
             if (status != 0)