X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Futils_format_kairosdb.c;h=4003243bf79f5661ad580649ab5b5421ee941602;hp=1e54b97c32d0135537032ffd7325774762719ae3;hb=06a86a60a7dabc685bdbd81ce3d36ea5f7e2c2d4;hpb=64b8150edec2271bb110f36e70915fdd87d9cac2 diff --git a/src/utils_format_kairosdb.c b/src/utils_format_kairosdb.c index 1e54b97c..4003243b 100644 --- a/src/utils_format_kairosdb.c +++ b/src/utils_format_kairosdb.c @@ -59,10 +59,10 @@ static int kairosdb_escape_string(char *buffer, size_t buffer_size, /* {{{ */ size_t dst_pos; if ((buffer == NULL) || (string == NULL)) - return (-EINVAL); + return -EINVAL; if (buffer_size < 3) - return (-ENOMEM); + return -ENOMEM; dst_pos = 0; @@ -70,7 +70,7 @@ static int kairosdb_escape_string(char *buffer, size_t buffer_size, /* {{{ */ do { \ if (dst_pos >= (buffer_size - 1)) { \ buffer[buffer_size - 1] = 0; \ - return (-ENOMEM); \ + return -ENOMEM; \ } \ buffer[dst_pos] = (c); \ dst_pos++; \ @@ -89,7 +89,7 @@ static int kairosdb_escape_string(char *buffer, size_t buffer_size, /* {{{ */ #undef BUFFER_ADD - return (0); + return 0; } /* }}} int kairosdb_escape_string */ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ @@ -103,13 +103,13 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ #define BUFFER_ADD(...) \ do { \ int status; \ - status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ + status = snprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) { \ sfree(rates); \ - return (-1); \ + return -1; \ } else if (((size_t)status) >= (buffer_size - offset)) { \ sfree(rates); \ - return (-ENOMEM); \ + return -ENOMEM; \ } else \ offset += ((size_t)status); \ } while (0) @@ -125,7 +125,7 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ "%s|%s|%s|%s|%s", vl->plugin, vl->plugin_instance, vl->type, vl->type_instance, ds->ds[ds_idx].name); - return (-1); + return -1; } } else if (store_rates) { if (rates == NULL) @@ -135,7 +135,7 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ vl->plugin, vl->plugin_instance, vl->type, vl->type_instance, ds->ds[ds_idx].name); - return (-1); + return -1; } if (isfinite(rates[ds_idx])) { @@ -148,13 +148,13 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ vl->plugin, vl->plugin_instance, vl->type, vl->type_instance, ds->ds[ds_idx].name); sfree(rates); - return (-1); + return -1; } } else if (ds->ds[ds_idx].type == DS_TYPE_COUNTER) { BUFFER_ADD("[["); BUFFER_ADD("%" PRIu64, CDTIME_T_TO_MS(vl->time)); BUFFER_ADD(","); - BUFFER_ADD("%llu", vl->values[ds_idx].counter); + BUFFER_ADD("%" PRIu64, (uint64_t)vl->values[ds_idx].counter); } else if (ds->ds[ds_idx].type == DS_TYPE_DERIVE) { BUFFER_ADD("[["); BUFFER_ADD("%" PRIu64, CDTIME_T_TO_MS(vl->time)); @@ -168,7 +168,7 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ } else { ERROR("format_kairosdb: Unknown data source type: %i", ds->ds[ds_idx].type); sfree(rates); - return (-1); + return -1; } BUFFER_ADD("]]"); @@ -176,12 +176,15 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ DEBUG("format_kairosdb: values_to_kairosdb: buffer = %s;", buffer); sfree(rates); - return (0); + return 0; } /* }}} int values_to_kairosdb */ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ const data_set_t *ds, const value_list_t *vl, - int store_rates) { + int store_rates, + char const *const *http_attrs, + size_t http_attrs_num, int data_ttl, + char const *metrics_prefix) { char temp[512]; size_t offset = 0; int status; @@ -190,11 +193,11 @@ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ #define BUFFER_ADD(...) \ do { \ - status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ + status = snprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) \ - return (-1); \ + return -1; \ else if (((size_t)status) >= (buffer_size - offset)) \ - return (-ENOMEM); \ + return -ENOMEM; \ else \ offset += ((size_t)status); \ } while (0) @@ -203,22 +206,24 @@ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ do { \ status = kairosdb_escape_string(temp, sizeof(temp), (value)); \ if (status != 0) \ - return (status); \ + return status; \ BUFFER_ADD(",\"%s\": %s", (key), temp); \ } while (0) for (size_t i = 0; i < ds->ds_num; i++) { /* All value lists have a leading comma. The first one will be replaced with * a square bracket in `format_kairosdb_finalize'. */ - BUFFER_ADD(",{"); + BUFFER_ADD(",{\"name\":\""); - BUFFER_ADD("\"name\":\"collectd"); + if (metrics_prefix != NULL) { + BUFFER_ADD("%s.", metrics_prefix); + } - BUFFER_ADD(".%s", vl->plugin); + BUFFER_ADD("%s", vl->plugin); status = values_to_kairosdb(temp, sizeof(temp), ds, vl, store_rates, i); if (status != 0) - return (status); + return status; BUFFER_ADD("\", \"datapoints\": %s", temp); @@ -228,9 +233,17 @@ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ memset(temp, 0, sizeof(temp)); + if (data_ttl != 0) + BUFFER_ADD(", \"ttl\": %i", data_ttl); + BUFFER_ADD(", \"tags\":\{"); BUFFER_ADD("\"host\": \"%s\"", vl->host); + for (size_t j = 0; j < http_attrs_num; j += 2) { + BUFFER_ADD(", \"%s\":", http_attrs[j]); + BUFFER_ADD(" \"%s\"", http_attrs[j + 1]); + } + if (strlen(vl->plugin_instance)) BUFFER_ADD_KEYVAL("plugin_instance", vl->plugin_instance); BUFFER_ADD_KEYVAL("type", vl->type); @@ -246,26 +259,30 @@ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ DEBUG("format_kairosdb: value_list_to_kairosdb: buffer = %s;", buffer); - return (0); + return 0; } /* }}} int value_list_to_kairosdb */ static int format_kairosdb_value_list_nocheck( char *buffer, /* {{{ */ size_t *ret_buffer_fill, size_t *ret_buffer_free, const data_set_t *ds, - const value_list_t *vl, int store_rates, size_t temp_size) { + const value_list_t *vl, int store_rates, size_t temp_size, + char const *const *http_attrs, size_t http_attrs_num, int data_ttl, + char const *metrics_prefix) { char temp[temp_size]; int status; - status = value_list_to_kairosdb(temp, sizeof(temp), ds, vl, store_rates); + status = value_list_to_kairosdb(temp, sizeof(temp), ds, vl, store_rates, + http_attrs, http_attrs_num, data_ttl, + metrics_prefix); if (status != 0) - return (status); + return status; temp_size = strlen(temp); memcpy(buffer + (*ret_buffer_fill), temp, temp_size + 1); (*ret_buffer_fill) += temp_size; (*ret_buffer_free) -= temp_size; - return (0); + return 0; } /* }}} int format_kairosdb_value_list_nocheck */ int format_kairosdb_initialize(char *buffer, /* {{{ */ @@ -276,7 +293,7 @@ int format_kairosdb_initialize(char *buffer, /* {{{ */ if ((buffer == NULL) || (ret_buffer_fill == NULL) || (ret_buffer_free == NULL)) - return (-EINVAL); + return -EINVAL; buffer_fill = *ret_buffer_fill; buffer_free = *ret_buffer_free; @@ -285,13 +302,13 @@ int format_kairosdb_initialize(char *buffer, /* {{{ */ buffer_fill = 0; if (buffer_free < 3) - return (-ENOMEM); + return -ENOMEM; memset(buffer, 0, buffer_free); *ret_buffer_fill = buffer_fill; *ret_buffer_free = buffer_free; - return (0); + return 0; } /* }}} int format_kairosdb_initialize */ int format_kairosdb_finalize(char *buffer, /* {{{ */ @@ -300,15 +317,15 @@ int format_kairosdb_finalize(char *buffer, /* {{{ */ if ((buffer == NULL) || (ret_buffer_fill == NULL) || (ret_buffer_free == NULL)) - return (-EINVAL); + return -EINVAL; if (*ret_buffer_free < 2) - return (-ENOMEM); + return -ENOMEM; /* Replace the leading comma added in `value_list_to_kairosdb' with a square * bracket. */ if (buffer[0] != ',') - return (-EINVAL); + return -EINVAL; buffer[0] = '['; pos = *ret_buffer_fill; @@ -318,21 +335,26 @@ int format_kairosdb_finalize(char *buffer, /* {{{ */ (*ret_buffer_fill)++; (*ret_buffer_free)--; - return (0); + return 0; } /* }}} int format_kairosdb_finalize */ int format_kairosdb_value_list(char *buffer, /* {{{ */ size_t *ret_buffer_fill, size_t *ret_buffer_free, const data_set_t *ds, const value_list_t *vl, - int store_rates) { + int store_rates, char const *const *http_attrs, + size_t http_attrs_num, int data_ttl, + char const *metrics_prefix) { if ((buffer == NULL) || (ret_buffer_fill == NULL) || (ret_buffer_free == NULL) || (ds == NULL) || (vl == NULL)) - return (-EINVAL); + return -EINVAL; if (*ret_buffer_free < 3) - return (-ENOMEM); + return -ENOMEM; - return (format_kairosdb_value_list_nocheck( + return format_kairosdb_value_list_nocheck( buffer, ret_buffer_fill, ret_buffer_free, ds, vl, store_rates, - (*ret_buffer_free) - 2)); + (*ret_buffer_free) - 2, http_attrs, http_attrs_num, data_ttl, + metrics_prefix); } /* }}} int format_kairosdb_value_list */ + +/* vim: set sw=2 sts=2 et fdm=marker : */