Sets up project structure, working conventions (CLAUDE.md), README with the full assignment and roadmap, seeded CHANGELOG, and a buildable Go scaffold (Step 0) with flag parsing and stub probe types. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
35 lines
1016 B
Go
35 lines
1016 B
Go
// Package probe measures per-phase HTTP request latency.
|
|
package probe
|
|
|
|
import "time"
|
|
|
|
// Phase holds the measured duration of a single request phase.
|
|
// A zero Duration means the phase did not occur (e.g. TLS on plain HTTP).
|
|
type Phase struct {
|
|
Duration time.Duration
|
|
// Present is false when the phase was skipped (e.g. no TLS for http://).
|
|
Present bool
|
|
}
|
|
|
|
// Result holds all timing phases for a single HTTP request.
|
|
type Result struct {
|
|
URL string
|
|
DNS Phase
|
|
Connect Phase
|
|
TLS Phase
|
|
TTFB Phase // server processing: WroteRequest → GotFirstResponseByte
|
|
Transfer Phase // body read: GotFirstResponseByte → body closed
|
|
Total Phase
|
|
|
|
// StatusCode is the HTTP response status code (0 on error).
|
|
StatusCode int
|
|
// Err is non-nil if the request failed.
|
|
Err error
|
|
}
|
|
|
|
// Measure performs an HTTP GET request to url and returns a populated Result.
|
|
// It is a placeholder until Step 1 wires in the actual implementation.
|
|
func Measure(url string) Result {
|
|
return Result{URL: url}
|
|
}
|