master
c 50 lines 1.82 KB
Raw
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 }