Documentation ¶
Overview ¶
Package nethttp provides OpenTracing instrumentation for the net/http package.
Index ¶
- func Middleware(tr opentracing.Tracer, h http.Handler, options ...MWOption) http.Handler
- func MiddlewareFunc(tr opentracing.Tracer, h http.HandlerFunc, options ...MWOption) http.HandlerFunc
- type ClientOption
- type MWOption
- func MWComponentName(componentName string) MWOption
- func MWSpanFilter(f func(r *http.Request) bool) MWOption
- func MWSpanObserver(f func(span opentracing.Span, r *http.Request)) MWOption
- func MWSpanOnFinish(...) MWOption
- func MWSpanOnStart(...) MWOption
- func MWURLTagFunc(f func(u *url.URL) string) MWOption
- func OperationNameFunc(f func(r *http.Request) string) MWOption
- type Tracer
- type Transport
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Middleware ¶
Middleware wraps an http.Handler and traces incoming requests. Additionally, it adds the span to the request's context.
By default, the operation name of the spans is set to "HTTP {method}". This can be overriden with options.
Example:
http.ListenAndServe("localhost:80", nethttp.Middleware(tracer, http.DefaultServeMux))
The options allow fine tuning the behavior of the middleware.
Example:
mw := nethttp.Middleware( tracer, http.DefaultServeMux, nethttp.OperationNameFunc(func(r *http.Request) string { return "HTTP " + r.Method + ":/api/customers" }), nethttp.MWSpanObserver(func(sp opentracing.Span, r *http.Request) { sp.SetTag("http.uri", r.URL.EscapedPath()) }), )
func MiddlewareFunc ¶
func MiddlewareFunc(tr opentracing.Tracer, h http.HandlerFunc, options ...MWOption) http.HandlerFunc
MiddlewareFunc wraps an http.HandlerFunc and traces incoming requests. It behaves identically to the Middleware function above.
Example:
http.ListenAndServe("localhost:80", nethttp.MiddlewareFunc(tracer, MyHandler))
Types ¶
type ClientOption ¶
type ClientOption func(*clientOptions)
ClientOption contols the behavior of TraceRequest.
func ClientSpanObserver ¶
func ClientSpanObserver(f func(span opentracing.Span, r *http.Request)) ClientOption
ClientSpanObserver returns a ClientOption that observes the span for the client-side span.
func ClientTrace ¶
func ClientTrace(enabled bool) ClientOption
ClientTrace returns a ClientOption that turns on or off extra instrumentation via httptrace.WithClientTrace.
func ComponentName ¶
func ComponentName(componentName string) ClientOption
ComponentName returns a ClientOption that sets the component name for the client-side span.
func InjectSpanContext ¶
func InjectSpanContext(enabled bool) ClientOption
InjectSpanContext returns a ClientOption that turns on or off injection of the Span context in the request HTTP headers. If this option is not used, the default behaviour is to inject the span context.
func OperationName ¶
func OperationName(operationName string) ClientOption
OperationName returns a ClientOption that sets the operation name for the client-side span.
type MWOption ¶
type MWOption func(*mwOptions)
MWOption controls the behavior of the Middleware.
func MWComponentName ¶
MWComponentName returns a MWOption that sets the component name for the server-side span.
func MWSpanFilter ¶
MWSpanFilter returns a MWOption that filters requests from creating a span for the server-side span. Span won't be created if it returns false.
func MWSpanObserver ¶
func MWSpanObserver(f func(span opentracing.Span, r *http.Request)) MWOption
MWSpanObserver returns a MWOption that observe the span for the server-side span.
func MWSpanOnFinish ¶
func MWSpanOnFinish(f func(ctx context.Context, span opentracing.Span, r *http.Request) context.Context) MWOption
MWSpanOnFinish returns MWOption that observe the span right before the span finished for the server-side span.
func MWSpanOnStart ¶
func MWSpanOnStart(f func(ctx context.Context, span opentracing.Span, r *http.Request) context.Context) MWOption
MWSpanOnStart returns a MWOption that observe the span right after the span started for the server-side span.
func MWURLTagFunc ¶
MWURLTagFunc returns a MWOption that uses given function f to set the span's http.url tag. Can be used to change the default http.url tag, eg to redact sensitive information.
type Tracer ¶
type Tracer struct {
// contains filtered or unexported fields
}
Tracer holds tracing details for one HTTP request.
func TraceRequest ¶
func TraceRequest(tr opentracing.Tracer, req *http.Request, options ...ClientOption) (*http.Request, *Tracer)
TraceRequest adds a ClientTracer to req, tracing the request and all requests caused due to redirects. When tracing requests this way you must also use Transport.
Example:
func AskGoogle(ctx context.Context) error { client := &http.Client{Transport: &nethttp.Transport{}} req, err := http.NewRequest("GET", "http://google.com", nil) if err != nil { return err } req = req.WithContext(ctx) // extend existing trace, if any req, ht := nethttp.TraceRequest(tracer, req) defer ht.Finish() res, err := client.Do(req) if err != nil { return err } res.Body.Close() return nil }
func TracerFromRequest ¶
TracerFromRequest retrieves the Tracer from the request. If the request does not have a Tracer it will return nil.
type Transport ¶
type Transport struct { // The actual RoundTripper to use for the request. A nil // RoundTripper defaults to http.DefaultTransport. http.RoundTripper }
Transport wraps a RoundTripper. If a request is being traced with Tracer, Transport will inject the current span into the headers, and set HTTP related tags on the span.