Skip to content

Commit 5403787

Browse files
committed
Add Go 1.8 TLS tracing support & refactor timing code
To have accurate measurement of TLS and support skipped steps (DNS, TCP and TLS reuse), the timing code has been refactored to use Go 1.8 support for TLS tracing as well as a more descriptive variable namings for steps time. This commit removes support for Go versions lower than 1.8.
1 parent 52f08f1 commit 5403787

File tree

1 file changed

+41
-32
lines changed

1 file changed

+41
-32
lines changed

main.go

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -221,29 +221,30 @@ func dialContext(network string) func(ctx context.Context, network, addr string)
221221
func visit(url *url.URL) {
222222
req := newRequest(httpMethod, url, postBody)
223223

224-
var t0, t1, t2, t3, t4, t5, t6 time.Time
224+
var tStart, tDNSStart, tDNSEnd, tConnectStart, tConnectEnd, tTLSStart, tTLSEnd, tConnected, tTTBF, tDone time.Time
225225

226226
trace := &httptrace.ClientTrace{
227-
DNSStart: func(_ httptrace.DNSStartInfo) { t0 = time.Now() },
228-
DNSDone: func(_ httptrace.DNSDoneInfo) { t1 = time.Now() },
227+
GetConn: func(_ string) { tStart = time.Now() },
228+
DNSStart: func(_ httptrace.DNSStartInfo) { tDNSStart = time.Now() },
229+
DNSDone: func(_ httptrace.DNSDoneInfo) { tDNSEnd = time.Now() },
229230
ConnectStart: func(_, _ string) {
230-
if t1.IsZero() {
231+
if tConnectStart.IsZero() {
231232
// connecting to IP
232-
t1 = time.Now()
233+
tConnectStart = time.Now()
233234
}
234235
},
235236
ConnectDone: func(net, addr string, err error) {
236237
if err != nil {
237238
log.Fatalf("unable to connect to host %v: %v", addr, err)
238239
}
239-
t2 = time.Now()
240+
tConnectEnd = time.Now()
240241

241242
printf("\n%s%s\n", color.GreenString("Connected to "), color.CyanString(addr))
242243
},
243-
GotConn: func(_ httptrace.GotConnInfo) { t3 = time.Now() },
244-
GotFirstResponseByte: func() { t4 = time.Now() },
245-
TLSHandshakeStart: func() { t5 = time.Now() },
246-
TLSHandshakeDone: func(_ tls.ConnectionState, _ error) { t6 = time.Now() },
244+
TLSHandshakeStart: func() { tTLSStart = time.Now() },
245+
TLSHandshakeDone: func(_ tls.ConnectionState, _ error) { tTLSEnd = time.Now() },
246+
GotConn: func(_ httptrace.GotConnInfo) { tConnected = time.Now() },
247+
GotFirstResponseByte: func() { tTTBF = time.Now() },
247248
}
248249
req = req.WithContext(httptrace.WithClientTrace(context.Background(), trace))
249250

@@ -300,10 +301,18 @@ func visit(url *url.URL) {
300301
bodyMsg := readResponseBody(req, resp)
301302
resp.Body.Close()
302303

303-
t7 := time.Now() // after read body
304-
if t0.IsZero() {
305-
// we skipped DNS
306-
t0 = t1
304+
tDone = time.Now() // after read body
305+
if tDNSStart.IsZero() {
306+
tDNSStart = tStart
307+
tDNSEnd = tStart
308+
}
309+
if tConnectStart.IsZero() {
310+
tConnectStart = tStart
311+
tConnectEnd = tStart
312+
}
313+
if tTLSStart.IsZero() {
314+
tTLSStart = tStart
315+
tTLSEnd = tStart
307316
}
308317

309318
// print status line and headers
@@ -341,27 +350,27 @@ func visit(url *url.URL) {
341350
switch url.Scheme {
342351
case "https":
343352
printf(colorize(HTTPSTemplate),
344-
fmta(t1.Sub(t0)), // dns lookup
345-
fmta(t2.Sub(t1)), // tcp connection
346-
fmta(t6.Sub(t5)), // tls handshake
347-
fmta(t4.Sub(t3)), // server processing
348-
fmta(t7.Sub(t4)), // content transfer
349-
fmtb(t1.Sub(t0)), // namelookup
350-
fmtb(t2.Sub(t0)), // connect
351-
fmtb(t3.Sub(t0)), // pretransfer
352-
fmtb(t4.Sub(t0)), // starttransfer
353-
fmtb(t7.Sub(t0)), // total
353+
fmta(tDNSEnd.Sub(tDNSStart)), // dns lookup
354+
fmta(tConnectEnd.Sub(tConnectStart)), // tcp connection
355+
fmta(tTLSEnd.Sub(tTLSStart)), // tls handshake
356+
fmta(tTTBF.Sub(tConnected)), // server processing
357+
fmta(tDone.Sub(tTTBF)), // content transfer
358+
fmtb(tDNSEnd.Sub(tStart)), // namelookup
359+
fmtb(tConnectEnd.Sub(tStart)), // connect
360+
fmtb(tConnected.Sub(tStart)), // pretransfer
361+
fmtb(tTTBF.Sub(tStart)), // starttransfer
362+
fmtb(tDone.Sub(tStart)), // total
354363
)
355364
case "http":
356365
printf(colorize(HTTPTemplate),
357-
fmta(t1.Sub(t0)), // dns lookup
358-
fmta(t3.Sub(t1)), // tcp connection
359-
fmta(t4.Sub(t3)), // server processing
360-
fmta(t7.Sub(t4)), // content transfer
361-
fmtb(t1.Sub(t0)), // namelookup
362-
fmtb(t3.Sub(t0)), // connect
363-
fmtb(t4.Sub(t0)), // starttransfer
364-
fmtb(t7.Sub(t0)), // total
366+
fmta(tDNSEnd.Sub(tDNSStart)), // dns lookup
367+
fmta(tConnectEnd.Sub(tConnectStart)), // tcp connection
368+
fmta(tTTBF.Sub(tConnected)), // server processing
369+
fmta(tDone.Sub(tTTBF)), // content transfer
370+
fmtb(tDNSEnd.Sub(tStart)), // namelookup
371+
fmtb(tConnectEnd.Sub(tStart)), // connect
372+
fmtb(tTTBF.Sub(tStart)), // starttransfer
373+
fmtb(tDone.Sub(tStart)), // total
365374
)
366375
}
367376

0 commit comments

Comments
 (0)