diff --git a/doc/management.txt b/doc/management.txt index 5edfaab9c..5e1fa3c57 100644 --- a/doc/management.txt +++ b/doc/management.txt @@ -899,7 +899,7 @@ S (Servers). 4. scur [LFBS]: current sessions 5. smax [LFBS]: max sessions 6. slim [LFBS]: configured session limit - 7. stot [LFBS]: cumulative number of connections + 7. stot [LFBS]: cumulative number of sessions 8. bin [LFBS]: bytes in 9. bout [LFBS]: bytes out 10. dreq [LFB.]: requests denied because of security concerns. @@ -1026,6 +1026,9 @@ S (Servers). 74: cookie [..BS]: server's cookie value or backend's cookie name 75: mode [LFBS]: proxy mode (tcp, http, health, unknown) 76: algo [..B.]: load balancing algorithm + 77: conn_rate [.F..]: number of connections over the last elapsed second + 78: conn_rate_max [.F..]: highest known conn_rate + 79: conn_tot [.F..]: cumulative number of connections 9.2. Unix Socket commands diff --git a/src/dumpstats.c b/src/dumpstats.c index 386c46440..e61bf0e31 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -337,6 +337,9 @@ enum stat_field { ST_F_COOKIE, ST_F_MODE, ST_F_ALGO, + ST_F_CONN_RATE, + ST_F_CONN_RATE_MAX, + ST_F_CONN_TOT, /* must always be the last one */ ST_F_TOTAL_FIELDS @@ -424,6 +427,9 @@ const char *stat_field_names[ST_F_TOTAL_FIELDS] = { [ST_F_COOKIE] = "cookie", [ST_F_MODE] = "mode", [ST_F_ALGO] = "algo", + [ST_F_CONN_RATE] = "conn_rate", + [ST_F_CONN_RATE_MAX] = "conn_rate_max", + [ST_F_CONN_TOT] = "conn_tot", }; /* one line of stats */ @@ -3285,7 +3291,7 @@ static int stats_dump_fields_html(const struct field *stats, int admin, unsigned "Current session rate:%s/s" "", U2H(stats[ST_F_RATE].u.u32), - U2H(read_freq_ctr(&px->fe_conn_per_sec)), + U2H(stats[ST_F_CONN_RATE].u.u32), U2H(stats[ST_F_RATE].u.u32)); if (strcmp(field_str(stats, ST_F_MODE), "http") == 0) @@ -3301,7 +3307,7 @@ static int stats_dump_fields_html(const struct field *stats, int admin, unsigned "Max session rate:%s/s" "", U2H(stats[ST_F_RATE_MAX].u.u32), - U2H(px->fe_counters.cps_max), + U2H(stats[ST_F_CONN_RATE_MAX].u.u32), U2H(stats[ST_F_RATE_MAX].u.u32)); if (strcmp(field_str(stats, ST_F_MODE), "http") == 0) @@ -3322,9 +3328,9 @@ static int stats_dump_fields_html(const struct field *stats, int admin, unsigned "Cum. connections:%s" "Cum. sessions:%s" "", - U2H(stats[ST_F_SCUR].u.u32), U2H(px->fe_counters.conn_max), U2H(stats[ST_F_SLIM].u.u32), + U2H(stats[ST_F_SCUR].u.u32), U2H(stats[ST_F_SMAX].u.u32), U2H(stats[ST_F_SLIM].u.u32), U2H(stats[ST_F_STOT].u.u64), - U2H(px->fe_counters.cum_conn), + U2H(stats[ST_F_CONN_TOT].u.u64), U2H(stats[ST_F_STOT].u.u64)); /* http response (via hover): 1xx, 2xx, 3xx, 4xx, 5xx, other */ @@ -3947,6 +3953,11 @@ static int stats_dump_fe_stats(struct stream_interface *si, struct proxy *px) stats[ST_F_COMP_BYP] = mkf_u64(FN_COUNTER, px->fe_counters.comp_byp); stats[ST_F_COMP_RSP] = mkf_u64(FN_COUNTER, px->fe_counters.p.http.comp_rsp); + /* connections : conn_rate, conn_rate_max, conn_tot, conn_max */ + stats[ST_F_CONN_RATE] = mkf_u32(FN_RATE, read_freq_ctr(&px->fe_conn_per_sec)); + stats[ST_F_CONN_RATE_MAX] = mkf_u32(FN_MAX, px->fe_counters.cps_max); + stats[ST_F_CONN_TOT] = mkf_u64(FN_COUNTER, px->fe_counters.cum_conn); + if (appctx->ctx.stats.flags & STAT_FMT_HTML) { int admin;