master
c 55 lines 2.08 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "commands.h"
4 #include "../stream-sender-internals.h"
5
6 void stream_send_rrdset_metrics_v1(RRDSET_STREAM_BUFFER *rsb, RRDSET *st) {
7 RRDHOST *host = st->rrdhost; (void)host;
8 BUFFER *wb = rsb->wb;
9 struct sender_state *s = host->sender; (void)s;
10 RRDSET_FLAGS flags = rsb->rrdset_flags;
11
12 buffer_fast_strcat(wb, PLUGINSD_KEYWORD_BEGIN " \"", 7);
13 buffer_fast_strcat(wb, rrdset_id(st), string_strlen(st->id));
14 buffer_fast_strcat(wb, "\" ", 2);
15
16 if(st->last_collected_time.tv_sec > st->stream.snd.resync_time_s)
17 buffer_print_uint64(wb, st->usec_since_last_update);
18 else
19 buffer_fast_strcat(wb, "0", 1);
20
21 buffer_fast_strcat(wb, "\n", 1);
22
23 RRDDIM *rd;
24 rrddim_foreach_read(rd, st) {
25 if(unlikely(!rrddim_check_updated(rd)))
26 continue;
27
28 if(likely(rrddim_check_upstream_exposed_collector(rd))) {
29 buffer_fast_strcat(wb, PLUGINSD_KEYWORD_SET " \"", 5);
30 buffer_fast_strcat(wb, rrddim_id(rd), string_strlen(rd->id));
31 buffer_fast_strcat(wb, "\" = ", 4);
32 if(rrddim_is_float(rd)) {
33 if(stream_has_capability(rsb, STREAM_CAP_FLOAT_BASELINE))
34 buffer_print_netdata_double(wb, rrddim_collected_as_double(rd));
35 else
36 buffer_print_int64(wb, (int64_t)rrddim_collected_as_double(rd));
37 }
38 else
39 buffer_print_int64(wb, rd->collector.collected.i.collected_value);
40 buffer_fast_strcat(wb, "\n", 1);
41 }
42 else {
43 internal_error(true, "STREAM SND '%s': 'chart:%s/dim:%s' flag 'exposed' is updated but not exposed",
44 rrdhost_hostname(st->rrdhost), rrdset_id(st), rrddim_id(rd));
45 // we will include it in the next iteration
46 rrddim_metadata_updated(rd);
47 }
48 }
49 rrddim_foreach_done(rd);
50
51 if(unlikely(flags & RRDSET_FLAG_UPSTREAM_SEND_VARIABLES))
52 rrdvar_print_to_streaming_custom_chart_variables(st, wb);
53
54 buffer_fast_strcat(wb, PLUGINSD_KEYWORD_END "\n", 4);
55 }