int get_value_calculated(DC_ITEM *dc_item, AGENT_RESULT *result) { const char *__function_name = "get_value_calculated"; expression_t exp; int ret; char error[MAX_STRING_LEN]; double value; zabbix_log(LOG_LEVEL_DEBUG, "In %s() key:'%s' expression:'%s'", __function_name, dc_item->key_orig, dc_item->params); memset(&exp, 0, sizeof(exp)); if (SUCCEED != (ret = calcitem_parse_expression(dc_item, &exp, error, sizeof(error)))) { SET_MSG_RESULT(result, strdup(error)); goto clean; } if (SUCCEED != (ret = calcitem_evaluate_expression(dc_item, &exp, error, sizeof(error)))) { SET_MSG_RESULT(result, strdup(error)); goto clean; } if (SUCCEED != evaluate(&value, exp.exp, error, sizeof(error))) { SET_MSG_RESULT(result, strdup(error)); ret = NOTSUPPORTED; goto clean; } zabbix_log(LOG_LEVEL_DEBUG, "%s() value:" ZBX_FS_DBL, __function_name, value); if (ITEM_VALUE_TYPE_UINT64 == dc_item->value_type && 0 > value) { SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Received value [" ZBX_FS_DBL "]" " is not suitable for value type [%s].", value, zbx_item_value_type_string(dc_item->value_type))); ret = NOTSUPPORTED; goto clean; } SET_DBL_RESULT(result, value); clean: free_expression(&exp); zabbix_log(LOG_LEVEL_DEBUG, "End of %s():%s", __function_name, zbx_result_string(ret)); return ret; }
int get_value_calculated(DC_ITEM *dc_item, AGENT_RESULT *result) { const char *__function_name = "get_value_calculated"; expression_t exp; int ret; char error[MAX_STRING_LEN]; double value; zabbix_log(LOG_LEVEL_DEBUG, "In %s() key:'%s' expression:'%s'", __function_name, dc_item->key_orig, dc_item->params_orig); memset(&exp, 0, sizeof(exp)); if (SUCCEED != (ret = calcitem_parse_expression(dc_item, &exp, error, sizeof(error)))) { SET_MSG_RESULT(result, strdup(error)); goto clean; } if (SUCCEED != (ret = calcitem_evaluate_expression(dc_item, &exp, error, sizeof(error)))) { SET_MSG_RESULT(result, strdup(error)); goto clean; } if (SUCCEED != evaluate(&value, exp.exp, error, sizeof(error))) { SET_MSG_RESULT(result, strdup(error)); ret = NOTSUPPORTED; goto clean; } zabbix_log(LOG_LEVEL_DEBUG, "%s() value:" ZBX_FS_DBL, __function_name, value); SET_DBL_RESULT(result, value); clean: free_expression(&exp); zabbix_log(LOG_LEVEL_DEBUG, "End of %s():%s", __function_name, zbx_result_string(ret)); return ret; }