123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- // SPDX-License-Identifier: GPL-3.0-or-later
- #ifndef NETDATA_ACLK_QUERY_QUEUE_H
- #define NETDATA_ACLK_QUERY_QUEUE_H
- #include "libnetdata/libnetdata.h"
- #include "daemon/common.h"
- #include "schema-wrappers/schema_wrappers.h"
- #include "aclk_util.h"
- typedef enum {
- UNKNOWN = 0,
- METADATA_INFO,
- METADATA_ALARMS,
- HTTP_API_V2,
- CHART_NEW,
- CHART_DEL,
- ALARM_STATE_UPDATE,
- REGISTER_NODE,
- NODE_STATE_UPDATE,
- CHART_DIMS_UPDATE,
- CHART_CONFIG_UPDATED,
- CHART_RESET,
- RETENTION_UPDATED,
- UPDATE_NODE_INFO,
- ALARM_LOG_HEALTH,
- ALARM_PROVIDE_CFG,
- ALARM_SNAPSHOT,
- ACLK_QUERY_TYPE_COUNT // always keep this as last
- } aclk_query_type_t;
- struct aclk_query_metadata {
- RRDHOST *host;
- int initial_on_connect;
- };
- struct aclk_query_chart_add_del {
- RRDHOST *host;
- char* chart_name;
- };
- struct aclk_query_http_api_v2 {
- char *payload;
- char *query;
- };
- struct aclk_bin_payload {
- char *payload;
- size_t size;
- enum aclk_topics topic;
- const char *msg_name;
- };
- typedef struct aclk_query *aclk_query_t;
- struct aclk_query {
- aclk_query_type_t type;
- // dedup_id is used to deduplicate queries in the list
- // if type and dedup_id is the same message is deduplicated
- // set dedup_id to NULL to never deduplicate the message
- // set dedup_id to constant (e.g. empty string "") to make
- // message of this type ever exist only once in the list
- char *dedup_id;
- char *callback_topic;
- char *msg_id;
- struct timeval created_tv;
- usec_t created;
- int timeout;
- aclk_query_t next;
- // TODO maybe remove?
- int version;
- union {
- struct aclk_query_metadata metadata_info;
- struct aclk_query_metadata metadata_alarms;
- struct aclk_query_http_api_v2 http_api_v2;
- struct aclk_query_chart_add_del chart_add_del;
- struct aclk_bin_payload bin_payload;
- json_object *alarm_update;
- } data;
- };
- aclk_query_t aclk_query_new(aclk_query_type_t type);
- void aclk_query_free(aclk_query_t query);
- int aclk_queue_query(aclk_query_t query);
- aclk_query_t aclk_queue_pop(void);
- void aclk_queue_flush(void);
- void aclk_queue_lock(void);
- void aclk_queue_unlock(void);
- #define QUEUE_IF_PAYLOAD_PRESENT(query) \
- if (likely(query->data.bin_payload.payload)) { \
- aclk_queue_query(query); \
- } else { \
- error("Failed to generate payload (%s)", __FUNCTION__); \
- aclk_query_free(query); \
- }
- #endif /* NETDATA_ACLK_QUERY_QUEUE_H */
|