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.

(cherry picked from commit f21d17bbe8ef3a92d765cfee75721fddb8fe1ffd)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/src/stats.c b/src/stats.c
index d40e089..545350d 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -983,11 +983,23 @@
 
 		chunk_appendf(out,
 		              /* sessions: current, max, limit, total */
-		              "<td>%s</td><td>%s</td><td>%s</td>"
+		              "<td><u>%s<div class=tips>"
+			        "<table class=det>"
+		                "<tr><th>Current active connections:</th><td>%s</td></tr>"
+		                "<tr><th>Current idle connections:</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>"
+			      "</td><td>%s</td><td>%s</td>"
 		              "<td><u>%s<div class=tips><table class=det>"
 		              "<tr><th>Cum. sessions:</th><td>%s</td></tr>"
 		              "",
-		              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));
 
@@ -1650,6 +1662,10 @@
 	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);