"rate,rate_lim,rate_max,"
"check_status,check_code,check_duration,"
"hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,"
- "req_rate, req_rate_max, req_tot,"
+ "req_rate,req_rate_max,req_tot,"
+ "cli_abrt,srv_abrt,"
"\n");
}
read_freq_ctr(&px->fe_req_per_sec),
px->counters.fe_rps_max, px->counters.cum_fe_req);
+ /* errors: cli_aborts, srv_aborts */
+ chunk_printf(&msg, ",,");
+
/* finish with EOL */
chunk_printf(&msg, "\n");
}
","
/* requests : req_rate, req_rate_max, req_tot, */
",,,"
+ /* errors: cli_aborts, srv_aborts */
+ ",,"
"\n",
px->id, l->name,
l->nbconn, l->counters->conn_max,
"<td>%s</td><td>%s</td>"
/* denied: req, resp */
"<td></td><td>%s</td>"
- /* errors : request, connect, response */
- "<td></td><td>%s</td><td>%s</td>\n"
+ /* errors : request, connect */
+ "<td></td><td>%s</td>"
+ /* errors : response */
+ "<td title=\"Connection resets during transfers: %s client, %s server\"><u>%s</u></td>"
/* warnings: retries, redispatches */
"<td>%lld</td><td>%lld</td>"
"",
U2H0(sv->counters.bytes_in), U2H1(sv->counters.bytes_out),
U2H2(sv->counters.failed_secu),
- U2H3(sv->counters.failed_conns), U2H4(sv->counters.failed_resp),
+ U2H3(sv->counters.failed_conns),
+ U2H4(sv->counters.cli_aborts),
+ U2H5(sv->counters.srv_aborts),
+ U2H6(sv->counters.failed_resp),
sv->counters.retries, sv->counters.redispatches);
/* status, lest check */
/* requests : req_rate, req_rate_max, req_tot, */
chunk_printf(&msg, ",,,");
+ /* errors: cli_aborts, srv_aborts */
+ chunk_printf(&msg, "%lld,%lld,",
+ sv->counters.cli_aborts, sv->counters.srv_aborts);
+
/* finish with EOL */
chunk_printf(&msg, "\n");
}
chunk_printf(&msg,
/* denied: req, resp */
"<td>%s</td><td>%s</td>"
- /* errors : request, connect, response */
- "<td></td><td>%s</td><td>%s</td>\n"
+ /* errors : request, connect */
+ "<td></td><td>%s</td>"
+ /* errors : response */
+ "<td title=\"Connection resets during transfers: %s client, %s server\"><u>%s</u></td>"
/* warnings: retries, redispatches */
"<td>%lld</td><td>%lld</td>"
/* backend status: reflect backend status (up/down): we display UP
"<td class=ac>%d</td><td class=ac>%d</td>"
"",
U2H0(px->counters.denied_req), U2H1(px->counters.denied_resp),
- U2H2(px->counters.failed_conns), U2H3(px->counters.failed_resp),
+ U2H2(px->counters.failed_conns),
+ U2H3(px->counters.cli_aborts),
+ U2H4(px->counters.srv_aborts),
+ U2H5(px->counters.failed_resp),
px->counters.retries, px->counters.redispatches,
human_time(now.tv_sec - px->last_change, 1),
(px->lbprm.tot_weight > 0 || !px->srv) ? "UP" :
/* requests : req_rate, req_rate_max, req_tot, */
chunk_printf(&msg, ",,,");
+ /* errors: cli_aborts, srv_aborts */
+ chunk_printf(&msg, "%lld,%lld,",
+ px->counters.cli_aborts, px->counters.srv_aborts);
+
/* finish with EOL */
chunk_printf(&msg, "\n");
s->si[0].shutw(&s->si[0]);
stream_int_report_error(&s->si[0]);
if (!(s->req->analysers) && !(s->rep->analysers)) {
+ s->be->counters.cli_aborts++;
+ if (s->srv)
+ s->srv->counters.cli_aborts++;
if (!(s->flags & SN_ERR_MASK))
s->flags |= SN_ERR_CLICL;
if (!(s->flags & SN_FINST_MASK))
if (s->srv)
s->srv->counters.failed_resp++;
if (!(s->req->analysers) && !(s->rep->analysers)) {
+ s->be->counters.srv_aborts++;
+ if (s->srv)
+ s->srv->counters.srv_aborts++;
if (!(s->flags & SN_ERR_MASK))
s->flags |= SN_ERR_SRVCL;
if (!(s->flags & SN_FINST_MASK))
/*
- * Now we propagate unhandled errors to the session
+ * Now we propagate unhandled errors to the session. Normally
+ * we're just in a data phase here since it means we have not
+ * seen any analyser who could set an error status.
*/
if (!(s->flags & SN_ERR_MASK)) {
if (s->req->flags & (BF_READ_ERROR|BF_READ_TIMEOUT|BF_WRITE_ERROR|BF_WRITE_TIMEOUT)) {
/* Report it if the client got an error or a read timeout expired */
s->req->analysers = 0;
- if (s->req->flags & BF_READ_ERROR)
+ if (s->req->flags & BF_READ_ERROR) {
+ s->be->counters.cli_aborts++;
+ if (s->srv)
+ s->srv->counters.cli_aborts++;
s->flags |= SN_ERR_CLICL;
- else if (s->req->flags & BF_READ_TIMEOUT)
+ }
+ else if (s->req->flags & BF_READ_TIMEOUT) {
+ s->be->counters.cli_aborts++;
+ if (s->srv)
+ s->srv->counters.cli_aborts++;
s->flags |= SN_ERR_CLITO;
- else if (s->req->flags & BF_WRITE_ERROR)
+ }
+ else if (s->req->flags & BF_WRITE_ERROR) {
+ s->be->counters.srv_aborts++;
+ if (s->srv)
+ s->srv->counters.srv_aborts++;
s->flags |= SN_ERR_SRVCL;
- else
+ }
+ else {
+ s->be->counters.srv_aborts++;
+ if (s->srv)
+ s->srv->counters.srv_aborts++;
s->flags |= SN_ERR_SRVTO;
+ }
sess_set_term_flags(s);
}
else if (s->rep->flags & (BF_READ_ERROR|BF_READ_TIMEOUT|BF_WRITE_ERROR|BF_WRITE_TIMEOUT)) {
/* Report it if the server got an error or a read timeout expired */
s->rep->analysers = 0;
- if (s->rep->flags & BF_READ_ERROR)
+ if (s->rep->flags & BF_READ_ERROR) {
+ s->be->counters.srv_aborts++;
+ if (s->srv)
+ s->srv->counters.srv_aborts++;
s->flags |= SN_ERR_SRVCL;
- else if (s->rep->flags & BF_READ_TIMEOUT)
+ }
+ else if (s->rep->flags & BF_READ_TIMEOUT) {
+ s->be->counters.srv_aborts++;
+ if (s->srv)
+ s->srv->counters.srv_aborts++;
s->flags |= SN_ERR_SRVTO;
- else if (s->rep->flags & BF_WRITE_ERROR)
+ }
+ else if (s->rep->flags & BF_WRITE_ERROR) {
+ s->be->counters.cli_aborts++;
+ if (s->srv)
+ s->srv->counters.cli_aborts++;
s->flags |= SN_ERR_CLICL;
- else
- s->flags |= SN_ERR_CLITO;
+ }
+ else {
+ s->be->counters.cli_aborts++;
+ if (s->srv)
+ s->srv->counters.cli_aborts++;
+ s->flags |= SN_ERR_CLITO;
+ }
sess_set_term_flags(s);
}
}