#include "checks_calculated.h"
#include "zbxexpression.h"
int get_value_calculated(zbx_dc_item_t *dc_item, AGENT_RESULT *result)
zbx_expression_eval_t eval;
zbx_dc_um_handle_t *um_handle;
zabbix_log(LOG_LEVEL_DEBUG, "In %s() key:'%s' expression:'%s'", __func__, dc_item->key_orig, dc_item->params);
um_handle = zbx_dc_open_user_macros();
if (NULL == dc_item->formula_bin)
zabbix_log(LOG_LEVEL_DEBUG, "%s() serialized formula is not set", __func__);
SET_MSG_RESULT(result, zbx_strdup(NULL, "Cannot evaluate calculated item:"
" serialized formula is not set"));
zbx_eval_deserialize(&ctx, dc_item->params, ZBX_EVAL_PARSE_CALC_EXPRESSION, dc_item->formula_bin);
if (SUCCEED != zbx_eval_expand_user_macros(&ctx, &dc_item->host.hostid, 1,
(zbx_macro_expand_func_t)zbx_dc_expand_user_and_func_macros, um_handle, &error))
SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Cannot evaluate calculated item: %s", error));
zbx_expression_eval_init(&eval, ZBX_EXPRESSION_AGGREGATE, &ctx);
zbx_expression_eval_resolve_item_hosts(&eval, dc_item);
zbx_expression_eval_resolve_filter_macros(&eval, dc_item);
if (SUCCEED != zbx_expression_eval_execute(&eval, &ts, &value, &error))
zabbix_log(LOG_LEVEL_DEBUG, "%s() error:%s", __func__, error);