1package opencensus 2 3import ( 4 "go.opencensus.io/plugin/ochttp/propagation/b3" 5 "go.opencensus.io/trace" 6 "go.opencensus.io/trace/propagation" 7) 8 9// defaultHTTPPropagate holds OpenCensus' default HTTP propagation format which 10// currently is Zipkin's B3. 11var defaultHTTPPropagate propagation.HTTPFormat = &b3.HTTPFormat{} 12 13// TracerOption allows for functional options to our OpenCensus tracing 14// middleware. 15type TracerOption func(o *TracerOptions) 16 17// WithTracerConfig sets all configuration options at once. 18func WithTracerConfig(options TracerOptions) TracerOption { 19 return func(o *TracerOptions) { 20 *o = options 21 } 22} 23 24// WithSampler sets the sampler to use by our OpenCensus Tracer. 25func WithSampler(sampler trace.Sampler) TracerOption { 26 return func(o *TracerOptions) { 27 o.Sampler = sampler 28 } 29} 30 31// WithName sets the name for an instrumented transport endpoint. If name is omitted 32// at tracing middleware creation, the method of the transport or transport rpc 33// name is used. 34func WithName(name string) TracerOption { 35 return func(o *TracerOptions) { 36 o.Name = name 37 } 38} 39 40// IsPublic should be set to true for publicly accessible servers and for 41// clients that should not propagate their current trace metadata. 42// On the server side a new trace will always be started regardless of any 43// trace metadata being found in the incoming request. If any trace metadata 44// is found, it will be added as a linked trace instead. 45func IsPublic(isPublic bool) TracerOption { 46 return func(o *TracerOptions) { 47 o.Public = isPublic 48 } 49} 50 51// WithHTTPPropagation sets the propagation handlers for the HTTP transport 52// middlewares. If used on a non HTTP transport this is a noop. 53func WithHTTPPropagation(p propagation.HTTPFormat) TracerOption { 54 return func(o *TracerOptions) { 55 if p == nil { 56 // reset to default OC HTTP format 57 o.HTTPPropagate = defaultHTTPPropagate 58 return 59 } 60 o.HTTPPropagate = p 61 } 62} 63 64// TracerOptions holds configuration for our tracing middlewares 65type TracerOptions struct { 66 Sampler trace.Sampler 67 Name string 68 Public bool 69 HTTPPropagate propagation.HTTPFormat 70} 71