X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=inline;f=src%2Fdaemon%2Futils_tail_match.c;h=a0cbc11df63ffecbdee60d8a18714d8a14bfdd22;hb=0bb73474d50c292e14c0f049c1d776401e7e2d97;hp=5dfd10ac056a792705a305895cfceb7a0c9d785e;hpb=e7aa9832d25a98f78bb5af45a90ec404359537df;p=collectd.git diff --git a/src/daemon/utils_tail_match.c b/src/daemon/utils_tail_match.c index 5dfd10ac..a0cbc11d 100644 --- a/src/daemon/utils_tail_match.c +++ b/src/daemon/utils_tail_match.c @@ -104,92 +104,76 @@ static int simple_submit_match (cu_match_t *match, void *user_data) return (0); } /* int simple_submit_match */ -static int simple_submit_latency (cu_match_t *match, void *user_data) -{ - cu_tail_match_simple_t *data = (cu_tail_match_simple_t *) user_data; +static int latency_submit_match(cu_match_t *match, void *user_data) { + cu_tail_match_simple_t *data = (cu_tail_match_simple_t *)user_data; cu_match_value_t *match_value; value_list_t vl = VALUE_LIST_INIT; - match_value = (cu_match_value_t *) match_get_user_data (match); + match_value = (cu_match_value_t *)match_get_user_data(match); if (match_value == NULL) return (-1); - vl.values = &(value_t) { .gauge = NAN }; - vl.values_len = 1; - sstrncpy (vl.host, hostname_g, sizeof (vl.host)); - sstrncpy (vl.plugin, data->plugin, sizeof (vl.plugin)); - sstrncpy (vl.plugin_instance, data->plugin_instance, - sizeof (vl.plugin_instance)); - sstrncpy (vl.type, data->type, sizeof (vl.type)); + sstrncpy(vl.host, hostname_g, sizeof(vl.host)); + sstrncpy(vl.plugin, data->plugin, sizeof(vl.plugin)); + sstrncpy(vl.plugin_instance, data->plugin_instance, + sizeof(vl.plugin_instance)); vl.interval = data->interval; - vl.time = cdtime (); - - if (data->latency_config.lower) { - ssnprintf (vl.type_instance, sizeof (vl.type_instance), - "lower"); - vl.values[0].gauge = (match_value->values_num != 0) - ? CDTIME_T_TO_DOUBLE (latency_counter_get_min (match_value->latency)) - : NAN; - plugin_dispatch_values (&vl); - } - - if (data->latency_config.avg) { - ssnprintf (vl.type_instance, sizeof (vl.type_instance), - "average"); - vl.values[0].gauge = (match_value->values_num != 0) - ? CDTIME_T_TO_DOUBLE (latency_counter_get_average (match_value->latency)) - : NAN; - plugin_dispatch_values (&vl); - } - - if (data->latency_config.upper) { - ssnprintf (vl.type_instance, sizeof (vl.type_instance), - "upper"); - vl.values[0].gauge = (match_value->values_num != 0) - ? CDTIME_T_TO_DOUBLE (latency_counter_get_max (match_value->latency)) - : NAN; - plugin_dispatch_values (&vl); - } + vl.time = cdtime(); /* Submit percentiles */ - if (data->latency_config.percentile_type != NULL) - sstrncpy (vl.type, data->latency_config.percentile_type, sizeof (vl.type)); - for (size_t i = 0; i < data->latency_config.percentile_num; i++) - { - ssnprintf (vl.type_instance, sizeof (vl.type_instance), - "percentile-%.0f", data->latency_config.percentile[i]); - vl.values[0].gauge = (match_value->values_num != 0) - ? CDTIME_T_TO_DOUBLE (latency_counter_get_percentile (match_value->latency, - data->latency_config.percentile[i])) - : NAN; - plugin_dispatch_values (&vl); + sstrncpy(vl.type, data->type, sizeof(vl.type)); + for (size_t i = 0; i < data->latency_config.percentile_num; i++) { + if (strlen(data->type_instance) != 0) + ssnprintf(vl.type_instance, sizeof(vl.type_instance), "%s-%.0f", + data->type_instance, data->latency_config.percentile[i]); + else + ssnprintf(vl.type_instance, sizeof(vl.type_instance), "%.0f", + data->latency_config.percentile[i]); + + vl.values = &(value_t){ + .gauge = + (match_value->values_num != 0) + ? CDTIME_T_TO_DOUBLE(latency_counter_get_percentile( + match_value->latency, data->latency_config.percentile[i])) + : NAN, + }; + vl.values_len = 1; + + plugin_dispatch_values(&vl); } - /* Submit rates */ - sstrncpy (vl.type, data->type, sizeof (vl.type)); - if (data->latency_config.rates_type != NULL) - sstrncpy (vl.type, data->latency_config.rates_type, sizeof (vl.type)); - for (size_t i = 0; i < data->latency_config.rates_num; i++) - { - ssnprintf (vl.type_instance, sizeof (vl.type_instance), - "rate-%.3f-%.3f", - CDTIME_T_TO_DOUBLE(data->latency_config.rates[i * 2]), - CDTIME_T_TO_DOUBLE(data->latency_config.rates[i * 2 + 1])); - vl.values[0].gauge = (match_value->values_num != 0) - ? latency_counter_get_rate (match_value->latency, - data->latency_config.rates[i * 2], - data->latency_config.rates[i * 2 + 1], - vl.time) - : NAN; - plugin_dispatch_values (&vl); + /* Submit buckets */ + sstrncpy(vl.type, "bucket", sizeof(vl.type)); + for (size_t i = 0; i < data->latency_config.buckets_num; i++) { + latency_bucket_t bucket = data->latency_config.buckets[i]; + + double lower_bound = CDTIME_T_TO_DOUBLE(bucket.lower_bound); + double upper_bound = + bucket.upper_bound ? CDTIME_T_TO_DOUBLE(bucket.upper_bound) : INFINITY; + + if (strlen(data->type_instance) != 0) + ssnprintf(vl.type_instance, sizeof(vl.type_instance), "%s-%s-%g_%g", + data->type, data->type_instance, lower_bound, upper_bound); + else + ssnprintf(vl.type_instance, sizeof(vl.type_instance), "%s-%g_%g", + data->type, lower_bound, upper_bound); + + vl.values = &(value_t){ + .gauge = latency_counter_get_rate(match_value->latency, + bucket.lower_bound, + bucket.upper_bound, vl.time), + }; + vl.values_len = 1; + + plugin_dispatch_values(&vl); } - latency_counter_reset (match_value->latency); match_value->value.gauge = NAN; match_value->values_num = 0; + latency_counter_reset(match_value->latency); return (0); -} /* int simple_submit_latency */ +} /* int latency_submit_match */ static int tail_callback (void *data, char *buf, int __attribute__((unused)) buflen) @@ -311,17 +295,17 @@ int tail_match_add_match_simple (cu_tail_match_t *obj, sstrncpy (user_data->plugin, plugin, sizeof (user_data->plugin)); if (plugin_instance != NULL) sstrncpy (user_data->plugin_instance, plugin_instance, - sizeof (user_data->plugin_instance)); + sizeof (user_data->plugin_instance)); sstrncpy (user_data->type, type, sizeof (user_data->type)); if (type_instance != NULL) sstrncpy (user_data->type_instance, type_instance, - sizeof (user_data->type_instance)); + sizeof (user_data->type_instance)); user_data->interval = interval; if ((ds_type & UTILS_MATCH_DS_TYPE_GAUGE) - && (ds_type & UTILS_MATCH_CF_GAUGE_LATENCY)) + && (ds_type & UTILS_MATCH_CF_GAUGE_DIST)) { status = latency_config_copy(&user_data->latency_config, latency_cfg); if (status != 0) @@ -331,7 +315,7 @@ int tail_match_add_match_simple (cu_tail_match_t *obj, goto out; } - status = tail_match_add_match (obj, match, simple_submit_latency, + status = tail_match_add_match (obj, match, latency_submit_match, user_data, tail_match_simple_free); } else { status = tail_match_add_match (obj, match, simple_submit_match,