aclk_query_queue.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. HTTP_API_V2,
  11. REGISTER_NODE,
  12. NODE_STATE_UPDATE,
  13. CHART_DIMS_UPDATE,
  14. CHART_CONFIG_UPDATED,
  15. CHART_RESET,
  16. RETENTION_UPDATED,
  17. UPDATE_NODE_INFO,
  18. ALARM_LOG_HEALTH,
  19. ALARM_PROVIDE_CFG,
  20. ALARM_SNAPSHOT,
  21. UPDATE_NODE_COLLECTORS,
  22. PROTO_BIN_MESSAGE,
  23. ACLK_QUERY_TYPE_COUNT // always keep this as last
  24. } aclk_query_type_t;
  25. struct aclk_query_http_api_v2 {
  26. char *payload;
  27. char *query;
  28. };
  29. struct aclk_bin_payload {
  30. char *payload;
  31. size_t size;
  32. enum aclk_topics topic;
  33. const char *msg_name;
  34. };
  35. typedef struct aclk_query *aclk_query_t;
  36. struct aclk_query {
  37. aclk_query_type_t type;
  38. // dedup_id is used to deduplicate queries in the list
  39. // if type and dedup_id is the same message is deduplicated
  40. // set dedup_id to NULL to never deduplicate the message
  41. // set dedup_id to constant (e.g. empty string "") to make
  42. // message of this type ever exist only once in the list
  43. char *dedup_id;
  44. char *callback_topic;
  45. char *msg_id;
  46. struct timeval created_tv;
  47. usec_t created;
  48. int timeout;
  49. aclk_query_t next;
  50. // TODO maybe remove?
  51. int version;
  52. union {
  53. struct aclk_query_http_api_v2 http_api_v2;
  54. struct aclk_bin_payload bin_payload;
  55. } data;
  56. };
  57. aclk_query_t aclk_query_new(aclk_query_type_t type);
  58. void aclk_query_free(aclk_query_t query);
  59. int aclk_queue_query(aclk_query_t query);
  60. aclk_query_t aclk_queue_pop(void);
  61. void aclk_queue_flush(void);
  62. void aclk_queue_lock(void);
  63. void aclk_queue_unlock(void);
  64. #define QUEUE_IF_PAYLOAD_PRESENT(query) \
  65. if (likely(query->data.bin_payload.payload)) { \
  66. aclk_queue_query(query); \
  67. } else { \
  68. error("Failed to generate payload (%s)", __FUNCTION__); \
  69. aclk_query_free(query); \
  70. }
  71. #endif /* NETDATA_ACLK_QUERY_QUEUE_H */