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 6573008..c5d68dd 100644
--- a/include/haproxy/stats-t.h
+++ b/include/haproxy/stats-t.h
@@ -423,6 +423,9 @@
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 7226874..351b79f 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -244,6 +244,9 @@
[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 @@
"<td><u>%s<div class=tips>"
"<table class=det>"
"<tr><th>Current active connections:</th><td>%s</td></tr>"
+ "<tr><th>Current used connections:</th><td>%s</td></tr>"
"<tr><th>Current idle connections:</th><td>%s</td></tr>"
+ "<tr><th>- unsafe:</th><td>%s</td></tr>"
+ "<tr><th>- safe:</th><td>%s</td></tr>"
"<tr><th>Active connections limit:</th><td>%s</td></tr>"
"<tr><th>Idle connections limit:</th><td>%s</td></tr>"
"</table></div></u>"
@@ -999,8 +1005,12 @@
"<tr><th>Cum. sessions:</th><td>%s</td></tr>"
"",
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 @@
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)