@@ -202,27 +202,30 @@ func headerKeyValue(h string) (string, string) {
202
202
func visit (url * url.URL ) {
203
203
req := newRequest (httpMethod , url , postBody )
204
204
205
- var t0 , t1 , t2 , t3 , t4 time.Time
205
+ var tStart , tDNSStart , tDNSEnd , tConnectStart , tConnectEnd , tTLSStart , tTLSEnd , tConnected , tTTBF , tDone time.Time
206
206
207
207
trace := & httptrace.ClientTrace {
208
- DNSStart : func (_ httptrace.DNSStartInfo ) { t0 = time .Now () },
209
- DNSDone : func (_ httptrace.DNSDoneInfo ) { t1 = time .Now () },
208
+ GetConn : func (_ string ) { tStart = time .Now () },
209
+ DNSStart : func (_ httptrace.DNSStartInfo ) { tDNSStart = time .Now () },
210
+ DNSDone : func (_ httptrace.DNSDoneInfo ) { tDNSEnd = time .Now () },
210
211
ConnectStart : func (_ , _ string ) {
211
- if t1 .IsZero () {
212
+ if tConnectStart .IsZero () {
212
213
// connecting to IP
213
- t1 = time .Now ()
214
+ tConnectStart = time .Now ()
214
215
}
215
216
},
216
217
ConnectDone : func (net , addr string , err error ) {
217
218
if err != nil {
218
219
log .Fatalf ("unable to connect to host %v: %v" , addr , err )
219
220
}
220
- t2 = time .Now ()
221
+ tConnectEnd = time .Now ()
221
222
222
223
printf ("\n %s%s\n " , color .GreenString ("Connected to " ), color .CyanString (addr ))
223
224
},
224
- GotConn : func (_ httptrace.GotConnInfo ) { t3 = time .Now () },
225
- GotFirstResponseByte : func () { t4 = time .Now () },
225
+ TLSHandshakeStart : func () { tTLSStart = time .Now () },
226
+ TLSHandshakeDone : func (_ tls.ConnectionState , _ error ) { tTLSEnd = time .Now () },
227
+ GotConn : func (_ httptrace.GotConnInfo ) { tConnected = time .Now () },
228
+ GotFirstResponseByte : func () { tTTBF = time .Now () },
226
229
}
227
230
req = req .WithContext (httptrace .WithClientTrace (context .Background (), trace ))
228
231
@@ -272,10 +275,18 @@ func visit(url *url.URL) {
272
275
bodyMsg := readResponseBody (req , resp )
273
276
resp .Body .Close ()
274
277
275
- t5 := time .Now () // after read body
276
- if t0 .IsZero () {
277
- // we skipped DNS
278
- t0 = t1
278
+ tDone = time .Now () // after read body
279
+ if tDNSStart .IsZero () {
280
+ tDNSStart = tStart
281
+ tDNSEnd = tStart
282
+ }
283
+ if tConnectStart .IsZero () {
284
+ tConnectStart = tStart
285
+ tConnectEnd = tStart
286
+ }
287
+ if tTLSStart .IsZero () {
288
+ tTLSStart = tStart
289
+ tTLSEnd = tStart
279
290
}
280
291
281
292
// print status line and headers
@@ -313,27 +324,27 @@ func visit(url *url.URL) {
313
324
switch url .Scheme {
314
325
case "https" :
315
326
printf (colorize (HTTPSTemplate ),
316
- fmta (t1 .Sub (t0 )), // dns lookup
317
- fmta (t2 .Sub (t1 )), // tcp connection
318
- fmta (t3 .Sub (t2 )), // tls handshake
319
- fmta (t4 .Sub (t3 )), // server processing
320
- fmta (t5 .Sub (t4 )), // content transfer
321
- fmtb (t1 .Sub (t0 )), // namelookup
322
- fmtb (t2 .Sub (t0 )), // connect
323
- fmtb (t3 .Sub (t0 )), // pretransfer
324
- fmtb (t4 .Sub (t0 )), // starttransfer
325
- fmtb (t5 .Sub (t0 )), // total
327
+ fmta (tDNSEnd .Sub (tDNSStart )), // dns lookup
328
+ fmta (tConnectEnd .Sub (tConnectStart )), // tcp connection
329
+ fmta (tTLSEnd .Sub (tTLSStart )), // tls handshake
330
+ fmta (tTTBF .Sub (tConnected )), // server processing
331
+ fmta (tDone .Sub (tTTBF )), // content transfer
332
+ fmtb (tDNSEnd .Sub (tStart )), // namelookup
333
+ fmtb (tConnectEnd .Sub (tStart )), // connect
334
+ fmtb (tConnected .Sub (tStart )), // pretransfer
335
+ fmtb (tTTBF .Sub (tStart )), // starttransfer
336
+ fmtb (tDone .Sub (tStart )), // total
326
337
)
327
338
case "http" :
328
339
printf (colorize (HTTPTemplate ),
329
- fmta (t1 .Sub (t0 )), // dns lookup
330
- fmta (t3 .Sub (t1 )), // tcp connection
331
- fmta (t4 .Sub (t3 )), // server processing
332
- fmta (t5 .Sub (t4 )), // content transfer
333
- fmtb (t1 .Sub (t0 )), // namelookup
334
- fmtb (t3 .Sub (t0 )), // connect
335
- fmtb (t4 .Sub (t0 )), // starttransfer
336
- fmtb (t5 .Sub (t0 )), // total
340
+ fmta (tDNSEnd .Sub (tDNSStart )), // dns lookup
341
+ fmta (tConnectEnd .Sub (tConnectStart )), // tcp connection
342
+ fmta (tTTBF .Sub (tConnected )), // server processing
343
+ fmta (tDone .Sub (tTTBF )), // content transfer
344
+ fmtb (tDNSEnd .Sub (tStart )), // namelookup
345
+ fmtb (tConnectEnd .Sub (tStart )), // connect
346
+ fmtb (tTTBF .Sub (tStart )), // starttransfer
347
+ fmtb (tDone .Sub (tStart )), // total
337
348
)
338
349
}
339
350
0 commit comments