| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | |
| 3 | #include "commands.h" |
| 4 | #include "plugins.d/pluginsd_internals.h" |
| 5 | |
| 6 | static inline void stream_sender_add_host_variable_to_buffer(BUFFER *wb, const RRDVAR_ACQUIRED *rva) { |
| 7 | buffer_sprintf( |
| 8 | wb |
| 9 | , PLUGINSD_KEYWORD_VARIABLE " HOST %s = " NETDATA_DOUBLE_FORMAT "\n" |
| 10 | , rrdvar_name(rva) |
| 11 | , rrdvar2number(rva) |
| 12 | ); |
| 13 | |
| 14 | netdata_log_debug(D_STREAM, "RRDVAR pushed HOST VARIABLE %s = " NETDATA_DOUBLE_FORMAT, rrdvar_name(rva), rrdvar2number(rva)); |
| 15 | } |
| 16 | |
| 17 | void stream_sender_send_this_host_variable_now(RRDHOST *host, const RRDVAR_ACQUIRED *rva) { |
| 18 | if(rrdhost_can_stream_metadata_to_parent(host)) { |
| 19 | CLEAN_BUFFER *wb = buffer_create(0, NULL); |
| 20 | stream_sender_add_host_variable_to_buffer(wb, rva); |
| 21 | sender_commit_clean_buffer(host->sender, wb, STREAM_TRAFFIC_TYPE_METADATA); |
| 22 | } |
| 23 | } |
| 24 | |
| 25 | struct custom_host_variables_callback { |
| 26 | BUFFER *wb; |
| 27 | }; |
| 28 | |
| 29 | static int stream_sender_thread_custom_host_variables_callback(const DICTIONARY_ITEM *item __maybe_unused, void *rrdvar_ptr __maybe_unused, void *struct_ptr) { |
| 30 | const RRDVAR_ACQUIRED *rv = (const RRDVAR_ACQUIRED *)item; |
| 31 | struct custom_host_variables_callback *tmp = struct_ptr; |
| 32 | BUFFER *wb = tmp->wb; |
| 33 | |
| 34 | stream_sender_add_host_variable_to_buffer(wb, rv); |
| 35 | return 1; |
| 36 | } |
| 37 | |
| 38 | void stream_sender_send_custom_host_variables(RRDHOST *host) { |
| 39 | if(rrdhost_can_stream_metadata_to_parent(host)) { |
| 40 | CLEAN_BUFFER *wb = buffer_create(0, NULL); |
| 41 | struct custom_host_variables_callback tmp = { |
| 42 | .wb = wb |
| 43 | }; |
| 44 | int ret = rrdvar_walkthrough_read(host->rrdvars, stream_sender_thread_custom_host_variables_callback, &tmp); |
| 45 | (void)ret; |
| 46 | sender_commit_clean_buffer(host->sender, wb, STREAM_TRAFFIC_TYPE_METADATA); |
| 47 | |
| 48 | netdata_log_debug(D_STREAM, "RRDVAR sent %d VARIABLES", ret); |
| 49 | } |
| 50 | } |