mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-07-09 21:17:09 +08:00
76
vendor/github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc/options.go
generated
vendored
Normal file
76
vendor/github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc/options.go
generated
vendored
Normal file
@ -0,0 +1,76 @@
|
||||
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)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user