Fix data source option for Prometheus web API in exporting configuration (#10397)
Vladimir Kobal committed
Jan 11, 2021 at 17:23 UTC
503629f6e9ca29b8a6abd5bebd5de52b50a14432
5 files changed
+17
-3
backends/backends.c
+2
@@ -28,6 +28,7 @@
28
const char *global_backend_prefix = "netdata";
29
int global_backend_update_every = 10;
30
BACKEND_OPTIONS global_backend_options = BACKEND_SOURCE_DATA_AVERAGE | BACKEND_OPTION_SEND_NAMES;
31
+const char *global_backend_source = NULL;
32
33
// ----------------------------------------------------------------------------
34
// helper functions for backends
@@ -528,6 +529,7 @@ void *backends_main(void *ptr) {
529
// and prepare for sending data to our backend
530
531
global_backend_options = backend_parse_data_source(source, global_backend_options);
532
+ global_backend_source = source;
533
534
if(timeoutms < 1) {
535
error("BACKEND: invalid timeout %ld ms given. Assuming %d ms.", timeoutms, global_backend_update_every * 2 * 1000);
backends/backends.h
+1
@@ -35,6 +35,7 @@ typedef int (**backend_request_formatter_t)(BUFFER *, const char *, RRDHOST *, c
35
36
extern int global_backend_update_every;
37
extern BACKEND_OPTIONS global_backend_options;
38
+extern const char *global_backend_source;
39
extern const char *global_backend_prefix;
40
41
extern void *backends_main(void *ptr);
exporting/exporting.conf
+1
@@ -5,6 +5,7 @@
5
# update every = 10
6
7
[prometheus:exporter]
8
+ # data source = average
9
# send names instead of ids = yes
10
# send configured labels = yes
11
# send automatic labels = no
exporting/read_config.c
+12
-3
@@ -238,9 +238,18 @@ struct engine *read_exporting_config()
238
prometheus_exporter_instance->config.update_every =
239
prometheus_config_get_number(EXPORTING_UPDATE_EVERY_OPTION_NAME, EXPORTING_UPDATE_EVERY_DEFAULT);
240
241
- prometheus_exporter_instance->config.options |=
242
- global_backend_options &
243
- (EXPORTING_SOURCE_DATA_AS_COLLECTED | EXPORTING_SOURCE_DATA_AVERAGE | EXPORTING_SOURCE_DATA_SUM);
241
+ // wait for backend subsystem to be initialized
242
+ for (int retries = 0; !global_backend_source && retries < 1000; retries++)
243
+ sleep_usec(10000);
244
+
245
+ if (!global_backend_source)
246
+ global_backend_source = "average";
247
+
248
+ prometheus_exporter_instance->config.options |= global_backend_options & EXPORTING_OPTIONS_SOURCE_BITS;
249
+
250
+ char *data_source = prometheus_config_get("data source", global_backend_source);
251
+ prometheus_exporter_instance->config.options =
252
+ exporting_parse_data_source(data_source, prometheus_exporter_instance->config.options);
253
254
if (prometheus_config_get_boolean(
255
"send names instead of ids", global_backend_options & EXPORTING_OPTION_SEND_NAMES))
exporting/tests/test_exporting_engine.c
+1
@@ -15,6 +15,7 @@ char *netdata_configured_hostname = "test_global_host";
15
char log_line[MAX_LOG_LINE + 1];
16
17
BACKEND_OPTIONS global_backend_options = 0;
18
+const char *global_backend_source = "average";
19
const char *global_backend_prefix = "netdata";
20
21
void init_connectors_in_tests(struct engine *engine)