Instruments HTTP requests with net/http/httptrace.ClientTrace to capture timestamps for DNS, TCP connect, TLS handshake, TTFB, and body transfer. TLS row is omitted automatically for plain http:// URLs. Output is an aligned text table with a separator before the Total row. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.2 KiB
2.2 KiB
Step 2 — Per-Phase Breakdown
What this step delivers
latprobe now shows a full breakdown of every phase of an HTTP request:
| Phase | What it measures |
|---|---|
| DNS lookup | Time to resolve the hostname (DNSStart → DNSDone) |
| TCP connect | Time to establish the TCP connection (ConnectStart → ConnectDone) |
| TLS handshake | Time to complete TLS negotiation — HTTPS only (TLSHandshakeStart → TLSHandshakeDone) |
| Server (TTFB) | Time from request sent to first response byte (WroteRequest → GotFirstResponseByte) |
| Transfer | Time to download the response body (GotFirstResponseByte → body closed) |
| Total | Wall-clock time for the entire request |
The TLS row is omitted automatically for plain http:// URLs.
Implemented via net/http/httptrace.ClientTrace — stdlib only, no external dependencies.
Build
cd go
go build -o latprobe .
Usage
latprobe <url> [url ...]
Examples
HTTPS (all phases present)
$ ./latprobe https://example.com
https://example.com (200)
DNS lookup : 18.21 ms
TCP connect : 10.12 ms
TLS handshake : 36.11 ms
Server (TTFB) : 21.95 ms
Transfer : 0.18 ms
─────────────────────────────
Total : 88.00 ms
HTTP (TLS row omitted)
$ ./latprobe http://example.com
http://example.com (200)
DNS lookup : 1.64 ms
TCP connect : 9.29 ms
Server (TTFB) : 17.96 ms
Transfer : 0.07 ms
─────────────────────────────
Total : 29.56 ms
Multiple URLs
$ ./latprobe https://example.com https://www.google.com
https://example.com (200)
DNS lookup : 18.21 ms
...
https://www.google.com (200)
DNS lookup : 7.15 ms
...
Notes
- DNS absent on repeat connections: when the OS has cached the DNS result, the DNS phase may be very short or absent. This is expected.
- Phases don't always sum exactly to Total: the trace hooks introduce negligible overhead between events; the difference is typically < 1 ms.