From 477f6cf0ec943b422d571b256d4fb45160bb7744 Mon Sep 17 00:00:00 2001 From: Andris Zeila Date: Sat, 23 Jan 2021 18:08:46 +0200 Subject: .......PS. [ZBXNEXT-6451] moved expression parsing code to separate library to avoid cyclic dependencies --- include/zbxserver.h | 148 ---------------------------------------------------- 1 file changed, 148 deletions(-) (limited to 'include/zbxserver.h') diff --git a/include/zbxserver.h b/include/zbxserver.h index 7864987b092..29999ee4490 100644 --- a/include/zbxserver.h +++ b/include/zbxserver.h @@ -110,152 +110,4 @@ int substitute_macros_in_json_pairs(char **data, const struct zbx_json_parse *jp const zbx_vector_ptr_t *lld_macro_paths, char *error, int maxerrlen); int xml_xpath_check(const char *xpath, char *error, size_t errlen); -/* - * Token type flags (32 bits): - * | 6 bits | 4 bits | 22 bits | - * | token class | operator precedence | token type | - */ -#define ZBX_EVAL_CLASS_OPERAND (__UINT64_C(0x01) << 26) -#define ZBX_EVAL_CLASS_OPERATOR1 (__UINT64_C(0x02) << 26) -#define ZBX_EVAL_CLASS_OPERATOR2 (__UINT64_C(0x04) << 26) -#define ZBX_EVAL_CLASS_FUNCTION (__UINT64_C(0x08) << 26) -#define ZBX_EVAL_CLASS_SEPARATOR (__UINT64_C(0x10) << 26) -#define ZBX_EVAL_CLASS_OPERATOR (ZBX_EVAL_CLASS_OPERATOR1 | ZBX_EVAL_CLASS_OPERATOR2) - -#define ZBX_EVAL_BEFORE_OPERAND (ZBX_EVAL_CLASS_OPERATOR | ZBX_EVAL_CLASS_SEPARATOR) -#define ZBX_EVAL_BEFORE_OPERATOR (ZBX_EVAL_CLASS_OPERAND) - -#define ZBX_EVAL_OP_SET_PRECEDENCE(x) ((x) << 22) -#define ZBX_EVAL_OP_PRIORITY ZBX_EVAL_OP_SET_PRECEDENCE(0xf) - -#define ZBX_EVAL_TOKEN_OP_ADD (1 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(4)) -#define ZBX_EVAL_TOKEN_OP_SUB (2 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(4)) -#define ZBX_EVAL_TOKEN_OP_MUL (3 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(3)) -#define ZBX_EVAL_TOKEN_OP_DIV (4 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(3)) -#define ZBX_EVAL_TOKEN_OP_MINUS (5 | ZBX_EVAL_CLASS_OPERATOR1 | ZBX_EVAL_OP_SET_PRECEDENCE(2)) -#define ZBX_EVAL_TOKEN_OP_EQ (6 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(7)) -#define ZBX_EVAL_TOKEN_OP_LT (7 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(6)) -#define ZBX_EVAL_TOKEN_OP_GT (8 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(6)) -#define ZBX_EVAL_TOKEN_OP_LE (9 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(6)) -#define ZBX_EVAL_TOKEN_OP_GE (10 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(6)) -#define ZBX_EVAL_TOKEN_OP_NE (11 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(7)) -#define ZBX_EVAL_TOKEN_OP_AND (12 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(11)) -#define ZBX_EVAL_TOKEN_OP_OR (13 | ZBX_EVAL_CLASS_OPERATOR2 | ZBX_EVAL_OP_SET_PRECEDENCE(12)) -#define ZBX_EVAL_TOKEN_OP_NOT (14 | ZBX_EVAL_CLASS_OPERATOR1 | ZBX_EVAL_OP_SET_PRECEDENCE(2)) -#define ZBX_EVAL_TOKEN_VAR_NUM (15 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_VAR_STR (16 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_VAR_TIME (17 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_VAR_MACRO (18 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_VAR_USERMACRO (19 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_VAR_LLDMACRO (20 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_FUNCTIONID (21 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_FUNCTION (22 | ZBX_EVAL_CLASS_FUNCTION) -#define ZBX_EVAL_TOKEN_HIST_FUNCTION (23 | ZBX_EVAL_CLASS_FUNCTION) -#define ZBX_EVAL_TOKEN_GROUP_OPEN (24 | ZBX_EVAL_CLASS_SEPARATOR) -#define ZBX_EVAL_TOKEN_GROUP_CLOSE (25 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_COMMA (26 | ZBX_EVAL_CLASS_SEPARATOR) -#define ZBX_EVAL_TOKEN_ARG_QUERY (27 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_ARG_TIME (28 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_ARG_NULL (29 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_ARG_RAW (30 | ZBX_EVAL_CLASS_OPERAND) -#define ZBX_EVAL_TOKEN_EXCEPTION (31 | ZBX_EVAL_CLASS_FUNCTION) - -/* expression parsing rules */ - -#define ZBX_EVAL_PARSE_MACRO __UINT64_C(0x0001) -#define ZBX_EVAL_PARSE_USERMACRO __UINT64_C(0x0002) -#define ZBX_EVAL_PARSE_LLDMACRO __UINT64_C(0x0004) -#define ZBX_EVAL_PARSE_FUNCTIONID __UINT64_C(0x0008) -#define ZBX_EVAL_PARSE_ITEM_QUERY __UINT64_C(0x0010) -#define ZBX_EVAL_PARSE_FUNCTION __UINT64_C(0x0020) -#define ZBX_EVAL_PARSE_CONST_INDEX __UINT64_C(0x0040) - -#define ZBX_EVAL_PARSE_TRIGGER_EXPRESSSION (ZBX_EVAL_PARSE_MACRO | ZBX_EVAL_PARSE_USERMACRO | \ - ZBX_EVAL_PARSE_FUNCTIONID | ZBX_EVAL_PARSE_FUNCTION) - -#define ZBX_EVAL_PARSE_CALC_EXPRESSSION (ZBX_EVAL_PARSE_MACRO | ZBX_EVAL_PARSE_USERMACRO | \ - ZBX_EVAL_PARSE_ITEM_QUERY | ZBX_EVAL_PARSE_FUNCTION) - -/* expression composition rules */ - -#define ZBX_EVAL_QUOTE_MACRO __UINT64_C(0x00010000) -#define ZBX_EVAL_QUOTE_USERMACRO __UINT64_C(0x00020000) -#define ZBX_EVAL_QUOTE_LLDMACRO __UINT64_C(0x00040000) - -#define ZBX_EVAL_COMPOSE_TRIGGER_EXPRESSION (ZBX_EVAL_QUOTE_MACRO | ZBX_EVAL_QUOTE_USERMACRO) -#define ZBX_EVAL_COMPOSE_LLD_EXPRESSION ZBX_EVAL_QUOTE_LLDMACRO - -/* expression evaluation rules */ - -#define ZBX_EVAL_PROCESS_ERROR __UINT64_C(0x000100000000) - -/* composite rules */ - -#define ZBX_EVAL_TRIGGER_EXPRESSION (ZBX_EVAL_PARSE_TRIGGER_EXPRESSSION | \ - ZBX_EVAL_COMPOSE_TRIGGER_EXPRESSION | \ - ZBX_EVAL_PROCESS_ERROR) - -typedef zbx_uint32_t zbx_token_type_t; - -/****************************************************************************** - * * - * Typedef: zbx_eval_function_cb_t * - * * - * Purpose: define callback function to calculate custom functions * - * * - * Parameters: name - [IN] the function name (not zero terminated) * - * len - [IN] the function name length * - * args_num - [IN] the number of function arguments * - * args - [IN] an array of the function arguments. * - * value - [OUT] the function return value * - * error - [OUT] the error message if function failed * - * * - * Return value: SUCCEED - the function was executed successfully * - * FAIL - otherwise * - * * - ******************************************************************************/ -typedef int (*zbx_eval_function_cb_t)(const char *name, size_t len, int args_num, const zbx_variant_t *args, - zbx_variant_t *value, char **error); - -typedef struct -{ - zbx_token_type_t type; - zbx_uint32_t opt; - zbx_strloc_t loc; - zbx_variant_t value; -} -zbx_eval_token_t; - -ZBX_VECTOR_DECL(eval_token, zbx_eval_token_t) - -typedef struct -{ - const char *expression; - zbx_token_type_t last_token_type; - int const_index; - int functionid_index; - zbx_uint64_t rules; - zbx_timespec_t ts; - zbx_vector_eval_token_t stack; - zbx_vector_eval_token_t ops; - zbx_eval_function_cb_t function_cb; -} -zbx_eval_context_t; - -typedef char *(*zbx_macro_resolve_func_t)(const char *str, size_t length, zbx_uint64_t *hostids, - int hostids_num); - -int zbx_eval_parse_expression(zbx_eval_context_t *ctx, const char *expression, zbx_uint64_t rules, char **error); -void zbx_eval_clear(zbx_eval_context_t *ctx); -size_t zbx_eval_serialize(const zbx_eval_context_t *ctx, zbx_mem_malloc_func_t malloc_func, unsigned char **data); -void zbx_eval_deserialize(zbx_eval_context_t *ctx, const char *expression, zbx_uint64_t rules, - const unsigned char *data); -void zbx_eval_compose_expression(const zbx_eval_context_t *ctx, char **expression); -int zbx_eval_execute(zbx_eval_context_t *ctx, const zbx_timespec_t *ts, zbx_variant_t *value, char **error); -int zbx_eval_execute_ext(zbx_eval_context_t *ctx, const zbx_timespec_t *ts, zbx_eval_function_cb_t function_cb, - zbx_variant_t *value, char **error); -void zbx_eval_get_functionids(const zbx_eval_context_t *ctx, zbx_vector_uint64_t *functionids); -void zbx_eval_expand_user_macros(const zbx_eval_context_t *ctx, zbx_uint64_t *hostids, int hostids_num, - zbx_macro_resolve_func_t resolver_cb); -void zbx_eval_set_exception(zbx_eval_context_t *ctx, char *message); #endif -- cgit v1.2.3