From: Willy Tarreau Date: Sun, 8 Sep 2019 07:24:56 +0000 (+0200) Subject: MINOR: stats: report the number of idle connections for each server X-Git-Tag: v2.1-dev2~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f21d17bbe8ef3a92d765cfee75721fddb8fe1ffd;p=thirdparty%2Fhaproxy.git MINOR: stats: report the number of idle connections for each server This adds two extra fields to the stats, one for the current number of idle connections and one for the configured limit. A tooltip link now appears on the HTML page to show these values in front of the active connection values. This should be backported to 2.0 and 1.9 as it's the only way to monitor the idle connections behaviour. --- diff --git a/include/types/stats.h b/include/types/stats.h index 5a7aa98134..2a71ff64ef 100644 --- a/include/types/stats.h +++ b/include/types/stats.h @@ -415,6 +415,8 @@ enum stat_field { ST_F_REUSE, ST_F_CACHE_LOOKUPS, ST_F_CACHE_HITS, + ST_F_SRV_ICUR, + ST_F_SRV_ILIM, /* must always be the last one */ ST_F_TOTAL_FIELDS diff --git a/src/stats.c b/src/stats.c index 01fcb4586b..34efbfbbb0 100644 --- a/src/stats.c +++ b/src/stats.c @@ -974,11 +974,23 @@ static int stats_dump_fields_html(struct buffer *out, chunk_appendf(out, /* sessions: current, max, limit, total */ - "%s%s%s" + "%s
" + "" + "" + "" + "" + "" + "
Current active connections:%s
Current idle connections:%s
Active connections limit:%s
Idle connections limit:%s
" + "%s%s" "%s
" "" "", - U2H(stats[ST_F_SCUR].u.u32), U2H(stats[ST_F_SMAX].u.u32), LIM2A(stats[ST_F_SLIM].u.u32, "-"), + U2H(stats[ST_F_SCUR].u.u32), + U2H(stats[ST_F_SCUR].u.u32), + U2H(stats[ST_F_SRV_ICUR].u.u32), + LIM2A(stats[ST_F_SLIM].u.u32, "-"), + stats[ST_F_SRV_ILIM].type ? U2H(stats[ST_F_SRV_ILIM].u.u32) : "-", + U2H(stats[ST_F_SMAX].u.u32), LIM2A(stats[ST_F_SLIM].u.u32, "-"), U2H(stats[ST_F_STOT].u.u64), U2H(stats[ST_F_STOT].u.u64)); @@ -1641,6 +1653,10 @@ int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags, if (sv->maxconn) stats[ST_F_SLIM] = mkf_u32(FO_CONFIG|FN_LIMIT, sv->maxconn); + stats[ST_F_SRV_ICUR] = mkf_u32(0, sv->curr_idle_conns); + if (sv->max_idle_conns != -1) + stats[ST_F_SRV_ILIM] = mkf_u32(FO_CONFIG|FN_LIMIT, sv->max_idle_conns); + stats[ST_F_STOT] = mkf_u64(FN_COUNTER, sv->counters.cum_sess); stats[ST_F_BIN] = mkf_u64(FN_COUNTER, sv->counters.bytes_in); stats[ST_F_BOUT] = mkf_u64(FN_COUNTER, sv->counters.bytes_out);
Cum. sessions:%s