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.
diff --git a/include/haproxy/errors.h b/include/haproxy/errors.h
index 81a4b2f..c102fed 100644
--- a/include/haproxy/errors.h
+++ b/include/haproxy/errors.h
@@ -68,6 +68,7 @@
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 5a46d30..b15ca86 100644
--- a/include/haproxy/stats-t.h
+++ b/include/haproxy/stats-t.h
@@ -343,6 +343,7 @@
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 da10c2f..2e9d6af 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 @@
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 dae6921..eab75ee 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -156,6 +156,7 @@
[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 @@
"<h3>> General process information</h3>\n"
"<table border=0><tr><td align=\"left\" nowrap width=\"1%%\">\n"
"<p><b>pid = </b> %d (process #%d, nbproc = %d, nbthread = %d)<br>\n"
- "<b>uptime = </b> %dd %dh%02dm%02ds<br>\n"
+ "<b>uptime = </b> %dd %dh%02dm%02ds; warnings = %u<br>\n"
"<b>system limits:</b> memmax = %s%s; ulimit-n = %d<br>\n"
"<b>maxsock = </b> %d; <b>maxconn = </b> %d; <b>maxpipes = </b> %d<br>\n"
"current conns = %d; current pipes = %d/%d; conn rate = %d/sec; bit rate = %.3f %cbps<br>\n"
@@ -3636,6 +3637,7 @@
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 @@
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;