From 08628978d4642a83ee8aec2176751011d0e852a3 Mon Sep 17 00:00:00 2001 From: goreadme Date: Fri, 13 Mar 2020 18:47:57 +0000 Subject: [PATCH] Update readme according to go doc --- README.md | 92 +++++++------------------------------------------------ 1 file changed, 11 insertions(+), 81 deletions(-) diff --git a/README.md b/README.md index ebc3f9c..2388eba 100644 --- a/README.md +++ b/README.md @@ -1,89 +1,19 @@ -# client-timing +# clienttiming -[![Build Status](https://travis-ci.org/posener/client-timing.svg?branch=master)](https://travis-ci.org/posener/client-timing) -[![codecov](https://codecov.io/gh/posener/client-timing/branch/master/graph/badge.svg)](https://codecov.io/gh/posener/client-timing) -[![GoDoc](https://godoc.org/github.com/posener/client-timing?status.svg)](http://godoc.org/github.com/posener/client-timing) -[![Go Report Card](https://goreportcard.com/badge/github.com/posener/client-timing)](https://goreportcard.com/report/github.com/posener/client-timing) +Package clienttiming gives an HTTP client for go-server-timing middleware. -An HTTP client for [go-server-timing](https://github.com/mitchellh/go-server-timing) middleware. +It provides: -## Features: +An HTTP `Client` or `RoundTripper`, fully compatible with Go's standard library. +Automatically time HTTP requests sent from an HTTP handler. +Collects all timing headers from upstream servers. +Customize timing headers according to the request, response and error of the HTTP round trip. -* An HTTP `Client` or `RoundTripper`, fully compatible with Go's standard library. -* Automatically time HTTP requests sent from an HTTP handler. -* Collects all timing headers from upstream servers. -* Customize timing headers according to the request, response and error of the HTTP round trip. +## Sub Packages -## Install +* [example](./example) -`go get -u github.com/posener/client-timing` -## Usage +--- -1. Add a `*clienttiming.Timer` to your server handler, or create it in the handler function itself. -2. Wrap the `http.Handler` with [`servertiming.Middleware`](https://godoc.org/github.com/mitchellh/go-server-timing#Middleware). -2. In the handler function, having `timer` of type `*clienttiming.Timer` and `req` is the `*http.Request`: - - a. Create an [`*http.Client`](https://godoc.org/net/http#Client) using `timer.Client(req.Context())` - - b. Or create an [`http.RoundTripper`](https://godoc.org/net/http#RoundTripper) using `timer.Transport(req.Context())` - -3. Use option a or b directly or inject it to a library that accepts them, in your outgoing HTTP request - from the handler. -4. That is it! the timing header will appear in the response from the handler. - -## Example - -Suppose we have an HTTP handler: - -```go -type handler struct { - timer *clienttiming.Timer -} -``` - -Our usage of that handler will be: - -```go -func main() { - h := &handler{ - timer: clienttiming.New(clienttiming.WithName("my-server")), - } - log.Fatal(http.ListenAndServe(":8080", servertiming.Middleware(h))) -} -``` - - -### Example for `Client` function: - -```go -func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - // Create an http client using the request context - c := h.timer.Client(r.Context()) - - // Perform HTTP requests, as many as you like - resp, err := c.Get("https://golang.org/") - - ... -} -``` - -### Example for `Transport` function: - -```go -func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - // Instrument an http client with a timing transport - c := &http.Client{ - Transport: h.timer.Transport(r.Context()), - } - - // Perform HTTP requests, as many as you like - resp, err := c.Get("https://golang.org/") - - ... -} -``` - -### Run the [example](./example/main.go) - -`go run ./example/main.go` +Created by [goreadme](https://github.com/apps/goreadme)