2.4.x patch: https://home.apache.org/~jim/patches/response-204-304.patch
+1: jim, ylavic
- *) mod_status: Add cumulated response duration time
- in milliseconds to html mode. The auto mode part
- has already been backported.
- This changes the HTML output format for the server-status
- but adds the very useful request duration metric.
- trunk: http://svn.apache.org/r1837590 (remaining parts)
- 2.4.x patch: https://home.apache.org/~rjung/patches/httpd-2.4.x-server-status-html-duration-r1837590-part2.patch
- +1: rjung, jim, ylavic
-
*) MPMs: Initialize all runtime/asynchronous objects on a dedicated pool and
before signals handling to avoid lifetime issues on restart or shutdown.
PR 62658.
apr_off_t bcount, kbcount;
long req_time;
apr_time_t duration_global;
+ apr_time_t duration_slot;
int short_report;
int no_table_report;
global_score *global_record;
else { /* !short_report */
ap_rprintf(r, "<dt>Total accesses: %lu - Total Traffic: ", count);
format_kbyte_out(r, kbcount);
- ap_rputs("</dt>\n", r);
+ ap_rprintf(r, " - Total Duration: %" APR_TIME_T_FMT "</dt>\n", duration_global / 1000);
#ifdef HAVE_TIMES
/* Allow for OS/2 not having CPU stats */
ap_rputs(" - ", r);
format_byte_out(r, (unsigned long)(KBYTE * (float) kbcount
/ (float) count));
- ap_rputs("/request", r);
+ ap_rprintf(r, "/request - %g ms/request",
+ (float) duration_global / (float) count / 1000.);
}
ap_rputs("</dt>\n", r);
#ifdef HAVE_TIMES
"<th>CPU\n</th>"
#endif
- "<th>SS</th><th>Req</th>"
+ "<th>SS</th><th>Req</th><th>Dur</th>"
"<th>Conn</th><th>Child</th><th>Slot</th>"
"<th>Client</th><th>Protocol</th><th>VHost</th>"
"<th>Request</th></tr>\n\n", r);
bytes = ws_record->bytes_served;
my_bytes = ws_record->my_bytes_served;
conn_bytes = ws_record->conn_bytes;
+ duration_slot = ws_record->duration;
if (ws_record->pid) { /* MPM sets per-worker pid and generation */
worker_pid = ws_record->pid;
worker_generation = ws_record->generation;
#ifdef HAVE_TIMES
"u%g s%g cu%g cs%g"
#endif
- "\n %ld %ld (",
+ "\n %ld %ld %" APR_TIME_T_FMT "(",
#ifdef HAVE_TIMES
ws_record->times.tms_utime / tick,
ws_record->times.tms_stime / tick,
#endif
(long)apr_time_sec(nowtime -
ws_record->last_used),
- (long) req_time);
+ (long) req_time,
+ duration_slot / 1000);
format_byte_out(r, conn_bytes);
ap_rputs("|", r);
#ifdef HAVE_TIMES
"<td>%.2f</td>"
#endif
- "<td>%ld</td><td>%ld",
+ "<td>%ld</td><td>%ld</td><td>%" APR_TIME_T_FMT,
#ifdef HAVE_TIMES
(ws_record->times.tms_utime +
ws_record->times.tms_stime +
#endif
(long)apr_time_sec(nowtime -
ws_record->last_used),
- (long)req_time);
+ (long)req_time,
+ duration_slot / 1000);
ap_rprintf(r, "</td><td>%-1.1f</td><td>%-2.2f</td><td>%-2.2f\n",
(float)conn_bytes / KBYTE, (float) my_bytes / MBYTE,
"<tr><th>SS</th><td>Seconds since beginning of most recent request</td></tr>\n \
<tr><th>Req</th><td>Milliseconds required to process most recent request</td></tr>\n \
+<tr><th>Dur</th><td>Sum of milliseconds required to process all requests</td></tr>\n \
<tr><th>Conn</th><td>Kilobytes transferred this connection</td></tr>\n \
<tr><th>Child</th><td>Megabytes transferred this child</td></tr>\n \
<tr><th>Slot</th><td>Total megabytes transferred this slot</td></tr>\n \