From b118f2f407a824b44e787aae360fabd0172dbf0e Mon Sep 17 00:00:00 2001 From: Aurelien DARRAGON Date: Wed, 7 Dec 2022 14:52:10 +0100 Subject: [PATCH] MINOR: stats: properly handle ST_F_CHECK_DURATION metric ST_F_CHECK_DURATION metric is typed as unsigned int variable, and it is derived from check->duration that is signed. While most of the time check->duration > 0, it is not always true: with HCHK_STATUS_HANA checks, check->duration is set to -1 to prevent server logs from including irrelevant duration info (HCHK_STATUS_HANA checks are not time related). Because of this, stats could report UINT64_MAX value for ST_F_CHECK_DURATION metric. This was quite confusing. To prevent this, we make sure not to assign negative value to ST_F_CHECK_DURATION. This is only a minor printing issue, not backport needed. --- src/stats.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stats.c b/src/stats.c index 5fd4d3f96..6ce41171a 100644 --- a/src/stats.c +++ b/src/stats.c @@ -2330,7 +2330,7 @@ int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags, case ST_F_CHECK_DURATION: if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED && sv->check.status >= HCHK_STATUS_CHECKED) - metric = mkf_u64(FN_DURATION, sv->check.duration); + metric = mkf_u64(FN_DURATION, MAX(sv->check.duration, 0)); break; case ST_F_CHECK_DESC: if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)