aclk_query_queue.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef NETDATA_ACLK_QUERY_QUEUE_H
  3. #define NETDATA_ACLK_QUERY_QUEUE_H
  4. #include "libnetdata/libnetdata.h"
  5. #include "daemon/common.h"
  6. #include "schema-wrappers/schema_wrappers.h"
  7. #include "aclk_util.h"
  8. typedef enum {
  9. UNKNOWN = 0,
  10. METADATA_INFO,
  11. METADATA_ALARMS,
  12. HTTP_API_V2,
  13. CHART_NEW,
  14. CHART_DEL,
  15. ALARM_STATE_UPDATE,
  16. REGISTER_NODE,
  17. NODE_STATE_UPDATE,
  18. CHART_DIMS_UPDATE,
  19. CHART_CONFIG_UPDATED,
  20. CHART_RESET,
  21. RETENTION_UPDATED,
  22. UPDATE_NODE_INFO,
  23. ALARM_LOG_HEALTH,
  24. ALARM_PROVIDE_CFG,
  25. ALARM_SNAPSHOT,
  26. ACLK_QUERY_TYPE_COUNT // always keep this as last
  27. } aclk_query_type_t;
  28. struct aclk_query_metadata {
  29. RRDHOST *host;
  30. int initial_on_connect;
  31. };
  32. struct aclk_query_chart_add_del {
  33. RRDHOST *host;
  34. char* chart_name;
  35. };
  36. struct aclk_query_http_api_v2 {
  37. char *payload;
  38. char *query;
  39. };
  40. struct aclk_bin_payload {
  41. char *payload;
  42. size_t size;
  43. enum aclk_topics topic;
  44. const char *msg_name;
  45. };
  46. typedef struct aclk_query *aclk_query_t;
  47. struct aclk_query {
  48. aclk_query_type_t type;
  49. // dedup_id is used to deduplicate queries in the list
  50. // if type and dedup_id is the same message is deduplicated
  51. // set dedup_id to NULL to never deduplicate the message
  52. // set dedup_id to constant (e.g. empty string "") to make
  53. // message of this type ever exist only once in the list
  54. char *dedup_id;
  55. char *callback_topic;
  56. char *msg_id;
  57. struct timeval created_tv;
  58. usec_t created;
  59. int timeout;
  60. aclk_query_t next;
  61. // TODO maybe remove?
  62. int version;
  63. union {
  64. struct aclk_query_metadata metadata_info;
  65. struct aclk_query_metadata metadata_alarms;
  66. struct aclk_query_http_api_v2 http_api_v2;
  67. struct aclk_query_chart_add_del chart_add_del;
  68. struct aclk_bin_payload bin_payload;
  69. json_object *alarm_update;
  70. } data;
  71. };
  72. aclk_query_t aclk_query_new(aclk_query_type_t type);
  73. void aclk_query_free(aclk_query_t query);
  74. int aclk_queue_query(aclk_query_t query);
  75. aclk_query_t aclk_queue_pop(void);
  76. void aclk_queue_flush(void);
  77. void aclk_queue_lock(void);
  78. void aclk_queue_unlock(void);
  79. #define QUEUE_IF_PAYLOAD_PRESENT(query) \
  80. if (likely(query->data.bin_payload.payload)) { \
  81. aclk_queue_query(query); \
  82. } else { \
  83. error("Failed to generate payload (%s)", __FUNCTION__); \
  84. aclk_query_free(query); \
  85. }
  86. #endif /* NETDATA_ACLK_QUERY_QUEUE_H */