From 3c4a297d2b5d4856c3e5d102c3d98548de6d8d8c Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 11 May 2023 12:02:21 +0200 Subject: [PATCH] MINOR: stats: report the total number of warnings issued Now in "show info" we have a TotalWarnings field that reports the total number of warnings issued since the process started. It's also reported in the the stats page next to the uptime. --- include/haproxy/errors.h | 1 + include/haproxy/stats-t.h | 1 + src/errors.c | 2 ++ src/stats.c | 5 ++++- 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/include/haproxy/errors.h b/include/haproxy/errors.h index 81a4b2f113..c102fedb8e 100644 --- a/include/haproxy/errors.h +++ b/include/haproxy/errors.h @@ -68,6 +68,7 @@ enum { void usermsgs_clr(const char *prefix); int usermsgs_empty(void); const char *usermsgs_str(void); +extern uint tot_warnings; /************ Error reporting functions ***********/ diff --git a/include/haproxy/stats-t.h b/include/haproxy/stats-t.h index 5a46d30dfa..b15ca86046 100644 --- a/include/haproxy/stats-t.h +++ b/include/haproxy/stats-t.h @@ -343,6 +343,7 @@ enum info_field { INF_POOL_USED_BYTES, INF_START_TIME_SEC, INF_TAINTED, + INF_WARNINGS, /* must always be the last one */ INF_TOTAL_FIELDS diff --git a/src/errors.c b/src/errors.c index da10c2f7f7..2e9d6afb7e 100644 --- a/src/errors.c +++ b/src/errors.c @@ -20,6 +20,7 @@ /* A global buffer used to store all startup alerts/warnings. It will then be * retrieve on the CLI. */ struct ring *startup_logs = NULL; +uint tot_warnings = 0; #ifdef USE_SHM_OPEN static struct ring *shm_startup_logs = NULL; #endif @@ -450,6 +451,7 @@ void ha_warning(const char *fmt, ...) va_list argp; warned |= WARN_ANY; + HA_ATOMIC_INC(&tot_warnings); if (!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE) || !(global.mode & MODE_STARTING)) { diff --git a/src/stats.c b/src/stats.c index dae6921fca..eab75eef38 100644 --- a/src/stats.c +++ b/src/stats.c @@ -156,6 +156,7 @@ const struct name_desc info_fields[INF_TOTAL_FIELDS] = { [INF_CUM_LOG_MSGS] = { .name = "CumRecvLogs", .desc = "Total number of log messages received by log-forwarding listeners on this worker process since started" }, [INF_BUILD_INFO] = { .name = "Build info", .desc = "Build info" }, [INF_TAINTED] = { .name = "Tainted", .desc = "Experimental features used" }, + [INF_WARNINGS] = { .name = "TotalWarnings", .desc = "Total warnings issued" }, }; const struct name_desc stat_fields[ST_F_TOTAL_FIELDS] = { @@ -3600,7 +3601,7 @@ static void stats_dump_html_info(struct stconn *sc, struct uri_auth *uri) "

> General process information

\n" "
\n" "

pid = %d (process #%d, nbproc = %d, nbthread = %d)
\n" - "uptime = %dd %dh%02dm%02ds
\n" + "uptime = %dd %dh%02dm%02ds; warnings = %u
\n" "system limits: memmax = %s%s; ulimit-n = %d
\n" "maxsock = %d; maxconn = %d; maxpipes = %d
\n" "current conns = %d; current pipes = %d/%d; conn rate = %d/sec; bit rate = %.3f %cbps
\n" @@ -3636,6 +3637,7 @@ static void stats_dump_html_info(struct stconn *sc, struct uri_auth *uri) pid, 1, 1, global.nbthread, up / 86400, (up % 86400) / 3600, (up % 3600) / 60, (up % 60), + HA_ATOMIC_LOAD(&tot_warnings), global.rlimit_memmax ? ultoa(global.rlimit_memmax) : "unlimited", global.rlimit_memmax ? " MB" : "", global.rlimit_nofile, @@ -4737,6 +4739,7 @@ int stats_fill_info(struct field *info, int len, uint flags) info[INF_CUM_LOG_MSGS] = mkf_u32(FN_COUNTER, cum_log_messages); info[INF_TAINTED] = mkf_str(FO_STATUS, chunk_newstr(out)); + info[INF_WARNINGS] = mkf_u32(FN_COUNTER, HA_ATOMIC_LOAD(&tot_warnings)); chunk_appendf(out, "%#x", get_tainted()); return 1; -- 2.39.5