annotate meta data to json objects
[collectd.git] / src / write_graphite.c
index fc2e2ed..d6583a7 100644 (file)
@@ -85,6 +85,7 @@ struct wg_callback
     char     escape_char;
 
     _Bool    store_rates;
+    _Bool    separate_instances;
     _Bool    always_append_ds;
 
     char     send_buf[WG_SEND_BUF_SIZE];
@@ -410,14 +411,18 @@ static int wg_format_name (char *ret, int ret_len,
             sizeof (n_type_instance), cb->escape_char);
 
     if (n_plugin_instance[0] != '\0')
-        ssnprintf (tmp_plugin, sizeof (tmp_plugin), "%s-%s",
-            n_plugin, n_plugin_instance);
+        ssnprintf (tmp_plugin, sizeof (tmp_plugin), "%s%c%s",
+            n_plugin,
+            cb->separate_instances ? '.' : '-',
+            n_plugin_instance);
     else
         sstrncpy (tmp_plugin, n_plugin, sizeof (tmp_plugin));
 
     if (n_type_instance[0] != '\0')
-        ssnprintf (tmp_type, sizeof (tmp_type), "%s-%s",
-            n_type, n_type_instance);
+        ssnprintf (tmp_type, sizeof (tmp_type), "%s%c%s",
+            n_type,
+            cb->separate_instances ? '.' : '-',
+            n_type_instance);
     else
         sstrncpy (tmp_type, n_type, sizeof (tmp_type));
 
@@ -482,7 +487,7 @@ static int wg_send_message (const char* key, const char* value,
     cb->send_buf_fill += message_len;
     cb->send_buf_free -= message_len;
 
-    DEBUG ("write_graphite plugin: <%s:%s> buf %zu/%zu (%g%%) \"%s\"",
+    DEBUG ("write_graphite plugin: [%s]:%s buf %zu/%zu (%.1f %%) \"%s\"",
             cb->node,
             cb->service,
             cb->send_buf_fill, sizeof (cb->send_buf),
@@ -600,6 +605,7 @@ static int wg_config_carbon (oconfig_item_t *ci)
 {
     struct wg_callback *cb;
     user_data_t user_data;
+    char callback_name[DATA_MAX_NAME_LEN];
     int i;
 
     cb = malloc (sizeof (*cb));
@@ -615,6 +621,7 @@ static int wg_config_carbon (oconfig_item_t *ci)
     cb->prefix = NULL;
     cb->postfix = NULL;
     cb->escape_char = WG_DEFAULT_ESCAPE;
+    cb->store_rates = 1;
 
     pthread_mutex_init (&cb->send_lock, /* attr = */ NULL);
 
@@ -632,6 +639,8 @@ static int wg_config_carbon (oconfig_item_t *ci)
             cf_util_get_string (child, &cb->postfix);
         else if (strcasecmp ("StoreRates", child->key) == 0)
             cf_util_get_boolean (child, &cb->store_rates);
+        else if (strcasecmp ("SeparateInstances", child->key) == 0)
+            cf_util_get_boolean (child, &cb->separate_instances);
         else if (strcasecmp ("AlwaysAppendDS", child->key) == 0)
             cf_util_get_boolean (child, &cb->always_append_ds);
         else if (strcasecmp ("EscapeCharacter", child->key) == 0)
@@ -643,17 +652,17 @@ static int wg_config_carbon (oconfig_item_t *ci)
         }
     }
 
-    DEBUG ("write_graphite: Registering write callback to carbon agent %s:%s",
-            cb->node ? cb->node : WG_DEFAULT_NODE,
-            cb->service ? cb->service : WG_DEFAULT_SERVICE);
+    ssnprintf (callback_name, sizeof (callback_name), "write_graphite/%s/%s",
+            cb->node != NULL ? cb->node : WG_DEFAULT_NODE,
+            cb->service != NULL ? cb->service : WG_DEFAULT_SERVICE);
 
     memset (&user_data, 0, sizeof (user_data));
     user_data.data = cb;
-    user_data.free_func = NULL;
-    plugin_register_flush ("write_graphite", wg_flush, &user_data);
-
     user_data.free_func = wg_callback_free;
-    plugin_register_write ("write_graphite", wg_write, &user_data);
+    plugin_register_write (callback_name, wg_write, &user_data);
+
+    user_data.free_func = NULL;
+    plugin_register_flush (callback_name, wg_flush, &user_data);
 
     return (0);
 }