...

Source file src/github.com/go-kit/kit/tracing/zipkin/endpoint.go

Documentation: github.com/go-kit/kit/tracing/zipkin

     1  package zipkin
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/openzipkin/zipkin-go"
     7  	"github.com/openzipkin/zipkin-go/model"
     8  
     9  	"github.com/go-kit/kit/endpoint"
    10  )
    11  
    12  // TraceEndpoint returns an Endpoint middleware, tracing a Go kit endpoint.
    13  // This endpoint tracer should be used in combination with a Go kit Transport
    14  // tracing middleware or custom before and after transport functions as
    15  // propagation of SpanContext is not provided in this middleware.
    16  func TraceEndpoint(tracer *zipkin.Tracer, name string) endpoint.Middleware {
    17  	return func(next endpoint.Endpoint) endpoint.Endpoint {
    18  		return func(ctx context.Context, request interface{}) (interface{}, error) {
    19  			var sc model.SpanContext
    20  			if parentSpan := zipkin.SpanFromContext(ctx); parentSpan != nil {
    21  				sc = parentSpan.Context()
    22  			}
    23  			sp := tracer.StartSpan(name, zipkin.Parent(sc))
    24  			defer sp.Finish()
    25  
    26  			ctx = zipkin.NewContext(ctx, sp)
    27  			return next(ctx, request)
    28  		}
    29  	}
    30  }
    31  

View as plain text