package client
import (
"errors"
"net/http"
"github.com/opentracing/opentracing-go"
)
func NewTracingRoundTripper(next http.RoundTripper) *TracingRoundTripper {
return &TracingRoundTripper{
next: next,
}
}
type TracingRoundTripper struct {
next http.RoundTripper
}
func (t *TracingRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) {
if span := opentracing.SpanFromContext(r.Context()); span != nil {
opentracing.GlobalTracer().Inject(
span.Context(),
opentracing.HTTPHeaders,
opentracing.HTTPHeadersCarrier(r.Header))
}
if t.next != nil {
return t.next.RoundTrip(r)
}
return nil, errors.New("missing next round tripper")
}