Files
weave-scope/vendor/github.com/weaveworks/common/http/client/client.go
2017-09-15 10:29:55 +00:00

36 lines
1011 B
Go

package client
import (
"context"
"fmt"
"net/http"
"strconv"
"github.com/prometheus/client_golang/prometheus"
"github.com/weaveworks/common/instrument"
oldcontext "golang.org/x/net/context"
)
// Requester executes an HTTP request.
type Requester interface {
Do(req *http.Request) (*http.Response, error)
}
// TimeRequestHistogram performs an HTTP client request and records the duration in a histogram
func TimeRequestHistogram(ctx context.Context, operation string, metric *prometheus.HistogramVec, client Requester, request *http.Request) (*http.Response, error) {
var response *http.Response
doRequest := func(_ oldcontext.Context) error {
var err error
response, err = client.Do(request)
return err
}
toStatusCode := func(err error) string {
if err == nil {
return strconv.Itoa(response.StatusCode)
}
return "error"
}
err := instrument.TimeRequestHistogramStatus(ctx, fmt.Sprintf("%s %s", request.Method, operation), metric, toStatusCode, doRequest)
return response, err
}