Documentation ¶
Overview ¶
Package httpstat traces HTTP latency infomation (DNSLookup, TCP Connection and so on) on any golang HTTP request. It uses `httptrace` package. Just create `go-httpstat` powered `context.Context` and give it your `http.Request` (no big code modification is required).
Example ¶
req, err := http.NewRequest("GET", "http://deeeet.com", nil) if err != nil { log.Fatal(err) } // Create go-httpstat powered context and pass it to http.Request var result httpstat.Result ctx := httpstat.WithHTTPStat(req.Context(), &result) req = req.WithContext(ctx) client := http.DefaultClient res, err := client.Do(req) if err != nil { log.Fatal(err) } if _, err := io.Copy(ioutil.Discard, res.Body); err != nil { log.Fatal(err) } res.Body.Close() // Show results end := time.Now().UTC() durations := result.GetDurations(end) log.Printf("%+v", durations)
Output:
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Result ¶
type Result struct { // The following are duration for each phase DNSLookup time.Duration TCPConnection time.Duration TLSHandshake time.Duration ServerProcessing time.Duration // The followings are timeline of request NameLookup time.Duration Connect time.Duration Pretransfer time.Duration StartTransfer time.Duration // contains filtered or unexported fields }
Result stores httpstat info.
func (*Result) ContentTransfer ¶
ContentTransfer returns the duration of content transfer time. It is from first response byte to the given time. The time must be time after read body (go-httpstat can not detect that time).
func (*Result) End ¶ added in v0.2.0
End sets the time when reading response is done. This must be called after reading response body.
func (*Result) GetDurations ¶ added in v0.2.1
GetDurations return all durations Set ContentTransfer and Total time with end time provided (must be UTC)