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)) {