@cryptotaxi247 / netdata-1 / commits / e745a0455

push chart local variables upstream

Costa Tsaousis (ktsaou) committed Oct 17, 2017 at 01:59 UTC e745a0455a5897f1e98af00b6801e078c5d1363e
4 files changed +47 -14
src/health.h
+2 -1
@@ -412,7 +412,8 @@ extern void rrdcalc_unlink_and_free(RRDHOST *host, RRDCALC *rc);
412 extern void rrdcalctemplate_free(RRDCALCTEMPLATE *rt);
413 extern void rrdcalctemplate_unlink_and_free(RRDHOST *host, RRDCALCTEMPLATE *rt);
414
415 -extern int rrdvar_callback_for_all_variables(RRDHOST *host, int (*callback)(void *rrdvar, void *data), void *data);
415 +extern int rrdvar_callback_for_all_host_variables(RRDHOST *host, int (*callback)(void *rrdvar, void *data), void *data);
416 +extern int rrdvar_callback_for_all_chart_variables(RRDSET *st, int (*callback)(void *rrdvar, void *data), void *data);
417
418 #ifdef NETDATA_HEALTH_INTERNALS
419 #define RRDVAR_MAX_LENGTH 1024
src/rrdpush.c
+38 -10
@@ -77,6 +77,29 @@ static inline int need_to_send_chart_definition(RRDSET *st) {
77 return 0;
78 }
79
80 +static int rrdpush_sender_add_chart_variable_to_buffer_nolock(void *rrdvar_ptr, void *rrdset_ptr) {
81 + RRDVAR *rv = (RRDVAR *)rrdvar_ptr;
82 +
83 + if(unlikely(rv->type == RRDVAR_TYPE_CALCULATED_ALLOCATED)) {
84 + RRDSET *st = (RRDSET *)rrdset_ptr;
85 +
86 + calculated_number *value = (calculated_number *) rv->value;
87 +
88 + buffer_sprintf(
89 + st->rrdhost->rrdpush_sender_buffer
90 + , "VARIABLE CHART %s = " CALCULATED_NUMBER_FORMAT "\n"
91 + , rv->name
92 + , *value
93 + );
94 +
95 + debug(D_STREAM, "RRDVAR pushed CHART VARIABLE %s = " CALCULATED_NUMBER_FORMAT, rv->name, *value);
96 +
97 + return 1;
98 + }
99 +
100 + return 0;
101 +}
102 +
103 // sends the current chart definition
104 static inline void rrdpush_send_chart_definition_nolock(RRDSET *st) {
105 rrdset_flag_set(st, RRDSET_FLAG_EXPOSED_UPSTREAM);
@@ -117,6 +140,10 @@ static inline void rrdpush_send_chart_definition_nolock(RRDSET *st) {
140 }
141
142 st->upstream_resync_time = st->last_collected_time.tv_sec + (remote_clock_resync_iterations * st->update_every);
143 +
144 + int ret = rrdvar_callback_for_all_chart_variables(st, rrdpush_sender_add_chart_variable_to_buffer_nolock, st);
145 + debug(D_STREAM, "RRDVAR sent %d VARIABLES", ret);
146 +
147 }
148
149 // sends the current chart dimensions
@@ -188,33 +215,33 @@ void rrdset_done_push(RRDSET *st) {
215 // ----------------------------------------------------------------------------
216 // rrdpush sender thread
217
191 -static inline void rrdpush_sender_add_variable_to_buffer_nolock(RRDHOST *host, RRDVAR *rv) {
218 +static inline void rrdpush_sender_add_host_variable_to_buffer_nolock(RRDHOST *host, RRDVAR *rv) {
219 calculated_number *value = (calculated_number *)rv->value;
220
221 buffer_sprintf(
222 host->rrdpush_sender_buffer
196 - , "VARIABLE %s = " CALCULATED_NUMBER_FORMAT "\n"
223 + , "VARIABLE HOST %s = " CALCULATED_NUMBER_FORMAT "\n"
224 , rv->name
225 , *value
226 );
227
201 - debug(D_STREAM, "RRDVAR pushed VARIABLE %s = " CALCULATED_NUMBER_FORMAT, rv->name, *value);
228 + debug(D_STREAM, "RRDVAR pushed HOST VARIABLE %s = " CALCULATED_NUMBER_FORMAT, rv->name, *value);
229 }
230
204 -void rrdpush_sender_send_this_variable_now(RRDHOST *host, RRDVAR *rv) {
231 +void rrdpush_sender_send_this_host_variable_now(RRDHOST *host, RRDVAR *rv) {
232 if(host->rrdpush_send_enabled && host->rrdpush_sender_spawn && host->rrdpush_sender_connected) {
233 rrdpush_buffer_lock(host);
207 - rrdpush_sender_add_variable_to_buffer_nolock(host, rv);
234 + rrdpush_sender_add_host_variable_to_buffer_nolock(host, rv);
235 rrdpush_buffer_unlock(host);
236 }
237 }
238
212 -static int rrdpush_sender_thread_custom_variables_callback(void *rrdvar_ptr, void *host_ptr) {
239 +static int rrdpush_sender_thread_custom_host_variables_callback(void *rrdvar_ptr, void *host_ptr) {
240 RRDVAR *rv = (RRDVAR *)rrdvar_ptr;
241 RRDHOST *host = (RRDHOST *)host_ptr;
242
243 if(unlikely(rv->type == RRDVAR_TYPE_CALCULATED_ALLOCATED)) {
217 - rrdpush_sender_add_variable_to_buffer_nolock(host, rv);
244 + rrdpush_sender_add_host_variable_to_buffer_nolock(host, rv);
245
246 // return 1, so that the traversal will return the number of variables sent
247 return 1;
@@ -224,8 +251,8 @@ static int rrdpush_sender_thread_custom_variables_callback(void *rrdvar_ptr, voi
251 return 0;
252 }
253
227 -static void rrdpush_sender_thread_send_custom_variables(RRDHOST *host) {
228 - int ret = rrdvar_callback_for_all_variables(host, rrdpush_sender_thread_custom_variables_callback, host);
254 +static void rrdpush_sender_thread_send_custom_host_variables(RRDHOST *host) {
255 + int ret = rrdvar_callback_for_all_host_variables(host, rrdpush_sender_thread_custom_host_variables_callback, host);
256 debug(D_STREAM, "RRDVAR sent %d VARIABLES", ret);
257 }
258
@@ -236,6 +263,7 @@ static void rrdpush_sender_thread_reset_all_charts(RRDHOST *host) {
263
264 RRDSET *st;
265 rrdset_foreach_read(st, host) {
266 + rrdset_flag_clear(st, RRDSET_FLAG_EXPOSED_UPSTREAM);
267
268 st->upstream_resync_time = 0;
269
@@ -260,7 +288,7 @@ static inline void rrdpush_sender_thread_data_flush(RRDHOST *host) {
288 buffer_flush(host->rrdpush_sender_buffer);
289
290 rrdpush_sender_thread_reset_all_charts(host);
263 - rrdpush_sender_thread_send_custom_variables(host);
291 + rrdpush_sender_thread_send_custom_host_variables(host);
292
293 rrdpush_buffer_unlock(host);
294 }
src/rrdpush.h
+1 -1
@@ -14,6 +14,6 @@ extern void *rrdpush_sender_thread(void *ptr);
14 extern int rrdpush_receiver_thread_spawn(RRDHOST *host, struct web_client *w, char *url);
15 extern void rrdpush_sender_thread_stop(RRDHOST *host);
16
17 -extern void rrdpush_sender_send_this_variable_now(RRDHOST *host, RRDVAR *rv);
17 +extern void rrdpush_sender_send_this_host_variable_now(RRDHOST *host, RRDVAR *rv);
18
19 #endif //NETDATA_RRDPUSH_H
src/rrdvar.c
+6 -2
@@ -117,10 +117,14 @@ void rrdvar_free_remaining_variables(RRDHOST *host, avl_tree_lock *tree_lock) {
117 // ----------------------------------------------------------------------------
118 // CUSTOM VARIABLES
119
120 -inline int rrdvar_callback_for_all_variables(RRDHOST *host, int (*callback)(void *rrdvar, void *data), void *data) {
120 +inline int rrdvar_callback_for_all_host_variables(RRDHOST *host, int (*callback)(void *rrdvar, void *data), void *data) {
121 return avl_traverse_lock(&host->rrdvar_root_index, callback, data);
122 }
123
124 +inline int rrdvar_callback_for_all_chart_variables(RRDSET *st, int (*callback)(void *rrdvar, void *data), void *data) {
125 + return avl_traverse_lock(&st->rrdhost->rrdvar_root_index, callback, data);
126 +}
127 +
128 static RRDVAR *rrdvar_custom_variable_create(const char *scope, avl_tree_lock *tree_lock, const char *name) {
129 calculated_number *v = callocz(1, sizeof(calculated_number));
130 *v = NAN;
@@ -159,7 +163,7 @@ void rrdvar_custom_host_variable_set(RRDHOST *host, RRDVAR *rv, calculated_numbe
163 *v = value;
164
165 // if the host is streaming, send this variable upstream immediately
162 - rrdpush_sender_send_this_variable_now(host, rv);
166 + rrdpush_sender_send_this_host_variable_now(host, rv);
167 }
168 }
169 }