summaryrefslogtreecommitdiffstats
path: root/exporting/exporting_engine.h
diff options
context:
space:
mode:
Diffstat (limited to 'exporting/exporting_engine.h')
-rw-r--r--exporting/exporting_engine.h185
1 files changed, 185 insertions, 0 deletions
diff --git a/exporting/exporting_engine.h b/exporting/exporting_engine.h
new file mode 100644
index 0000000000..02d0c89bfe
--- /dev/null
+++ b/exporting/exporting_engine.h
@@ -0,0 +1,185 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_EXPORTING_ENGINE_H
+#define NETDATA_EXPORTING_ENGINE_H 1
+
+#include "daemon/common.h"
+
+#include <uv.h>
+
+#define exporter_get(section, name, value) expconfig_get(&exporting_config, section, name, value)
+#define exporter_get_number(section, name, value) expconfig_get_number(&exporting_config, section, name, value)
+#define exporter_get_boolean(section, name, value) expconfig_get_boolean(&exporting_config, section, name, value)
+
+extern struct config exporting_config;
+
+#define EXPORTER_DATA_SOURCE "data source"
+#define EXPORTER_DATA_SOURCE_DEFAULT "average"
+
+#define EXPORTER_DESTINATION "destination"
+#define EXPORTER_DESTINATION_DEFAULT "localhost"
+
+#define EXPORTER_UPDATE_EVERY "update every"
+#define EXPORTER_UPDATE_EVERY_DEFAULT 10
+
+#define EXPORTER_BUF_ONFAIL "buffer on failures"
+#define EXPORTER_BUF_ONFAIL_DEFAULT 10
+
+#define EXPORTER_TIMEOUT_MS "timeout ms"
+#define EXPORTER_TIMEOUT_MS_DEFAULT 10000
+
+#define EXPORTER_SEND_CHART_MATCH "send charts matching"
+#define EXPORTER_SEND_CHART_MATCH_DEFAULT "*"
+
+#define EXPORTER_SEND_HOST_MATCH "send hosts matching"
+#define EXPORTER_SEND_HOST_MATCH_DEFAULT "localhost *"
+
+#define EXPORTER_SEND_NAMES "send names instead of ids"
+#define EXPORTER_SEND_NAMES_DEFAULT CONFIG_BOOLEAN_YES
+
+typedef enum exporting_options {
+ EXPORTING_OPTION_NONE = 0,
+
+ EXPORTING_SOURCE_DATA_AS_COLLECTED = (1 << 0),
+ EXPORTING_SOURCE_DATA_AVERAGE = (1 << 1),
+ EXPORTING_SOURCE_DATA_SUM = (1 << 2),
+
+ EXPORTING_OPTION_SEND_NAMES = (1 << 16)
+} EXPORTING_OPTIONS;
+
+#define EXPORTING_OPTIONS_SOURCE_BITS \
+ (EXPORTING_SOURCE_DATA_AS_COLLECTED | EXPORTING_SOURCE_DATA_AVERAGE | EXPORTING_SOURCE_DATA_SUM)
+#define EXPORTING_OPTIONS_DATA_SOURCE(exporting_options) (exporting_options & EXPORTING_OPTIONS_SOURCE_BITS)
+
+struct engine;
+
+struct instance_config {
+ const char *name;
+ const char *destination;
+
+ int update_every;
+ int buffer_on_failures;
+ long timeoutms;
+
+ EXPORTING_OPTIONS options;
+ SIMPLE_PATTERN *charts_pattern;
+ SIMPLE_PATTERN *hosts_pattern;
+
+ void *connector_specific_config;
+};
+
+struct simple_connector_config {
+ int default_port;
+};
+
+struct connector_config {
+ BACKEND_TYPE type;
+ void *connector_specific_config;
+};
+
+struct engine_config {
+ const char *prefix;
+ const char *hostname;
+ int update_every;
+};
+
+struct stats {
+ collected_number chart_buffered_metrics;
+ collected_number chart_lost_metrics;
+ collected_number chart_sent_metrics;
+ collected_number chart_buffered_bytes;
+ collected_number chart_received_bytes;
+ collected_number chart_sent_bytes;
+ collected_number chart_receptions;
+ collected_number chart_transmission_successes;
+ collected_number chart_transmission_failures;
+ collected_number chart_data_lost_events;
+ collected_number chart_lost_bytes;
+ collected_number chart_reconnects;
+};
+
+struct instance {
+ struct instance_config config;
+ void *buffer;
+ struct stats stats;
+
+ int scheduled;
+ int skip_host;
+ int skip_chart;
+
+ time_t after;
+ time_t before;
+
+ uv_thread_t thread;
+ uv_mutex_t mutex;
+ uv_cond_t cond_var;
+
+ int (*start_batch_formatting)(struct instance *instance);
+ int (*start_host_formatting)(struct instance *instance, RRDHOST *host);
+ int (*start_chart_formatting)(struct instance *instance, RRDSET *st);
+ int (*metric_formatting)(struct instance *instance, RRDDIM *rd);
+ int (*end_chart_formatting)(struct instance *instance, RRDSET *st);
+ int (*end_host_formatting)(struct instance *instance, RRDHOST *host);
+ int (*end_batch_formatting)(struct instance *instance);
+
+ size_t index;
+ struct instance *next;
+ struct connector *connector;
+};
+
+struct connector {
+ struct connector_config config;
+
+ void (*worker)(void *instance_p);
+
+ struct instance *instance_root;
+ struct connector *next;
+ struct engine *engine;
+};
+
+struct engine {
+ struct engine_config config;
+
+ size_t instance_num;
+ time_t now;
+
+ struct connector *connector_root;
+};
+
+void *exporting_main(void *ptr);
+
+struct engine *read_exporting_config();
+BACKEND_TYPE exporting_select_type(const char *type);
+
+int init_connectors(struct engine *engine);
+
+int mark_scheduled_instances(struct engine *engine);
+int prepare_buffers(struct engine *engine);
+int notify_workers(struct engine *engine);
+
+size_t exporting_name_copy(char *dst, const char *src, size_t max_len);
+
+int rrdhost_is_exportable(struct instance *instance, RRDHOST *host);
+int rrdset_is_exportable(struct instance *instance, RRDSET *st);
+
+calculated_number exporting_calculate_value_from_stored_data(
+ struct instance *instance,
+ RRDDIM *rd,
+ time_t *last_timestamp);
+
+int start_batch_formatting(struct engine *engine);
+int start_host_formatting(struct engine *engine, RRDHOST *host);
+int start_chart_formatting(struct engine *engine, RRDSET *st);
+int metric_formatting(struct engine *engine, RRDDIM *rd);
+int end_chart_formatting(struct engine *engine, RRDSET *st);
+int end_host_formatting(struct engine *engine, RRDHOST *host);
+int end_batch_formatting(struct engine *engine);
+
+int exporting_discard_response(BUFFER *buffer, struct instance *instance);
+void simple_connector_receive_response(int *sock, struct instance *instance);
+void simple_connector_send_buffer(int *sock, int *failures, struct instance *instance);
+void simple_connector_worker(void *instance_p);
+
+int send_internal_metrics(struct engine *engine);
+
+#endif /* NETDATA_EXPORTING_ENGINE_H */