You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rj...@apache.org on 2018/08/07 10:48:05 UTC

svn commit: r1837590 - in /httpd/httpd/trunk: CHANGES include/ap_mmn.h include/scoreboard.h modules/generators/mod_status.c server/scoreboard.c

Author: rjung
Date: Tue Aug  7 10:48:05 2018
New Revision: 1837590

URL: http://svn.apache.org/viewvc?rev=1837590&view=rev
Log:
mod_status: Add cumulated response duration time
in milliseconds.

Modified:
    httpd/httpd/trunk/CHANGES
    httpd/httpd/trunk/include/ap_mmn.h
    httpd/httpd/trunk/include/scoreboard.h
    httpd/httpd/trunk/modules/generators/mod_status.c
    httpd/httpd/trunk/server/scoreboard.c

Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1837590&r1=1837589&r2=1837590&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Tue Aug  7 10:48:05 2018
@@ -1,6 +1,9 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.1
 
+  *) mod_status: Add cumulated response duration time in milliseconds.
+     [Rainer Jung]
+
   *) mod_status: Complete the data shown for async MPMs in "auto" mode.
      Added number of processes, number of stopping processes and number
      of busy and idle workers.  [Rainer Jung]

Modified: httpd/httpd/trunk/include/ap_mmn.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/include/ap_mmn.h?rev=1837590&r1=1837589&r2=1837590&view=diff
==============================================================================
--- httpd/httpd/trunk/include/ap_mmn.h (original)
+++ httpd/httpd/trunk/include/ap_mmn.h Tue Aug  7 10:48:05 2018
@@ -589,6 +589,8 @@
  * 20180720.2 (2.5.1-dev)  Add optional function declaration for
  *                         ap_proxy_balancer_get_best_worker to mod_proxy.h.
  * 20180720.3 (2.5.1-dev)  Add client64 to worker_share
+ * 20180720.4 (2.5.1-dev)  Add new duration field to worker_score struct in
+ *                         scoreboard.h
  *
  */
 
@@ -597,7 +599,7 @@
 #ifndef MODULE_MAGIC_NUMBER_MAJOR
 #define MODULE_MAGIC_NUMBER_MAJOR 20180720
 #endif
-#define MODULE_MAGIC_NUMBER_MINOR 3                 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 4                 /* 0...n */
 
 /**
  * Determine if the server's current MODULE_MAGIC_NUMBER is at least a

Modified: httpd/httpd/trunk/include/scoreboard.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/include/scoreboard.h?rev=1837590&r1=1837589&r2=1837590&view=diff
==============================================================================
--- httpd/httpd/trunk/include/scoreboard.h (original)
+++ httpd/httpd/trunk/include/scoreboard.h Tue Aug  7 10:48:05 2018
@@ -117,6 +117,7 @@ struct worker_score {
     char vhost[32];             /* What virtual host is being accessed? */
     char protocol[16];          /* What protocol is used on the connection? */
     char client64[64];
+    apr_time_t duration;
 };
 
 typedef struct {

Modified: httpd/httpd/trunk/modules/generators/mod_status.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/generators/mod_status.c?rev=1837590&r1=1837589&r2=1837590&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/generators/mod_status.c (original)
+++ httpd/httpd/trunk/modules/generators/mod_status.c Tue Aug  7 10:48:05 2018
@@ -193,6 +193,8 @@ static int status_handler(request_rec *r
     apr_off_t bytes, my_bytes, conn_bytes;
     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;
     worker_score *ws_record;
@@ -232,6 +234,7 @@ static int status_handler(request_rec *r
     count = 0;
     bcount = 0;
     kbcount = 0;
+    duration_global = 0;
     short_report = 0;
     no_table_report = 0;
 
@@ -374,6 +377,7 @@ static int status_handler(request_rec *r
 
                     count += lres;
                     bcount += bytes;
+                    duration_global += ws_record->duration;
 
                     if (bcount >= KBYTE) {
                         kbcount += (bcount >> 10);
@@ -461,8 +465,9 @@ static int status_handler(request_rec *r
     if (ap_extended_status) {
         if (short_report) {
             ap_rprintf(r, "Total Accesses: %lu\nTotal kBytes: %"
-                       APR_OFF_T_FMT "\n",
-                       count, kbcount);
+                       APR_OFF_T_FMT "\nTotal Duration: %"
+                       APR_TIME_T_FMT "\n",
+                       count, kbcount, duration_global / 1000);
 
 #ifdef HAVE_TIMES
             /* Allow for OS/2 not having CPU stats */
@@ -482,14 +487,17 @@ static int status_handler(request_rec *r
                 ap_rprintf(r, "BytesPerSec: %g\n",
                            KBYTE * (float) kbcount / (float) up_time);
             }
-            if (count > 0)
+            if (count > 0) {
                 ap_rprintf(r, "BytesPerReq: %g\n",
                            KBYTE * (float) kbcount / (float) count);
+                ap_rprintf(r, "DurationPerReq: %g\n",
+                           (float) duration_global / (float) count / 1000.);
+            }
         }
         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 */
@@ -507,13 +515,15 @@ static int status_handler(request_rec *r
 
                 format_byte_out(r, (unsigned long)(KBYTE * (float) kbcount
                                                    / (float) up_time));
-                ap_rputs("/second - ", r);
+                ap_rputs("/second", r);
             }
 
             if (count > 0) {
+                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);
@@ -691,7 +701,7 @@ static int status_handler(request_rec *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);
@@ -723,6 +733,7 @@ static int status_handler(request_rec *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;
@@ -789,7 +800,7 @@ static int status_handler(request_rec *r
 #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,
@@ -798,7 +809,8 @@ static int status_handler(request_rec *r
 #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);
@@ -878,7 +890,7 @@ static int status_handler(request_rec *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 +
@@ -887,7 +899,8 @@ static int status_handler(request_rec *r
 #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,
@@ -923,6 +936,7 @@ static int status_handler(request_rec *r
 
 "<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 \

Modified: httpd/httpd/trunk/server/scoreboard.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/scoreboard.c?rev=1837590&r1=1837589&r2=1837590&view=diff
==============================================================================
--- httpd/httpd/trunk/server/scoreboard.c (original)
+++ httpd/httpd/trunk/server/scoreboard.c Tue Aug  7 10:48:05 2018
@@ -641,6 +641,9 @@ AP_DECLARE(void) ap_time_process_request
     }
     else if (status == STOP_PREQUEST) {
         ws->stop_time = ws->last_used = apr_time_now();
+        if (ap_extended_status) {
+            ws->duration += ws->stop_time - ws->start_time;
+        }
     }
 }
 



Re: svn commit: r1837590 - in /httpd/httpd/trunk: CHANGES include/ap_mmn.h include/scoreboard.h modules/generators/mod_status.c server/scoreboard.c

Posted by Rainer Jung <ra...@kippdata.de>.
Am 31.08.2018 um 14:50 schrieb Ruediger Pluem:
> 
> 
> On 08/07/2018 12:48 PM, rjung@apache.org wrote:
>> Author: rjung
>> Date: Tue Aug  7 10:48:05 2018
>> New Revision: 1837590
>>
>> URL: http://svn.apache.org/viewvc?rev=1837590&view=rev
>> Log:
>> mod_status: Add cumulated response duration time
>> in milliseconds.
>>
>> Modified:
>>      httpd/httpd/trunk/CHANGES
>>      httpd/httpd/trunk/include/ap_mmn.h
>>      httpd/httpd/trunk/include/scoreboard.h
>>      httpd/httpd/trunk/modules/generators/mod_status.c
>>      httpd/httpd/trunk/server/scoreboard.c
>>
> view=diff
>> ==============================================================================
>> --- httpd/httpd/trunk/modules/generators/mod_status.c (original)
>> +++ httpd/httpd/trunk/modules/generators/mod_status.c Tue Aug  7 10:48:05 2018
> 
>> @@ -461,8 +465,9 @@ static int status_handler(request_rec *r
>>       if (ap_extended_status) {
>>           if (short_report) {
>>               ap_rprintf(r, "Total Accesses: %lu\nTotal kBytes: %"
>> -                       APR_OFF_T_FMT "\n",
>> -                       count, kbcount);
>> +                       APR_OFF_T_FMT "\nTotal Duration: %"
>> +                       APR_TIME_T_FMT "\n",
>> +                       count, kbcount, duration_global / 1000);
> 
> Is it a good idea to use the literal 1000 here or shouldn't we better use the respective APR macros for converting from
> microseconds?

Good point, will do, thanks for the review.

Rainer

Re: svn commit: r1837590 - in /httpd/httpd/trunk: CHANGES include/ap_mmn.h include/scoreboard.h modules/generators/mod_status.c server/scoreboard.c

Posted by Ruediger Pluem <rp...@apache.org>.

On 08/07/2018 12:48 PM, rjung@apache.org wrote:
> Author: rjung
> Date: Tue Aug  7 10:48:05 2018
> New Revision: 1837590
> 
> URL: http://svn.apache.org/viewvc?rev=1837590&view=rev
> Log:
> mod_status: Add cumulated response duration time
> in milliseconds.
> 
> Modified:
>     httpd/httpd/trunk/CHANGES
>     httpd/httpd/trunk/include/ap_mmn.h
>     httpd/httpd/trunk/include/scoreboard.h
>     httpd/httpd/trunk/modules/generators/mod_status.c
>     httpd/httpd/trunk/server/scoreboard.c
> 
view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/generators/mod_status.c (original)
> +++ httpd/httpd/trunk/modules/generators/mod_status.c Tue Aug  7 10:48:05 2018

> @@ -461,8 +465,9 @@ static int status_handler(request_rec *r
>      if (ap_extended_status) {
>          if (short_report) {
>              ap_rprintf(r, "Total Accesses: %lu\nTotal kBytes: %"
> -                       APR_OFF_T_FMT "\n",
> -                       count, kbcount);
> +                       APR_OFF_T_FMT "\nTotal Duration: %"
> +                       APR_TIME_T_FMT "\n",
> +                       count, kbcount, duration_global / 1000);

Is it a good idea to use the literal 1000 here or shouldn't we better use the respective APR macros for converting from
microseconds?

Regards

RĂ¼diger