@cryptotaxi247 / netdata-1 / commits / 75eb5453c

statsd fractional points are now configurable; fixes #2568

Costa Tsaousis (ktsaou) committed Aug 7, 2017 at 20:34 UTC 75eb5453ce663ebcd87603ade267b1eb2c9552f6
1 file changed +22 -19
src/statsd.c
+22 -19
@@ -232,6 +232,7 @@ static struct statsd {
232 int update_every;
233 SIMPLE_PATTERN *charts_for;
234
235 + size_t decimal_detail;
236 size_t private_charts;
237 size_t max_private_charts;
238 size_t max_private_charts_hard;
@@ -250,6 +251,7 @@ static struct statsd {
251 .max_private_charts = 200,
252 .max_private_charts_hard = 1000,
253 .recvmmsg_size = 10,
254 + .decimal_detail = STATSD_DECIMAL_DETAIL,
255
256 .gauges = {
257 .name = "gauge",
@@ -1286,7 +1288,7 @@ static inline void statsd_private_chart_gauge(STATSD_METRIC *m) {
1288 , RRDSET_TYPE_LINE
1289 );
1290
1289 - m->rd_value = rrddim_add(m->st, "gauge", NULL, 1, STATSD_DECIMAL_DETAIL, RRD_ALGORITHM_ABSOLUTE);
1291 + m->rd_value = rrddim_add(m->st, "gauge", NULL, 1, statsd.decimal_detail, RRD_ALGORITHM_ABSOLUTE);
1292
1293 if(m->options & STATSD_METRIC_OPTION_CHART_DIMENSION_COUNT)
1294 m->rd_count = rrddim_add(m->st, "events", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
@@ -1394,13 +1396,13 @@ static inline void statsd_private_chart_timer_or_histogram(STATSD_METRIC *m, con
1396 , RRDSET_TYPE_AREA
1397 );
1398
1397 - m->histogram.ext->rd_min = rrddim_add(m->st, "min", NULL, 1, STATSD_DECIMAL_DETAIL, RRD_ALGORITHM_ABSOLUTE);
1398 - m->histogram.ext->rd_max = rrddim_add(m->st, "max", NULL, 1, STATSD_DECIMAL_DETAIL, RRD_ALGORITHM_ABSOLUTE);
1399 - m->rd_value = rrddim_add(m->st, "average", NULL, 1, STATSD_DECIMAL_DETAIL, RRD_ALGORITHM_ABSOLUTE);
1400 - m->histogram.ext->rd_percentile = rrddim_add(m->st, statsd.histogram_percentile_str, NULL, 1, STATSD_DECIMAL_DETAIL, RRD_ALGORITHM_ABSOLUTE);
1401 - m->histogram.ext->rd_median = rrddim_add(m->st, "median", NULL, 1, STATSD_DECIMAL_DETAIL, RRD_ALGORITHM_ABSOLUTE);
1402 - m->histogram.ext->rd_stddev = rrddim_add(m->st, "stddev", NULL, 1, STATSD_DECIMAL_DETAIL, RRD_ALGORITHM_ABSOLUTE);
1403 - m->histogram.ext->rd_sum = rrddim_add(m->st, "sum", NULL, 1, STATSD_DECIMAL_DETAIL, RRD_ALGORITHM_ABSOLUTE);
1399 + m->histogram.ext->rd_min = rrddim_add(m->st, "min", NULL, 1, statsd.decimal_detail, RRD_ALGORITHM_ABSOLUTE);
1400 + m->histogram.ext->rd_max = rrddim_add(m->st, "max", NULL, 1, statsd.decimal_detail, RRD_ALGORITHM_ABSOLUTE);
1401 + m->rd_value = rrddim_add(m->st, "average", NULL, 1, statsd.decimal_detail, RRD_ALGORITHM_ABSOLUTE);
1402 + m->histogram.ext->rd_percentile = rrddim_add(m->st, statsd.histogram_percentile_str, NULL, 1, statsd.decimal_detail, RRD_ALGORITHM_ABSOLUTE);
1403 + m->histogram.ext->rd_median = rrddim_add(m->st, "median", NULL, 1, statsd.decimal_detail, RRD_ALGORITHM_ABSOLUTE);
1404 + m->histogram.ext->rd_stddev = rrddim_add(m->st, "stddev", NULL, 1, statsd.decimal_detail, RRD_ALGORITHM_ABSOLUTE);
1405 + m->histogram.ext->rd_sum = rrddim_add(m->st, "sum", NULL, 1, statsd.decimal_detail, RRD_ALGORITHM_ABSOLUTE);
1406
1407 if(m->options & STATSD_METRIC_OPTION_CHART_DIMENSION_COUNT)
1408 m->rd_count = rrddim_add(m->st, "events", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
@@ -1429,7 +1431,7 @@ static inline void statsd_flush_gauge(STATSD_METRIC *m) {
1431
1432 int updated = 0;
1433 if(m->count && !m->reset) {
1432 - m->last = (collected_number) (m->gauge.value * STATSD_DECIMAL_DETAIL);
1434 + m->last = (collected_number) (m->gauge.value * statsd.decimal_detail);
1435
1436 m->reset = 1;
1437 updated = 1;
@@ -1488,18 +1490,18 @@ static inline void statsd_flush_timer_or_histogram(STATSD_METRIC *m, const char
1490 long double *series = m->histogram.ext->values;
1491 sort_series(series, len);
1492
1491 - m->histogram.ext->last_min = (collected_number)roundl(series[0] * STATSD_DECIMAL_DETAIL);
1492 - m->histogram.ext->last_max = (collected_number)roundl(series[len - 1] * STATSD_DECIMAL_DETAIL);
1493 - m->last = (collected_number)roundl(average(series, len) * STATSD_DECIMAL_DETAIL);
1494 - m->histogram.ext->last_median = (collected_number)roundl(median_on_sorted_series(series, len) * STATSD_DECIMAL_DETAIL);
1495 - m->histogram.ext->last_stddev = (collected_number)roundl(standard_deviation(series, len) * STATSD_DECIMAL_DETAIL);
1496 - m->histogram.ext->last_sum = (collected_number)roundl(sum(series, len) * STATSD_DECIMAL_DETAIL);
1493 + m->histogram.ext->last_min = (collected_number)roundl(series[0] * statsd.decimal_detail);
1494 + m->histogram.ext->last_max = (collected_number)roundl(series[len - 1] * statsd.decimal_detail);
1495 + m->last = (collected_number)roundl(average(series, len) * statsd.decimal_detail);
1496 + m->histogram.ext->last_median = (collected_number)roundl(median_on_sorted_series(series, len) * statsd.decimal_detail);
1497 + m->histogram.ext->last_stddev = (collected_number)roundl(standard_deviation(series, len) * statsd.decimal_detail);
1498 + m->histogram.ext->last_sum = (collected_number)roundl(sum(series, len) * statsd.decimal_detail);
1499
1500 size_t pct_len = (size_t)floor((double)len * statsd.histogram_percentile / 100.0);
1501 if(pct_len < 1)
1500 - m->histogram.ext->last_percentile = (collected_number)(series[0] * STATSD_DECIMAL_DETAIL);
1502 + m->histogram.ext->last_percentile = (collected_number)(series[0] * statsd.decimal_detail);
1503 else
1502 - m->histogram.ext->last_percentile = (collected_number)roundl(average(series, pct_len) * STATSD_DECIMAL_DETAIL);
1504 + m->histogram.ext->last_percentile = (collected_number)roundl(average(series, pct_len) * statsd.decimal_detail);
1505
1506 debug(D_STATSD, "STATSD %s metric %s: min " COLLECTED_NUMBER_FORMAT ", max " COLLECTED_NUMBER_FORMAT ", last " COLLECTED_NUMBER_FORMAT ", pcent " COLLECTED_NUMBER_FORMAT ", median " COLLECTED_NUMBER_FORMAT ", stddev " COLLECTED_NUMBER_FORMAT ", sum " COLLECTED_NUMBER_FORMAT,
1507 dim, m->name, m->histogram.ext->last_min, m->histogram.ext->last_max, m->last, m->histogram.ext->last_percentile, m->histogram.ext->last_median, m->histogram.ext->last_stddev, m->histogram.ext->last_sum);
@@ -1574,7 +1576,7 @@ static inline void check_if_metric_is_for_app(STATSD_INDEX *index, STATSD_METRIC
1576 }
1577 else if(m->type == STATSD_METRIC_TYPE_HISTOGRAM || m->type == STATSD_METRIC_TYPE_TIMER) {
1578 dim->algorithm = RRD_ALGORITHM_ABSOLUTE;
1577 - dim->divisor *= STATSD_DECIMAL_DETAIL;
1579 + dim->divisor *= statsd.decimal_detail;
1580
1581 switch(dim->value_type) {
1582 case STATSD_APP_CHART_DIM_VALUE_TYPE_EVENTS:
@@ -1619,7 +1621,7 @@ static inline void check_if_metric_is_for_app(STATSD_INDEX *index, STATSD_METRIC
1621 dim->algorithm = statsd_algorithm_for_metric(m);
1622
1623 if(m->type == STATSD_METRIC_TYPE_GAUGE)
1622 - dim->divisor *= STATSD_DECIMAL_DETAIL;
1624 + dim->divisor *= statsd.decimal_detail;
1625 }
1626
1627 if(unlikely(chart->st && dim->rd)) {
@@ -1776,6 +1778,7 @@ void *statsd_main(void *ptr) {
1778 statsd.max_private_charts_hard = (size_t)config_get_number(CONFIG_SECTION_STATSD, "max private charts hard limit", (long long)statsd.max_private_charts * 5);
1779 statsd.private_charts_memory_mode = rrd_memory_mode_id(config_get(CONFIG_SECTION_STATSD, "private charts memory mode", rrd_memory_mode_name(default_rrd_memory_mode)));
1780 statsd.private_charts_rrd_history_entries = (int)config_get_number(CONFIG_SECTION_STATSD, "private charts history", default_rrd_history_entries);
1781 + statsd.decimal_detail = (size_t)config_get_number(CONFIG_SECTION_STATSD, "decimal detail", (long long int)statsd.decimal_detail);
1782
1783 statsd.histogram_percentile = (double)config_get_float(CONFIG_SECTION_STATSD, "histograms and timers percentile (percentThreshold)", statsd.histogram_percentile);
1784 if(isless(statsd.histogram_percentile, 0) || isgreater(statsd.histogram_percentile, 100)) {