summaryrefslogtreecommitdiffstats
path: root/aclk/agent_cloud_link.h
diff options
context:
space:
mode:
Diffstat (limited to 'aclk/agent_cloud_link.h')
-rw-r--r--aclk/agent_cloud_link.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/aclk/agent_cloud_link.h b/aclk/agent_cloud_link.h
new file mode 100644
index 0000000000..626cdecfaf
--- /dev/null
+++ b/aclk/agent_cloud_link.h
@@ -0,0 +1,103 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_AGENT_CLOUD_LINK_H
+#define NETDATA_AGENT_CLOUD_LINK_H
+
+#include "../daemon/common.h"
+#include "mqtt.h"
+
+#define ACLK_JSON_IN_MSGID "msg-id"
+#define ACLK_JSON_IN_TYPE "type"
+#define ACLK_JSON_IN_VERSION "version"
+#define ACLK_JSON_IN_TOPIC "callback-topic"
+#define ACLK_JSON_IN_URL "payload"
+
+
+#define ACLK_MSG_TYPE_CHART "chart"
+#define ACLK_ALARMS_TOPIC "alarms"
+#define ACLK_METADATA_TOPIC "meta"
+#define ACLK_COMMAND_TOPIC "cmd"
+#define ACLK_TOPIC_STRUCTURE "/agent/%s"
+
+#define ACLK_STARTUP_WAIT 30 // Seconds to wait before establishing initialization process
+#define ACLK_INITIALIZATION_WAIT 60 // Wait for link to initialize in seconds (per msg)
+#define ACLK_INITIALIZATION_SLEEP_WAIT 1 // Wait time @ spin lock for MQTT initialization in seconds
+#define ACLK_QOS 1
+#define ACLK_PING_INTERVAL 60
+#define ACLK_LOOP_TIMEOUT 5 // seconds to wait for operations in the library loop
+
+#define ACLK_MAX_TOPIC 255
+
+#define ACLK_RECONNECT_DELAY 1 // reconnect delay -- with backoff stragegy fow now
+#define ACLK_MAX_RECONNECT_DELAY 120
+#define ACLK_VERSION "1"
+
+#define CONFIG_SECTION_ACLK "agent_cloud_link"
+
+struct aclk_request {
+ char *type_id;
+ char *msg_id;
+ char *topic;
+ char *url;
+ int version;
+};
+
+
+typedef enum publish_topic_action {
+ PUBLICH_TOPIC_GET,
+ PUBLICH_TOPIC_FREE,
+ PUBLICH_TOPIC_REBUILD
+} PUBLISH_TOPIC_ACTION;
+
+typedef enum aclk_init_action {
+ ACLK_INIT,
+ ACLK_REINIT
+} ACLK_INIT_ACTION;
+
+
+#define GET_PUBLISH_BASE_TOPIC get_publish_base_topic(0)
+#define FREE_PUBLISH_BASE_TOPIC get_publish_base_topic(1)
+#define REBUILD_PUBLISH_BASE_TOPIC get_publish_base_topic(2)
+
+void *aclk_main(void *ptr);
+
+#define NETDATA_ACLK_HOOK \
+ { \
+ .name = "AgentCloudLink", \
+ .config_section = NULL, \
+ .config_name = NULL, \
+ .enabled = 1, \
+ .thread = NULL, \
+ .init_routine = NULL, \
+ .start_routine = aclk_main \
+ },
+
+extern int aclk_send_message(char *sub_topic, char *message);
+
+int aclk_init();
+char *get_base_topic();
+
+extern char *is_agent_claimed(void);
+
+// callbacks for agent cloud link
+int aclk_subscribe(char *topic, int qos);
+void aclk_shutdown();
+//void aclk_message_callback(struct mosquitto *moqs, void *obj, const struct mosquitto_message *msg);
+
+int cloud_to_agent_parse(JSON_ENTRY *e);
+void aclk_disconnect(void *conn);
+void aclk_connect(void *conn);
+void aclk_create_metadata_message(BUFFER *dest, char *type, char *msg_id, BUFFER *contents);
+int aclk_send_metadata();
+int aclk_wait_for_initialization();
+//int aclk_send_charts(RRDHOST *host, BUFFER *wb);
+int aclk_send_single_chart(char *host, char *chart);
+int aclk_queue_query(char *token, char *data, char *msg_type, char *query, int run_after, int internal);
+struct aclk_query *aclk_query_find(char *token, char *data, char *msg_id, char *query);
+//void aclk_rrdset2json(RRDSET *st, BUFFER *wb, char *hostname, int is_slave);
+int aclk_update_chart(RRDHOST *host, char *chart_name);
+int aclk_update_alarm(RRDHOST *host, char *alarm_name);
+void aclk_create_header(BUFFER *dest, char *type, char *msg_id);
+int aclk_handle_cloud_request(char *payload);
+int aclk_submit_request(struct aclk_request *);
+#endif //NETDATA_AGENT_CLOUD_LINK_H