| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package otgrpc
- import "github.com/opentracing/opentracing-go"
- // Option instances may be used in OpenTracing(Server|Client)Interceptor
- // initialization.
- //
- // See this post about the "functional options" pattern:
- // http://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis
- type Option func(o *options)
- // LogPayloads returns an Option that tells the OpenTracing instrumentation to
- // try to log application payloads in both directions.
- func LogPayloads() Option {
- return func(o *options) {
- o.logPayloads = true
- }
- }
- // SpanInclusionFunc provides an optional mechanism to decide whether or not
- // to trace a given gRPC call. Return true to create a Span and initiate
- // tracing, false to not create a Span and not trace.
- //
- // parentSpanCtx may be nil if no parent could be extraction from either the Go
- // context.Context (on the client) or the RPC (on the server).
- type SpanInclusionFunc func(
- parentSpanCtx opentracing.SpanContext,
- method string,
- req, resp interface{}) bool
- // IncludingSpans binds a IncludeSpanFunc to the options
- func IncludingSpans(inclusionFunc SpanInclusionFunc) Option {
- return func(o *options) {
- o.inclusionFunc = inclusionFunc
- }
- }
- // SpanDecoratorFunc provides an (optional) mechanism for otgrpc users to add
- // arbitrary tags/logs/etc to the opentracing.Span associated with client
- // and/or server RPCs.
- type SpanDecoratorFunc func(
- span opentracing.Span,
- method string,
- req, resp interface{},
- grpcError error)
- // SpanDecorator binds a function that decorates gRPC Spans.
- func SpanDecorator(decorator SpanDecoratorFunc) Option {
- return func(o *options) {
- o.decorator = decorator
- }
- }
- // The internal-only options struct. Obviously overkill at the moment; but will
- // scale well as production use dictates other configuration and tuning
- // parameters.
- type options struct {
- logPayloads bool
- decorator SpanDecoratorFunc
- // May be nil.
- inclusionFunc SpanInclusionFunc
- }
- // newOptions returns the default options.
- func newOptions() *options {
- return &options{
- logPayloads: false,
- inclusionFunc: nil,
- }
- }
- func (o *options) apply(opts ...Option) {
- for _, opt := range opts {
- opt(o)
- }
- }
|