@@ -64,7 +64,14 @@ const Agent = require('_http_agent');
6464const { Buffer } = require ( 'buffer' ) ;
6565const { defaultTriggerAsyncIdScope } = require ( 'internal/async_hooks' ) ;
6666const { URL , urlToHttpOptions, searchParamsSymbol } = require ( 'internal/url' ) ;
67- const { kOutHeaders, kNeedDrain } = require ( 'internal/http' ) ;
67+ const {
68+ kOutHeaders,
69+ kNeedDrain,
70+ isTraceHTTPEnabled,
71+ traceBegin,
72+ traceEnd,
73+ getNextTraceEventId,
74+ } = require ( 'internal/http' ) ;
6875const { connResetException, codes } = require ( 'internal/errors' ) ;
6976const {
7077 ERR_HTTP_HEADERS_SENT ,
@@ -106,6 +113,8 @@ const kError = Symbol('kError');
106113const kLenientAll = HTTPParser . kLenientAll | 0 ;
107114const kLenientNone = HTTPParser . kLenientNone | 0 ;
108115
116+ const HTTP_CLIENT_TRACE_EVENT_NAME = 'http.client.request' ;
117+
109118function validateHost ( host , name ) {
110119 if ( host !== null && host !== undefined && typeof host !== 'string' ) {
111120 throw new ERR_INVALID_ARG_TYPE ( `options.${ name } ` ,
@@ -376,6 +385,10 @@ ClientRequest.prototype._finish = function _finish() {
376385 request : this ,
377386 } ) ;
378387 }
388+ if ( isTraceHTTPEnabled ( ) ) {
389+ this . _traceEventId = getNextTraceEventId ( ) ;
390+ traceBegin ( HTTP_CLIENT_TRACE_EVENT_NAME , this . _traceEventId ) ;
391+ }
379392} ;
380393
381394ClientRequest . prototype . _implicitHeader = function _implicitHeader ( ) {
@@ -660,6 +673,12 @@ function parserOnIncomingClient(res, shouldKeepAlive) {
660673 response : res ,
661674 } ) ;
662675 }
676+ if ( isTraceHTTPEnabled ( ) && typeof req . _traceEventId === 'number' ) {
677+ traceEnd ( HTTP_CLIENT_TRACE_EVENT_NAME , req . _traceEventId , {
678+ path : req . path ,
679+ statusCode : res . statusCode ,
680+ } ) ;
681+ }
663682 req . res = res ;
664683 res . req = req ;
665684
0 commit comments