code: func InstrumentRoundTripperDuration(obs prometheus.ObserverVec, next http.RoundTripper) RoundTripperFunc {
  	code, method := checkLabels(obs)
  
  	return RoundTripperFunc(func(r *http.Request) (*http.Response, error) {
  		start := time.Now()
  		resp, err := next.RoundTrip(r)
  		if err == nil {
  			obs.With(labels(code, method, r.Method, resp.StatusCode)).Observe(time.Since(start).Seconds())
  		}
  		return resp, err
  	})
  }
docs: // InstrumentRoundTripperDuration is a middleware that wraps the provided
  // http.RoundTripper to observe the request duration with the provided
  // ObserverVec.  The ObserverVec must have zero, one, or two non-const
  // non-curried labels. For those, the only allowed label names are "code" and
  // "method". The function panics otherwise. The Observe method of the Observer
  // in the ObserverVec is called with the request duration in
  // seconds. Partitioning happens by HTTP status code and/or HTTP method if the
  // respective instance label names are present in the ObserverVec. For
  // unpartitioned observations, use an ObserverVec with zero labels. Note that
  // partitioning of Histograms is expensive and should be used judiciously.
  //
  // If the wrapped RoundTripper panics or returns a non-nil error, no values are
  // reported.
  //
  // Note that this method is only guaranteed to never observe negative durations
  // if used with Go1.9+.