agent_cloud_link.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. #include "aclk_common.h"
  7. #define ACLK_THREAD_NAME "ACLK_Query"
  8. #define ACLK_CHART_TOPIC "outbound/meta"
  9. #define ACLK_ALARMS_TOPIC "outbound/alarms"
  10. #define ACLK_METADATA_TOPIC "outbound/meta"
  11. #define ACLK_COMMAND_TOPIC "inbound/cmd"
  12. #define ACLK_TOPIC_STRUCTURE "/agent/%s"
  13. #define ACLK_MAX_BACKOFF_DELAY 1024 // maximum backoff delay in seconds
  14. #define ACLK_INITIALIZATION_WAIT 60 // Wait for link to initialize in seconds (per msg)
  15. #define ACLK_INITIALIZATION_SLEEP_WAIT 1 // Wait time @ spin lock for MQTT initialization in seconds
  16. #define ACLK_QOS 1
  17. #define ACLK_PING_INTERVAL 60
  18. #define ACLK_LOOP_TIMEOUT 5 // seconds to wait for operations in the library loop
  19. #define ACLK_MAX_TOPIC 255
  20. #define ACLK_RECONNECT_DELAY 1 // reconnect delay -- with backoff stragegy fow now
  21. #define ACLK_DEFAULT_PORT 9002
  22. #define ACLK_DEFAULT_HOST "localhost"
  23. #define ACLK_V2_PAYLOAD_SEPARATOR "\x0D\x0A\x0D\x0A"
  24. struct aclk_request {
  25. char *type_id;
  26. char *msg_id;
  27. char *callback_topic;
  28. char *payload;
  29. int version;
  30. int min_version;
  31. int max_version;
  32. };
  33. typedef enum aclk_init_action { ACLK_INIT, ACLK_REINIT } ACLK_INIT_ACTION;
  34. void *aclk_main(void *ptr);
  35. #define NETDATA_ACLK_HOOK \
  36. { .name = "ACLK_Main", \
  37. .config_section = NULL, \
  38. .config_name = NULL, \
  39. .enabled = 1, \
  40. .thread = NULL, \
  41. .init_routine = NULL, \
  42. .start_routine = aclk_main },
  43. extern int aclk_send_message(char *sub_topic, char *message, char *msg_id);
  44. extern int aclk_send_message_bin(char *sub_topic, const void *message, size_t len, char *msg_id);
  45. extern char *is_agent_claimed(void);
  46. extern void aclk_lws_wss_mqtt_layer_disconect_notif();
  47. char *create_uuid();
  48. // callbacks for agent cloud link
  49. int aclk_subscribe(char *topic, int qos);
  50. int cloud_to_agent_parse(JSON_ENTRY *e);
  51. void aclk_disconnect();
  52. void aclk_connect();
  53. int aclk_send_metadata(ACLK_METADATA_STATE state, RRDHOST *host);
  54. int aclk_send_info_metadata(ACLK_METADATA_STATE metadata_submitted, RRDHOST *host);
  55. void aclk_send_alarm_metadata(ACLK_METADATA_STATE metadata_submitted);
  56. int aclk_wait_for_initialization();
  57. char *create_publish_base_topic();
  58. int aclk_send_single_chart(RRDHOST *host, char *chart);
  59. int aclk_update_chart(RRDHOST *host, char *chart_name, ACLK_CMD aclk_cmd);
  60. int aclk_update_alarm(RRDHOST *host, ALARM_ENTRY *ae);
  61. void aclk_create_header(BUFFER *dest, char *type, char *msg_id, time_t ts_secs, usec_t ts_us, int version);
  62. int aclk_handle_cloud_message(char *payload);
  63. void aclk_add_collector(RRDHOST *host, const char *plugin_name, const char *module_name);
  64. void aclk_del_collector(RRDHOST *host, const char *plugin_name, const char *module_name);
  65. void aclk_alarm_reload();
  66. unsigned long int aclk_reconnect_delay(int mode);
  67. extern void health_alarm_entry2json_nolock(BUFFER *wb, ALARM_ENTRY *ae, RRDHOST *host);
  68. void aclk_single_update_enable();
  69. void aclk_single_update_disable();
  70. void aclk_host_state_update(RRDHOST *host, ACLK_CMD cmd);
  71. int aclk_send_info_child_connection(RRDHOST *host, ACLK_CMD cmd);
  72. void aclk_update_next_child_to_popcorn(void);
  73. #endif //NETDATA_AGENT_CLOUD_LINK_H