X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Futils_format_graphite.c;h=023f7a46a5240f7a7f52e3c9d6f237c91f932223;hb=dab48f284f9d4bb6ae98244310c5cdb6c5d91bf3;hp=83512015898e22b27c527b431aa03bdcda5f2865;hpb=842c1a2d2a640151a89b9de7f4acd3b6a058c799;p=collectd.git diff --git a/src/utils_format_graphite.c b/src/utils_format_graphite.c index 83512015..023f7a46 100644 --- a/src/utils_format_graphite.c +++ b/src/utils_format_graphite.c @@ -27,7 +27,8 @@ #include "utils_format_graphite.h" #include "utils_cache.h" -#include "utils_parse_option.h" + +#define GRAPHITE_FORBIDDEN " \t\"\\:!/()\n\r" /* Utils functions to format data sets in graphite format. * Largely taken from write_graphite.c as it remains the same formatting */ @@ -59,7 +60,7 @@ static int gr_format_values (char *ret, size_t ret_len, } while (0) if (ds->ds[ds_num].type == DS_TYPE_GAUGE) - BUFFER_ADD ("%f", vl->values[ds_num].gauge); + BUFFER_ADD (GAUGE_FORMAT, vl->values[ds_num].gauge); else if (rates != NULL) BUFFER_ADD ("%f", rates[ds_num]); else if (ds->ds[ds_num].type == DS_TYPE_COUNTER) @@ -169,6 +170,18 @@ static int gr_format_name (char *ret, int ret_len, return (0); } +static void escape_graphite_string (char *buffer, char escape_char) +{ + char *head; + + assert (strchr(GRAPHITE_FORBIDDEN, escape_char) == NULL); + + for (head = buffer + strcspn(buffer, GRAPHITE_FORBIDDEN); + *head != '\0'; + head += strcspn(head, GRAPHITE_FORBIDDEN)) + *head = escape_char; +} + int format_graphite (char *buffer, size_t buffer_size, data_set_t const *ds, value_list_t const *vl, char const *prefix, char const *postfix, char const escape_char, @@ -204,7 +217,7 @@ int format_graphite (char *buffer, size_t buffer_size, return (status); } - escape_string (key, sizeof (key)); + escape_graphite_string (key, escape_char); /* Convert the values to an ASCII representation and put that into * `values'. */ status = gr_format_values (values, sizeof (values), i, ds, vl, rates);