From: Willy Tarreau Date: Mon, 29 Jun 2020 11:51:05 +0000 (+0200) Subject: MINOR: stats: add 3 new output values for the per-server idle conn state X-Git-Tag: v2.2-dev12~59 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3bb617cfe0ae9739f223ca779a8de93086671c91;p=thirdparty%2Fhaproxy.git MINOR: stats: add 3 new output values for the per-server idle conn state The servers have internal states describing the status of idle connections, unfortunately these were not exported in the stats. This patch adds the 3 following gauges: - idle_conn_cur : Current number of unsafe idle connections - safe_conn_cur : Current number of safe idle connections - used_conn_cur : Current number of connections in use --- diff --git a/include/haproxy/stats-t.h b/include/haproxy/stats-t.h index 657300851d..c5d68ddebd 100644 --- a/include/haproxy/stats-t.h +++ b/include/haproxy/stats-t.h @@ -423,6 +423,9 @@ enum stat_field { ST_F_RT_MAX, ST_F_TT_MAX, ST_F_EINT, + ST_F_IDLE_CONN_CUR, + ST_F_SAFE_CONN_CUR, + ST_F_USED_CONN_CUR, /* must always be the last one */ ST_F_TOTAL_FIELDS diff --git a/src/stats.c b/src/stats.c index 72268742e5..351b79fa00 100644 --- a/src/stats.c +++ b/src/stats.c @@ -244,6 +244,9 @@ const struct name_desc stat_fields[ST_F_TOTAL_FIELDS] = { [ST_F_RT_MAX] = { .name = "rtime_max", .desc = "Maximum observed time spent waiting for a server response, in milliseconds (backend/server)" }, [ST_F_TT_MAX] = { .name = "ttime_max", .desc = "Maximum observed total request+response time (request+queue+connect+response+processing), in milliseconds (backend/server)" }, [ST_F_EINT] = { .name = "eint", .desc = "Total number of internal errors since process started"}, + [ST_F_IDLE_CONN_CUR] = { .name = "idle_conn_cur", .desc = "Current number of unsafe idle connections"}, + [ST_F_SAFE_CONN_CUR] = { .name = "safe_conn_cur", .desc = "Current number of safe idle connections"}, + [ST_F_USED_CONN_CUR] = { .name = "used_conn_cur", .desc = "Current number of connections in use"}, }; /* one line of info */ @@ -990,7 +993,10 @@ static int stats_dump_fields_html(struct buffer *out, "%s
" "" "" + "" "" + "" + "" "" "" "
Current active connections:%s
Current used connections:%s
Current idle connections:%s
- unsafe:%s
- safe:%s
Active connections limit:%s
Idle connections limit:%s
" @@ -999,8 +1005,12 @@ static int stats_dump_fields_html(struct buffer *out, "Cum. sessions:%s" "", U2H(stats[ST_F_SCUR].u.u32), - U2H(stats[ST_F_SCUR].u.u32), - U2H(stats[ST_F_SRV_ICUR].u.u32), + U2H(stats[ST_F_SCUR].u.u32), + U2H(stats[ST_F_USED_CONN_CUR].u.u32), + U2H(stats[ST_F_SRV_ICUR].u.u32), + U2H(stats[ST_F_IDLE_CONN_CUR].u.u32), + U2H(stats[ST_F_SAFE_CONN_CUR].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, "-"), @@ -1690,6 +1700,10 @@ int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags, stats[ST_F_CONNECT] = mkf_u64(FN_COUNTER, sv->counters.connect); stats[ST_F_REUSE] = mkf_u64(FN_COUNTER, sv->counters.reuse); + stats[ST_F_IDLE_CONN_CUR] = mkf_u32(0, sv->curr_idle_nb); + stats[ST_F_SAFE_CONN_CUR] = mkf_u32(0, sv->curr_safe_nb); + stats[ST_F_USED_CONN_CUR] = mkf_u32(0, sv->curr_used_conns); + /* status */ fld_status = chunk_newstr(out); if (sv->cur_admin & SRV_ADMF_RMAINT)