agent_cloud_link.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef NETDATA_AGENT_CLOUD_LINK_H
  3. #define NETDATA_AGENT_CLOUD_LINK_H
  4. #include "../daemon/common.h"
  5. #include "mqtt.h"
  6. #define ACLK_JSON_IN_MSGID "msg-id"
  7. #define ACLK_JSON_IN_TYPE "type"
  8. #define ACLK_JSON_IN_VERSION "version"
  9. #define ACLK_JSON_IN_TOPIC "callback-topic"
  10. #define ACLK_JSON_IN_URL "payload"
  11. #define ACLK_MSG_TYPE_CHART "chart"
  12. #define ACLK_ALARMS_TOPIC "alarms"
  13. #define ACLK_METADATA_TOPIC "meta"
  14. #define ACLK_COMMAND_TOPIC "cmd"
  15. #define ACLK_TOPIC_STRUCTURE "/agent/%s"
  16. #define ACLK_STARTUP_WAIT 30 // Seconds to wait before establishing initialization process
  17. #define ACLK_INITIALIZATION_WAIT 60 // Wait for link to initialize in seconds (per msg)
  18. #define ACLK_INITIALIZATION_SLEEP_WAIT 1 // Wait time @ spin lock for MQTT initialization in seconds
  19. #define ACLK_QOS 1
  20. #define ACLK_PING_INTERVAL 60
  21. #define ACLK_LOOP_TIMEOUT 5 // seconds to wait for operations in the library loop
  22. #define ACLK_MAX_TOPIC 255
  23. #define ACLK_RECONNECT_DELAY 1 // reconnect delay -- with backoff stragegy fow now
  24. #define ACLK_MAX_RECONNECT_DELAY 120
  25. #define ACLK_VERSION "1"
  26. #define CONFIG_SECTION_ACLK "agent_cloud_link"
  27. struct aclk_request {
  28. char *type_id;
  29. char *msg_id;
  30. char *topic;
  31. char *url;
  32. int version;
  33. };
  34. typedef enum publish_topic_action {
  35. PUBLICH_TOPIC_GET,
  36. PUBLICH_TOPIC_FREE,
  37. PUBLICH_TOPIC_REBUILD
  38. } PUBLISH_TOPIC_ACTION;
  39. typedef enum aclk_init_action {
  40. ACLK_INIT,
  41. ACLK_REINIT
  42. } ACLK_INIT_ACTION;
  43. #define GET_PUBLISH_BASE_TOPIC get_publish_base_topic(0)
  44. #define FREE_PUBLISH_BASE_TOPIC get_publish_base_topic(1)
  45. #define REBUILD_PUBLISH_BASE_TOPIC get_publish_base_topic(2)
  46. void *aclk_main(void *ptr);
  47. #define NETDATA_ACLK_HOOK \
  48. { \
  49. .name = "AgentCloudLink", \
  50. .config_section = NULL, \
  51. .config_name = NULL, \
  52. .enabled = 1, \
  53. .thread = NULL, \
  54. .init_routine = NULL, \
  55. .start_routine = aclk_main \
  56. },
  57. extern int aclk_send_message(char *sub_topic, char *message);
  58. int aclk_init();
  59. char *get_base_topic();
  60. extern char *is_agent_claimed(void);
  61. // callbacks for agent cloud link
  62. int aclk_subscribe(char *topic, int qos);
  63. void aclk_shutdown();
  64. //void aclk_message_callback(struct mosquitto *moqs, void *obj, const struct mosquitto_message *msg);
  65. int cloud_to_agent_parse(JSON_ENTRY *e);
  66. void aclk_disconnect(void *conn);
  67. void aclk_connect(void *conn);
  68. void aclk_create_metadata_message(BUFFER *dest, char *type, char *msg_id, BUFFER *contents);
  69. int aclk_send_metadata();
  70. int aclk_wait_for_initialization();
  71. //int aclk_send_charts(RRDHOST *host, BUFFER *wb);
  72. int aclk_send_single_chart(char *host, char *chart);
  73. int aclk_queue_query(char *token, char *data, char *msg_type, char *query, int run_after, int internal);
  74. struct aclk_query *aclk_query_find(char *token, char *data, char *msg_id, char *query);
  75. //void aclk_rrdset2json(RRDSET *st, BUFFER *wb, char *hostname, int is_slave);
  76. int aclk_update_chart(RRDHOST *host, char *chart_name);
  77. int aclk_update_alarm(RRDHOST *host, char *alarm_name);
  78. void aclk_create_header(BUFFER *dest, char *type, char *msg_id);
  79. int aclk_handle_cloud_request(char *payload);
  80. int aclk_submit_request(struct aclk_request *);
  81. #endif //NETDATA_AGENT_CLOUD_LINK_H