@@ -57,7 +57,7 @@ const Agent = require('_http_agent');
5757const { Buffer } = require ( 'buffer' ) ;
5858const { defaultTriggerAsyncIdScope } = require ( 'internal/async_hooks' ) ;
5959const { URL , urlToHttpOptions, searchParamsSymbol } = require ( 'internal/url' ) ;
60- const { kOutHeaders, kNeedDrain } = require ( 'internal/http' ) ;
60+ const { kOutHeaders, kNeedDrain, emitStatistics } = require ( 'internal/http' ) ;
6161const { connResetException, codes } = require ( 'internal/errors' ) ;
6262const {
6363 ERR_HTTP_HEADERS_SENT ,
@@ -75,6 +75,12 @@ const {
7575 DTRACE_HTTP_CLIENT_RESPONSE
7676} = require ( 'internal/dtrace' ) ;
7777
78+ const {
79+ hasObserver,
80+ } = require ( 'internal/perf/observe' ) ;
81+
82+ const kClientRequestStatistics = Symbol ( 'ClientRequestStatistics' ) ;
83+
7884const { addAbortSignal, finished } = require ( 'stream' ) ;
7985
8086let debug = require ( 'internal/util/debuglog' ) . debuglog ( 'http' , ( fn ) => {
@@ -337,6 +343,12 @@ ObjectSetPrototypeOf(ClientRequest, OutgoingMessage);
337343ClientRequest . prototype . _finish = function _finish ( ) {
338344 DTRACE_HTTP_CLIENT_REQUEST ( this , this . socket ) ;
339345 FunctionPrototypeCall ( OutgoingMessage . prototype . _finish , this ) ;
346+ if ( hasObserver ( 'http' ) ) {
347+ this [ kClientRequestStatistics ] = {
348+ startTime : process . hrtime ( ) ,
349+ type : 'HttpClient' ,
350+ } ;
351+ }
340352} ;
341353
342354ClientRequest . prototype . _implicitHeader = function _implicitHeader ( ) {
@@ -604,6 +616,7 @@ function parserOnIncomingClient(res, shouldKeepAlive) {
604616 }
605617
606618 DTRACE_HTTP_CLIENT_RESPONSE ( socket , req ) ;
619+ emitStatistics ( req [ kClientRequestStatistics ] ) ;
607620 req . res = res ;
608621 res . req = req ;
609622
0 commit comments