diff --git a/include/types/counters.h b/include/types/counters.h index 8326429a65..efb48f66bb 100644 --- a/include/types/counters.h +++ b/include/types/counters.h @@ -57,6 +57,7 @@ struct pxcounters { union { struct { long long cum_req; /* cumulated number of processed HTTP requests */ + long long comp_rsp; /* number of compressed responses */ unsigned int rps_max; /* maximum of new HTTP requests second observed */ long long rsp[6]; /* http response codes */ } http; diff --git a/src/dumpstats.c b/src/dumpstats.c index ec27db8da8..0fef8f4dfc 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -380,7 +380,7 @@ static int print_csv_header(struct chunk *msg) "hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail," "req_rate,req_rate_max,req_tot," "cli_abrt,srv_abrt," - "comp_in, comp_out, comp_byp," + "comp_in,comp_out,comp_byp,comp_rsp," "\n"); } @@ -2473,6 +2473,10 @@ static int stats_dump_proxy(struct stream_interface *si, struct proxy *px, struc chunk_appendf(&trash, " %dxx=%lld,", i, px->fe_counters.p.http.rsp[i]); chunk_appendf(&trash, " other=%lld,", px->fe_counters.p.http.rsp[0]); + chunk_appendf(&trash, " compressed=%lld (%d%%)", + px->fe_counters.p.http.comp_rsp, + px->fe_counters.p.http.cum_req ? + (int)(100*px->fe_counters.p.http.comp_rsp/px->fe_counters.p.http.cum_req) : 0); chunk_appendf(&trash, " intercepted=%lld\"", px->fe_counters.intercepted_req); } @@ -2579,6 +2583,10 @@ static int stats_dump_proxy(struct stream_interface *si, struct proxy *px, struc chunk_appendf(&trash, "%lld,%lld,%lld,", px->fe_counters.comp_in, px->fe_counters.comp_out, px->fe_counters.comp_byp); + /* compression: comp_rsp */ + chunk_appendf(&trash, "%lld,", + px->fe_counters.p.http.comp_rsp); + /* finish with EOL */ chunk_appendf(&trash, "\n"); } @@ -2708,6 +2716,8 @@ static int stats_dump_proxy(struct stream_interface *si, struct proxy *px, struc ",,," /* errors: cli_aborts, srv_aborts */ ",," + /* compression: in, out, bypassed, comp_rsp */ + ",,,," "\n", px->id, l->name, l->nbconn, l->counters->conn_max, @@ -3126,6 +3136,9 @@ static int stats_dump_proxy(struct stream_interface *si, struct proxy *px, struc chunk_appendf(&trash, "%lld,%lld,", sv->counters.cli_aborts, sv->counters.srv_aborts); + /* compression: in, out, bypassed, comp_rsp */ + chunk_appendf(&trash, ",,,,"); + /* finish with EOL */ chunk_appendf(&trash, "\n"); } @@ -3195,12 +3208,16 @@ static int stats_dump_proxy(struct stream_interface *si, struct proxy *px, struc if (px->mode == PR_MODE_HTTP) { int i; - chunk_appendf(&trash, " title=\"rsp codes:"); + chunk_appendf(&trash, " title=\"%lld requests:", px->be_counters.p.http.cum_req); for (i = 1; i < 6; i++) chunk_appendf(&trash, " %dxx=%lld", i, px->be_counters.p.http.rsp[i]); - chunk_appendf(&trash, " other=%lld\"", px->be_counters.p.http.rsp[0]); + chunk_appendf(&trash, " other=%lld ", px->be_counters.p.http.rsp[0]); + chunk_appendf(&trash, " compressed=%lld (%d%%)\"", + px->be_counters.p.http.comp_rsp, + px->be_counters.p.http.cum_req ? + (int)(100*px->be_counters.p.http.comp_rsp/px->be_counters.p.http.cum_req) : 0); } chunk_appendf(&trash, @@ -3338,6 +3355,10 @@ static int stats_dump_proxy(struct stream_interface *si, struct proxy *px, struc chunk_appendf(&trash, "%lld,%lld,%lld,", px->be_counters.comp_in, px->be_counters.comp_out, px->be_counters.comp_byp); + /* compression: comp_rsp */ + chunk_appendf(&trash, "%lld,", + px->be_counters.p.http.comp_rsp); + /* finish with EOL */ chunk_appendf(&trash, "\n"); diff --git a/src/proto_http.c b/src/proto_http.c index aea1ec22f0..19ddbec31b 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -4027,12 +4027,18 @@ void http_end_txn_clean_session(struct session *s) if (n < 1 || n > 5) n = 0; - if (s->fe->mode == PR_MODE_HTTP) + if (s->fe->mode == PR_MODE_HTTP) { s->fe->fe_counters.p.http.rsp[n]++; - + if (s->comp_algo) + s->fe->fe_counters.p.http.comp_rsp++; + } if ((s->flags & SN_BE_ASSIGNED) && - (s->be->mode == PR_MODE_HTTP)) + (s->be->mode == PR_MODE_HTTP)) { s->be->be_counters.p.http.rsp[n]++; + s->be->be_counters.p.http.cum_req++; + if (s->comp_algo) + s->be->be_counters.p.http.comp_rsp++; + } } /* don't count other requests' data */ diff --git a/src/session.c b/src/session.c index 0a070568b1..9aac91d40e 100644 --- a/src/session.c +++ b/src/session.c @@ -2433,12 +2433,18 @@ struct task *process_session(struct task *t) if (n < 1 || n > 5) n = 0; - if (s->fe->mode == PR_MODE_HTTP) + if (s->fe->mode == PR_MODE_HTTP) { s->fe->fe_counters.p.http.rsp[n]++; - + if (s->comp_algo) + s->fe->fe_counters.p.http.comp_rsp++; + } if ((s->flags & SN_BE_ASSIGNED) && - (s->be->mode == PR_MODE_HTTP)) + (s->be->mode == PR_MODE_HTTP)) { s->be->be_counters.p.http.rsp[n]++; + s->be->be_counters.p.http.cum_req++; + if (s->comp_algo) + s->be->be_counters.p.http.comp_rsp++; + } } /* let's do a final log if we need it */