From c9e38ebe9a4491c94166dc89ea94efeee0f1e3c7 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Fri, 3 Feb 2023 15:44:13 -0500 Subject: [PATCH] MT#55283 properly support double value stats Change-Id: Ibabccb95d7dde410018e85f515c3b46733af6a35 --- daemon/mqtt.c | 2 ++ daemon/statistics.c | 8 ++++++-- include/statistics.h | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/daemon/mqtt.c b/daemon/mqtt.c index f2d86abee..0e5e84522 100644 --- a/daemon/mqtt.c +++ b/daemon/mqtt.c @@ -477,6 +477,8 @@ static void mqtt_global_stats(JsonBuilder *json) { json_builder_set_member_name(json, m->label); if (m->is_int) json_builder_add_int_value(json, m->int_value); + else if (m->is_double) + json_builder_add_double_value(json, m->double_value); else json_builder_add_string_value(json, m->value_short); } diff --git a/daemon/statistics.c b/daemon/statistics.c index 0dcf2887b..837fd3d18 100644 --- a/daemon/statistics.c +++ b/daemon/statistics.c @@ -247,6 +247,10 @@ static void add_metric(GQueue *ret, const char *label, const char *desc, const c m->is_int = 1; m->int_value = va_arg(ap, long long); } + else if (!strcmp(fmt1, "%.6f") || !strcmp(fmt1, "%.2f")) { + m->is_double = 1; + m->double_value = va_arg(ap, double); + } va_end(ap); } metric_push(ret, m); @@ -585,8 +589,8 @@ GQueue *statistics_gather_metrics(void) { mn = g_strdup_printf("%sduration", ng_command_strings_short[i]); lw = g_ascii_strdown(mn, -1); - METRICsva(lw, "%llu.%06llu", (unsigned long long) cur->cmd[i].time.tv_sec, - (unsigned long long) cur->cmd[i].time.tv_usec); + METRICs(lw, "%.6f", (double) cur->cmd[i].time.tv_sec + + (double) cur->cmd[i].time.tv_usec / 1000000.); PROM("request_seconds_total", "counter"); PROMLAB("proxy=\"%s\",request=\"%s\"", sockaddr_print_buf(&cur->proxy), ng_command_strings[i]); diff --git a/include/statistics.h b/include/statistics.h index e834f47f5..d7339dfcc 100644 --- a/include/statistics.h +++ b/include/statistics.h @@ -93,11 +93,13 @@ struct stats_metric { char *value_short; char *value_long; int64_t int_value; + double double_value; int is_bracket; int is_close_bracket; int is_brace; int is_follow_up; int is_int; + int is_double; const char *prom_name; const char *prom_type; char *prom_label;