diff --git a/doc/configuration.txt b/doc/configuration.txt index 7e9659447..92cd94293 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -6843,8 +6843,14 @@ show stat [ ] the reader knows the output has not been trucated. clear counters - Clear statistics counters in each proxy (frontend & backend) and in each - server. + Clear the max values of the statistics counters in each proxy (frontend & + backend) and in each server. The cumulated counters are not affected. This + can be used to get clean counters after an incident, without having to + restart nor to clear traffic counters. + +clear counters all + Clear all statistics counters in each proxy (frontend & backend) and in each + server. This has the same effect as restarting. /* * Local variables: diff --git a/src/dumpstats.c b/src/dumpstats.c index f59bf9071..bacd9cc9f 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -54,7 +54,7 @@ const char stats_sock_usage_msg[] = "Unknown command. Please enter one of the following commands only :\n" - " clear counters : clear statistics counters\n" + " clear counters : clear max statistics counters (add 'all' for all counters)\n" " help : this message\n" " prompt : toggle interactive mode with prompt\n" " quit : disconnect\n" @@ -309,16 +309,38 @@ int stats_sock_parse_request(struct stream_interface *si, char *line) struct proxy *px; struct server *sv; struct listener *li; + int clrall = 0; + + if (strcmp(args[2], "all") == 0) + clrall = 1; for (px = proxy; px; px = px->next) { - memset(&px->counters, 0, sizeof(px->counters)); + if (clrall) + memset(&px->counters, 0, sizeof(px->counters)); + else { + px->counters.feconn_max = 0; + px->counters.beconn_max = 0; + px->counters.fe_sps_max = 0; + px->counters.be_sps_max = 0; + px->counters.nbpend_max = 0; + } for (sv = px->srv; sv; sv = sv->next) - memset(&sv->counters, 0, sizeof(sv->counters)); + if (clrall) + memset(&sv->counters, 0, sizeof(sv->counters)); + else { + sv->counters.cur_sess_max = 0; + sv->counters.nbpend_max = 0; + sv->counters.sps_max = 0; + } for (li = px->listen; li; li = li->next) - if (li->counters) - memset(li->counters, 0, sizeof(*li->counters)); + if (li->counters) { + if (clrall) + memset(li->counters, 0, sizeof(*li->counters)); + else + li->counters->conn_max = 0; + } } return 1;