X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fwrite_tsdb.c;h=4a626144f60498c2cd3a83fafba728c8b82b9b1b;hb=73de67494a4f5d9a698f2a5ab93f85e19bccb90a;hp=bf83560cf32dcca9eb63f7f64508f6c79cfa31e5;hpb=f05aee87b3af4c8991448cdf5e9423bf0e0ee3ff;p=collectd.git diff --git a/src/write_tsdb.c b/src/write_tsdb.c index bf83560c..4a626144 100644 --- a/src/write_tsdb.c +++ b/src/write_tsdb.c @@ -47,10 +47,8 @@ #include "configfile.h" #include "utils_cache.h" -#include "utils_parse_option.h" #include -#include #include #ifndef WT_DEFAULT_NODE @@ -80,10 +78,8 @@ struct wt_callback char *node; char *service; char *host_tags; - char escape_char; _Bool store_rates; - _Bool separate_instances; _Bool always_append_ds; char send_buf[WT_SEND_BUF_SIZE]; @@ -311,7 +307,7 @@ static int wt_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 (store_rates) { if (rates == NULL) @@ -322,7 +318,7 @@ static int wt_format_values(char *ret, size_t ret_len, "uc_get_rate failed."); return -1; } - BUFFER_ADD("%f", rates[ds_num]); + BUFFER_ADD(GAUGE_FORMAT, rates[ds_num]); } else if (ds->ds[ds_num].type == DS_TYPE_COUNTER) BUFFER_ADD("%llu", vl->values[ds_num].counter); @@ -368,30 +364,41 @@ static int wt_format_name(char *ret, int ret_len, if (ds_name != NULL) { if (vl->plugin_instance[0] == '\0') { - ssnprintf(ret, ret_len, "%s%s.%s", - prefix, vl->plugin, ds_name); - } else if (vl->type_instance == '\0') { - ssnprintf(ret, ret_len, "%s%s.%s.%s.%s", - prefix, vl->plugin, vl->plugin_instance, - vl->type_instance, ds_name); - } else { - ssnprintf(ret, ret_len, "%s%s.%s.%s.%s", - prefix, vl->plugin, vl->plugin_instance, vl->type, - ds_name); + if (vl->type_instance[0] == '\0') { + ssnprintf(ret, ret_len, "%s%s.%s.%s", prefix, vl->plugin, + vl->type, ds_name); + } else { + ssnprintf(ret, ret_len, "%s%s.%s.%s.%s", prefix, vl->plugin, + vl->type, vl->type_instance, ds_name); + } + } else { /* vl->plugin_instance != "" */ + if (vl->type_instance[0] == '\0') { + ssnprintf(ret, ret_len, "%s%s.%s.%s.%s", prefix, vl->plugin, + vl->plugin_instance, vl->type, ds_name); + } else { + ssnprintf(ret, ret_len, "%s%s.%s.%s.%s.%s", prefix, + vl->plugin, vl->plugin_instance, vl->type, + vl->type_instance, ds_name); + } + } + } else { /* ds_name == NULL */ + if (vl->plugin_instance[0] == '\0') { + if (vl->type_instance[0] == '\0') { + ssnprintf(ret, ret_len, "%s%s.%s", prefix, vl->plugin, + vl->type); + } else { + ssnprintf(ret, ret_len, "%s%s.%s.%s", prefix, vl->plugin, + vl->type_instance, vl->type); + } + } else { /* vl->plugin_instance != "" */ + if (vl->type_instance[0] == '\0') { + ssnprintf(ret, ret_len, "%s%s.%s.%s", prefix, vl->plugin, + vl->plugin_instance, vl->type); + } else { + ssnprintf(ret, ret_len, "%s%s.%s.%s.%s", prefix, vl->plugin, + vl->plugin_instance, vl->type, vl->type_instance); + } } - } else if (vl->plugin_instance[0] == '\0') { - if (vl->type_instance[0] == '\0') - ssnprintf(ret, ret_len, "%s%s.%s", - prefix, vl->plugin, vl->type); - else - ssnprintf(ret, ret_len, "%s%s.%s", - prefix, vl->plugin, vl->type_instance); - } else if (vl->type_instance[0] == '\0') { - ssnprintf(ret, ret_len, "%s%s.%s.%s", - prefix, vl->plugin, vl->plugin_instance, vl->type); - } else { - ssnprintf(ret, ret_len, "%s%s.%s.%s", - prefix, vl->plugin, vl->plugin_instance, vl->type_instance); } sfree(temp); @@ -403,12 +410,11 @@ static int wt_send_message (const char* key, const char* value, const char* host, meta_data_t *md) { int status; - int message_len; + size_t message_len; char *temp = NULL; char *tags = ""; char message[1024]; char *host_tags = cb->host_tags ? cb->host_tags : ""; - const char *message_fmt; const char *meta_tsdb = "tsdb_tags"; /* skip if value is NaN */ @@ -429,22 +435,23 @@ static int wt_send_message (const char* key, const char* value, } } - message_fmt = "put %s %u %s fqdn=%s %s %s\r\n"; - message_len = ssnprintf (message, sizeof(message), - message_fmt, - key, - (unsigned int)CDTIME_T_TO_TIME_T( - time), - value, - host, - tags, - host_tags); - + status = ssnprintf (message, + sizeof(message), + "put %s %.0f %s fqdn=%s %s %s\r\n", + key, + CDTIME_T_TO_DOUBLE(time), + value, + host, + tags, + host_tags); sfree(temp); + if (status < 0) + return -1; + message_len = (size_t) status; if (message_len >= sizeof(message)) { ERROR("write_tsdb plugin: message buffer too small: " - "Need %d bytes.", message_len + 1); + "Need %zu bytes.", message_len + 1); return -1; } @@ -500,7 +507,8 @@ static int wt_write_messages(const data_set_t *ds, const value_list_t *vl, char key[10*DATA_MAX_NAME_LEN]; char values[512]; - int status, i; + int status; + size_t i; if (0 != strcmp(ds->type, vl->type)) { @@ -565,37 +573,6 @@ static int wt_write(const data_set_t *ds, const value_list_t *vl, return status; } -static int config_set_char(char *dest, - oconfig_item_t *ci) -{ - char buffer[4]; - int status; - - memset(buffer, 0, sizeof(buffer)); - - status = cf_util_get_string_buffer(ci, buffer, sizeof(buffer)); - if (status != 0) - return (status); - - if (buffer[0] == 0) - { - ERROR("write_tsdb plugin: Cannot use an empty string for the " - "\"EscapeCharacter\" option."); - return -1; - } - - if (buffer[1] != 0) - { - WARNING("write_tsdb plugin: Only the first character of the " - "\"EscapeCharacter\" option ('%c') will be used.", - (int) buffer[0]); - } - - *dest = buffer[0]; - - return 0; -} - static int wt_config_tsd(oconfig_item_t *ci) { struct wt_callback *cb; @@ -614,8 +591,7 @@ static int wt_config_tsd(oconfig_item_t *ci) cb->node = NULL; cb->service = NULL; cb->host_tags = NULL; - cb->escape_char = WT_DEFAULT_ESCAPE; - cb->store_rates = 1; + cb->store_rates = 0; pthread_mutex_init (&cb->send_lock, NULL); @@ -631,12 +607,8 @@ static int wt_config_tsd(oconfig_item_t *ci) cf_util_get_string(child, &cb->host_tags); 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) - config_set_char(&cb->escape_char, child); else { ERROR("write_tsdb plugin: Invalid configuration "