@@ -202,27 +202,30 @@ func headerKeyValue(h string) (string, string) {
202202func visit (url * url.URL ) {
203203 req := newRequest (httpMethod , url , postBody )
204204
205- var t0 , t1 , t2 , t3 , t4 time.Time
205+ var tStart , tDNSStart , tDNSEnd , tConnectStart , tConnectEnd , tTLSStart , tTLSEnd , tConnected , tTTBF , tDone time.Time
206206
207207 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 () },
210211 ConnectStart : func (_ , _ string ) {
211- if t1 .IsZero () {
212+ if tConnectStart .IsZero () {
212213 // connecting to IP
213- t1 = time .Now ()
214+ tConnectStart = time .Now ()
214215 }
215216 },
216217 ConnectDone : func (net , addr string , err error ) {
217218 if err != nil {
218219 log .Fatalf ("unable to connect to host %v: %v" , addr , err )
219220 }
220- t2 = time .Now ()
221+ tConnectEnd = time .Now ()
221222
222223 printf ("\n %s%s\n " , color .GreenString ("Connected to " ), color .CyanString (addr ))
223224 },
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 () },
226229 }
227230 req = req .WithContext (httptrace .WithClientTrace (context .Background (), trace ))
228231
@@ -272,10 +275,18 @@ func visit(url *url.URL) {
272275 bodyMsg := readResponseBody (req , resp )
273276 resp .Body .Close ()
274277
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
279290 }
280291
281292 // print status line and headers
@@ -313,27 +324,27 @@ func visit(url *url.URL) {
313324 switch url .Scheme {
314325 case "https" :
315326 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
326337 )
327338 case "http" :
328339 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
337348 )
338349 }
339350
0 commit comments