Viewing file: aclk_query_queue.h (2.91 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// 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, 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_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;
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; node_instance_creation_t node_creation; node_instance_connection_t node_update; 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);
#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 */
|