From: Stefan Eissing Date: Tue, 3 Jun 2025 08:02:35 +0000 (+0000) Subject: Merge /httpd/httpd/trunk:r1923754 X-Git-Tag: 2.4.64-rc1-candidate~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1caed4ed9f235b5d95b27139c0b9048152c6e071;p=thirdparty%2Fapache%2Fhttpd.git Merge /httpd/httpd/trunk:r1923754 *) scoreboard/mod_http2: record durations of HTTP/2 requests. PR 69579 [Pierre Brochard ] git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1926080 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/changes-entries/pr69579.txt b/changes-entries/pr69579.txt new file mode 100644 index 0000000000..0b91a0da74 --- /dev/null +++ b/changes-entries/pr69579.txt @@ -0,0 +1,2 @@ + *) scoreboard/mod_http2: record durations of HTTP/2 requests. + PR 69579 [Pierre Brochard ] diff --git a/include/ap_mmn.h b/include/ap_mmn.h index 9bc1d6b116..8313cb29d3 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -609,6 +609,7 @@ * 20120211.137 (2.4.63-dev) Add AP_MPMQ_CAN_WAITIO * 20120211.138 (2.4.63-dev) Add is_host_matchable to proxy_worker_shared * 20120211.139 (2.4.63-dev) Add dav_get_base_path() to mod_dav + * 20211221.140 (2.4.64-dev) Add ap_set_time_process_request() to scoreboard.h */ #define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */ @@ -616,7 +617,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 20120211 #endif -#define MODULE_MAGIC_NUMBER_MINOR 139 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 140 /* 0...n */ /** * Determine if the server's current MODULE_MAGIC_NUMBER is at least a diff --git a/include/scoreboard.h b/include/scoreboard.h index 4af9132031..736b44384d 100644 --- a/include/scoreboard.h +++ b/include/scoreboard.h @@ -198,7 +198,9 @@ AP_DECLARE(int) ap_update_child_status_from_server(ap_sb_handle_t *sbh, int stat AP_DECLARE(int) ap_update_child_status_descr(ap_sb_handle_t *sbh, int status, const char *descr); AP_DECLARE(void) ap_time_process_request(ap_sb_handle_t *sbh, int status); - +AP_DECLARE(void) ap_set_time_process_request(ap_sb_handle_t* const sbh, + const apr_time_t timebeg,const apr_time_t timeend); + AP_DECLARE(int) ap_update_global_status(void); AP_DECLARE(worker_score *) ap_get_scoreboard_worker(ap_sb_handle_t *sbh); diff --git a/modules/http2/h2_mplx.c b/modules/http2/h2_mplx.c index b5153082b5..62239a9889 100644 --- a/modules/http2/h2_mplx.c +++ b/modules/http2/h2_mplx.c @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -974,7 +975,9 @@ static void s_c2_done(h2_mplx *m, conn_rec *c2, h2_conn_ctx_t *conn_ctx) /* From here on, the final handling of c2 is done by c1 processing. * Which means we can give it c1's scoreboard handle for updates. */ c2->sbh = m->c1->sbh; - +#if AP_MODULE_MAGIC_AT_LEAST(20211221, 29) + ap_set_time_process_request(c2->sbh,conn_ctx->started_at,conn_ctx->done_at); +#endif ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c2, "h2_mplx(%s-%d): request done, %f ms elapsed", conn_ctx->id, conn_ctx->stream_id, diff --git a/server/scoreboard.c b/server/scoreboard.c index 49d1600ca7..ec18281b21 100644 --- a/server/scoreboard.c +++ b/server/scoreboard.c @@ -653,6 +653,22 @@ AP_DECLARE(void) ap_time_process_request(ap_sb_handle_t *sbh, int status) } } +AP_DECLARE(void) ap_set_time_process_request(ap_sb_handle_t* const sbh, + const apr_time_t timebeg,const apr_time_t timeend) +{ + if (!sbh || sbh->child_num < 0) + return; + + worker_score* const ws = + &ap_scoreboard_image->servers[sbh->child_num][sbh->thread_num]; + + ws->start_time = timebeg; + ws->stop_time = ws->last_used = timeend; + + if (ap_extended_status) + ws->duration += timeend - timebeg; +} + AP_DECLARE(int) ap_update_global_status(void) { #ifdef HAVE_TIMES