From ab874cf69b7e511beb43581aa10fe4a37e704849 Mon Sep 17 00:00:00 2001 From: Mathew Date: Thu, 11 Jun 2026 13:00:33 +0000 Subject: [PATCH] 0018-fix-zbxnext-8813 --- src/libs/zbxpreproc/pp_execute.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/libs/zbxpreproc/pp_execute.c b/src/libs/zbxpreproc/pp_execute.c index 01ff5dd26b..6c7ec783c5 100644 --- a/src/libs/zbxpreproc/pp_execute.c +++ b/src/libs/zbxpreproc/pp_execute.c @@ -697,8 +697,8 @@ static int pp_execute_script(zbx_pp_context_t *ctx, zbx_variant_t *value, const * FAIL - otherwise * * * ******************************************************************************/ -static int pp_execute_prometheus_query(zbx_pp_cache_t *cache, zbx_variant_t *value, const char *params, - char **errmsg) +static int pp_execute_prometheus_query(zbx_pp_cache_t *cache, zbx_variant_t *value, unsigned char value_type, + const char *params, char **errmsg) { char *pattern, *request, *output, *value_out = NULL, *err = NULL; int ret = FAIL; @@ -758,6 +758,15 @@ static int pp_execute_prometheus_query(zbx_pp_cache_t *cache, zbx_variant_t *val zbx_variant_clear(value); zbx_variant_set_str(value, value_out); + + if (SUCCEED == ret && (0 == strcmp(request, "value") || 0 == strcmp(request, "function")) && + (ITEM_VALUE_TYPE_FLOAT == value_type || ITEM_VALUE_TYPE_UINT64 == value_type)) + { + char *convert_err = NULL; + + if (FAIL == zbx_variant_to_value_type(value, value_type, &convert_err)) + zbx_free(convert_err); + } out: zbx_free(pattern); @@ -785,11 +794,12 @@ out: * FAIL - otherwise. The error message is stored in value. * * * ******************************************************************************/ -static int pp_execute_prometheus_pattern(zbx_pp_cache_t *cache, zbx_variant_t *value, const char *params) +static int pp_execute_prometheus_pattern(zbx_pp_cache_t *cache, zbx_variant_t *value, unsigned char value_type, + const char *params) { char *errmsg = NULL; - if (SUCCEED == pp_execute_prometheus_query(cache, value, params, &errmsg)) + if (SUCCEED == pp_execute_prometheus_query(cache, value, value_type, params, &errmsg)) return SUCCEED; zbx_variant_clear(value); @@ -1148,7 +1158,7 @@ int pp_execute_step(zbx_pp_context_t *ctx, zbx_pp_cache_t *cache, zbx_dc_um_shar zbx_variant_clear(history_value_out); goto out; case ZBX_PREPROC_PROMETHEUS_PATTERN: - ret = pp_execute_prometheus_pattern(cache, value, params); + ret = pp_execute_prometheus_pattern(cache, value, value_type, params); goto out; case ZBX_PREPROC_PROMETHEUS_TO_JSON: ret = pp_execute_prometheus_to_json(cache, value, params); -- 2.47.3