...
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
13
14
15
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