@@ -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 ,
@@ -101,6 +108,8 @@ const kError = Symbol('kError');
101108const kLenientAll = HTTPParser . kLenientAll | 0 ;
102109const kLenientNone = HTTPParser . kLenientNone | 0 ;
103110
111+ const HTTP_CLIENT_TRACE_EVENT_NAME = 'http.client.request' ;
112+
104113function validateHost ( host , name ) {
105114 if ( host !== null && host !== undefined && typeof host !== 'string' ) {
106115 throw new ERR_INVALID_ARG_TYPE ( `options.${ name } ` ,
@@ -370,6 +379,10 @@ ClientRequest.prototype._finish = function _finish() {
370379 request : this ,
371380 } ) ;
372381 }
382+ if ( isTraceHTTPEnabled ( ) ) {
383+ this . _traceEventId = getNextTraceEventId ( ) ;
384+ traceBegin ( HTTP_CLIENT_TRACE_EVENT_NAME , this . _traceEventId ) ;
385+ }
373386} ;
374387
375388ClientRequest . prototype . _implicitHeader = function _implicitHeader ( ) {
@@ -653,6 +666,12 @@ function parserOnIncomingClient(res, shouldKeepAlive) {
653666 response : res ,
654667 } ) ;
655668 }
669+ if ( isTraceHTTPEnabled ( ) && typeof req . _traceEventId === 'number' ) {
670+ traceEnd ( HTTP_CLIENT_TRACE_EVENT_NAME , req . _traceEventId , {
671+ path : req . path ,
672+ statusCode : res . statusCode ,
673+ } ) ;
674+ }
656675 req . res = res ;
657676 res . req = req ;
658677
0 commit comments