]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: stats: report the total number of warnings issued
authorWilly Tarreau <w@1wt.eu>
Thu, 11 May 2023 10:02:21 +0000 (12:02 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 11 May 2023 10:02:21 +0000 (12:02 +0200)
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
include/haproxy/stats-t.h
src/errors.c
src/stats.c

index 81a4b2f1134775bae37462da1126d333431cbb05..c102fedb8eb70d02552db2941a65ba7f22a888d3 100644 (file)
@@ -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 ***********/
 
index 5a46d30dfaa993b122ac245e4ae0af7deb13d743..b15ca86046a179662c72778ab700a840dbe2043a 100644 (file)
@@ -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
index da10c2f7f735bf0be31751be5d55d57857e7ca50..2e9d6afb7e046e65954b97629265d56836b6fa76 100644 (file)
@@ -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)) {
index dae6921fcae009da6e23b079abdcca78a0c9e535..eab75eef384a492e347a65b66e344e72c5e53672 100644 (file)
@@ -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)
                      "<h3>&gt; 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 @@ 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;