@cryptotaxi247 / netdata-1 / commits / 5c36a42f9

propagate name, algorithm, multiplier and divider changes to netdata masters; fixes #2253

Costa Tsaousis (ktsaou) committed Jun 7, 2017 at 21:02 UTC 5c36a42f9284388d37ad2555e3decb8e57e1ef94
3 files changed +50 -9
src/rrd.h
+5 -1
@@ -617,7 +617,11 @@ extern void rrdset_done(RRDSET *st);
617 extern RRDDIM *rrddim_add_custom(RRDSET *st, const char *id, const char *name, collected_number multiplier, collected_number divisor, RRD_ALGORITHM algorithm, RRD_MEMORY_MODE memory_mode);
618 #define rrddim_add(st, id, name, multiplier, divisor, algorithm) rrddim_add_custom(st, id, name, multiplier, divisor, algorithm, (st)->rrd_memory_mode)
619
620 -extern void rrddim_set_name(RRDSET *st, RRDDIM *rd, const char *name);
620 +extern int rrddim_set_name(RRDSET *st, RRDDIM *rd, const char *name);
621 +extern int rrddim_set_algorithm(RRDSET *st, RRDDIM *rd, RRD_ALGORITHM algorithm);
622 +extern int rrddim_set_multiplier(RRDSET *st, RRDDIM *rd, collected_number multiplier);
623 +extern int rrddim_set_divisor(RRDSET *st, RRDDIM *rd, collected_number divisor);
624 +
625 extern RRDDIM *rrddim_find(RRDSET *st, const char *id);
626
627 extern int rrddim_hide(RRDSET *st, const char *id);
src/rrddim.c
+39 -3
@@ -35,9 +35,9 @@ inline RRDDIM *rrddim_find(RRDSET *st, const char *id) {
35 // ----------------------------------------------------------------------------
36 // RRDDIM rename a dimension
37
38 -inline void rrddim_set_name(RRDSET *st, RRDDIM *rd, const char *name) {
38 +inline int rrddim_set_name(RRDSET *st, RRDDIM *rd, const char *name) {
39 if(unlikely(!strcmp(rd->name, name)))
40 - return;
40 + return 0;
41
42 debug(D_RRD_CALLS, "rrddim_set_name() from %s.%s to %s.%s", st->name, rd->name, st->name, name);
43
@@ -45,10 +45,40 @@ inline void rrddim_set_name(RRDSET *st, RRDDIM *rd, const char *name) {
45 snprintfz(varname, CONFIG_MAX_NAME, "dim %s name", rd->id);
46 rd->name = config_set_default(st->config_section, varname, name);
47 rd->hash_name = simple_hash(rd->name);
48 -
48 rrddimvar_rename_all(rd);
49 + rd->exposed = 0;
50 + return 1;
51 +}
52 +
53 +inline int rrddim_set_algorithm(RRDSET *st, RRDDIM *rd, RRD_ALGORITHM algorithm) {
54 + if(unlikely(rd->algorithm != algorithm))
55 + return 0;
56 +
57 + debug(D_RRD_CALLS, "Updating algorithm of dimension '%s/%s' from %s to %s", st->id, rd->name, rrd_algorithm_name(rd->algorithm), rrd_algorithm_name(algorithm));
58 + rd->algorithm = algorithm;
59 + rd->exposed = 0;
60 + return 1;
61 }
62
63 +inline int rrddim_set_multiplier(RRDSET *st, RRDDIM *rd, collected_number multiplier) {
64 + if(unlikely(rd->multiplier != multiplier))
65 + return 0;
66 +
67 + debug(D_RRD_CALLS, "Updating multiplier of dimension '%s/%s' from " COLLECTED_NUMBER_FORMAT " to " COLLECTED_NUMBER_FORMAT, st->id, rd->name, rd->multiplier, multiplier);
68 + rd->multiplier = multiplier;
69 + rd->exposed = 0;
70 + return 1;
71 +}
72 +
73 +inline int rrddim_set_divisor(RRDSET *st, RRDDIM *rd, collected_number divisor) {
74 + if(unlikely(rd->divisor != divisor))
75 + return 0;
76 +
77 + debug(D_RRD_CALLS, "Updating divisor of dimension '%s/%s' from " COLLECTED_NUMBER_FORMAT " to " COLLECTED_NUMBER_FORMAT, st->id, rd->name, rd->divisor, divisor);
78 + rd->multiplier = divisor;
79 + rd->exposed = 0;
80 + return 1;
81 +}
82
83 // ----------------------------------------------------------------------------
84 // RRDDIM create a dimension
@@ -57,6 +87,12 @@ RRDDIM *rrddim_add_custom(RRDSET *st, const char *id, const char *name, collecte
87 RRDDIM *rd = rrddim_find(st, id);
88 if(unlikely(rd)) {
89 debug(D_RRD_CALLS, "Cannot create rrd dimension '%s/%s', it already exists.", st->id, name?name:"<NONAME>");
90 +
91 + rrddim_set_name(st, rd, name);
92 + rrddim_set_algorithm(st, rd, algorithm);
93 + rrddim_set_multiplier(st, rd, multiplier);
94 + rrddim_set_divisor(st, rd, divisor);
95 +
96 return rd;
97 }
98
src/statsd.c
+6 -5
@@ -1608,6 +1608,12 @@ static inline void check_if_metric_is_for_app(STATSD_INDEX *index, STATSD_METRIC
1608 dim->divisor *= STATSD_DECIMAL_DETAIL;
1609 }
1610
1611 + if(unlikely(chart->st && dim->rd)) {
1612 + rrddim_set_algorithm(chart->st, dim->rd, dim->algorithm);
1613 + rrddim_set_multiplier(chart->st, dim->rd, dim->multiplier);
1614 + rrddim_set_divisor(chart->st, dim->rd, dim->divisor);
1615 + }
1616 +
1617 chart->dimensions_linked_count++;
1618 debug(D_STATSD, "metric '%s' of type %u linked with app '%s', chart '%s', dimension '%s', algorithm '%s'", m->name, m->type, app->name, chart->id, dim->name, rrd_algorithm_name(dim->algorithm));
1619 }
@@ -1645,11 +1651,6 @@ static inline void statsd_update_app_chart(STATSD_APP *app, STATSD_APP_CHART *ch
1651 dim->rd = rrddim_add(chart->st, dim->name, NULL, dim->multiplier, dim->divisor, dim->algorithm);
1652
1653 if(unlikely(dim->value_ptr)) {
1648 - // FIXME: this is anorthodox, we should an API call at RRDDIM to overwrite these settings
1649 - dim->rd->algorithm = dim->algorithm;
1650 - dim->rd->multiplier = dim->multiplier;
1651 - dim->rd->divisor = dim->divisor;
1652 -
1654 debug(D_STATSD, "updating dimension '%s' (%s) of chart '%s' (%s) for app '%s' with value " COLLECTED_NUMBER_FORMAT, dim->name, dim->rd->id, chart->id, chart->st->id, app->name, *dim->value_ptr);
1655 rrddim_set_by_pointer(chart->st, dim->rd, *dim->value_ptr);
1656 }