@@ -87,6 +87,18 @@ export function initDiagnosticsChannel(): void {
8787 if ( initedDiagnosticsChannel ) return ;
8888 initedDiagnosticsChannel = true ;
8989
90+ // capture DNS lookup time on socket via net.client.socket diagnostics channel
91+ // this channel fires when a new TCP/IPC connection is initiated, giving us
92+ // access to the socket before the 'lookup' event fires
93+ subscribe ( 'net.client.socket' , ( message : unknown ) => {
94+ const socket = ( message as { socket : SocketExtend } ) . socket ;
95+ if ( socket ) {
96+ socket . once ( 'lookup' , ( ) => {
97+ socket [ symbols . kSocketDnsLookupTime ] = performance . now ( ) ;
98+ } ) ;
99+ }
100+ } ) ;
101+
90102 let kHandler : symbol ;
91103 // This message is published when a new outgoing request is created.
92104 // Note: a request is only loosely completed to a given socket.
@@ -201,6 +213,13 @@ export function initDiagnosticsChannel(): void {
201213 opaque [ symbols . kRequestStartTime ] ,
202214 socket [ symbols . kSocketStartTime ] as number ,
203215 ) ;
216+ // kSocketDnsLookupTime - kRequestStartTime = dns lookup time
217+ if ( socket [ symbols . kSocketDnsLookupTime ] !== undefined ) {
218+ opaque [ symbols . kRequestTiming ] . dnslookup = performanceTime (
219+ opaque [ symbols . kRequestStartTime ] ,
220+ socket [ symbols . kSocketDnsLookupTime ] as number ,
221+ ) ;
222+ }
204223 }
205224 } ) ;
206225
0 commit comments