Refactor debug/trace ready for Jaeger
This commit is contained in:
parent
1108cc5e91
commit
62c067adcd
@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/micro/go-micro/broker"
|
"github.com/micro/go-micro/broker"
|
||||||
"github.com/micro/go-micro/client"
|
"github.com/micro/go-micro/client"
|
||||||
"github.com/micro/go-micro/client/selector"
|
"github.com/micro/go-micro/client/selector"
|
||||||
|
"github.com/micro/go-micro/debug/trace"
|
||||||
"github.com/micro/go-micro/registry"
|
"github.com/micro/go-micro/registry"
|
||||||
"github.com/micro/go-micro/runtime"
|
"github.com/micro/go-micro/runtime"
|
||||||
"github.com/micro/go-micro/server"
|
"github.com/micro/go-micro/server"
|
||||||
@ -22,9 +23,9 @@ import (
|
|||||||
cmucp "github.com/micro/go-micro/client/mucp"
|
cmucp "github.com/micro/go-micro/client/mucp"
|
||||||
|
|
||||||
// servers
|
// servers
|
||||||
|
"github.com/micro/cli/v2"
|
||||||
sgrpc "github.com/micro/go-micro/server/grpc"
|
sgrpc "github.com/micro/go-micro/server/grpc"
|
||||||
smucp "github.com/micro/go-micro/server/mucp"
|
smucp "github.com/micro/go-micro/server/mucp"
|
||||||
"github.com/micro/cli/v2"
|
|
||||||
|
|
||||||
// brokers
|
// brokers
|
||||||
"github.com/micro/go-micro/broker/memory"
|
"github.com/micro/go-micro/broker/memory"
|
||||||
@ -50,6 +51,10 @@ import (
|
|||||||
// stores
|
// stores
|
||||||
memStore "github.com/micro/go-micro/store/memory"
|
memStore "github.com/micro/go-micro/store/memory"
|
||||||
svcStore "github.com/micro/go-micro/store/service"
|
svcStore "github.com/micro/go-micro/store/service"
|
||||||
|
|
||||||
|
// tracers
|
||||||
|
// jTracer "github.com/micro/go-micro/debug/trace/jaeger"
|
||||||
|
memTracer "github.com/micro/go-micro/debug/trace/memory"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Cmd interface {
|
type Cmd interface {
|
||||||
@ -208,6 +213,16 @@ var (
|
|||||||
EnvVars: []string{"MICRO_TRANSPORT_ADDRESS"},
|
EnvVars: []string{"MICRO_TRANSPORT_ADDRESS"},
|
||||||
Usage: "Comma-separated list of transport addresses",
|
Usage: "Comma-separated list of transport addresses",
|
||||||
},
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "tracer",
|
||||||
|
EnvVars: []string{"MICRO_TRACER"},
|
||||||
|
Usage: "Tracer for distributed tracing, e.g. memory, jaeger",
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "tracer_address",
|
||||||
|
EnvVars: []string{"MICRO_TRACER_ADDRESS"},
|
||||||
|
Usage: "Comma-separated list of tracer addresses",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
DefaultBrokers = map[string]func(...broker.Option) broker.Broker{
|
DefaultBrokers = map[string]func(...broker.Option) broker.Broker{
|
||||||
@ -254,6 +269,11 @@ var (
|
|||||||
"service": svcStore.NewStore,
|
"service": svcStore.NewStore,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DefaultTracers = map[string]func(...trace.Option) trace.Tracer{
|
||||||
|
"memory": memTracer.NewTracer,
|
||||||
|
// "jaeger": jTracer.NewTracer,
|
||||||
|
}
|
||||||
|
|
||||||
// used for default selection as the fall back
|
// used for default selection as the fall back
|
||||||
defaultClient = "grpc"
|
defaultClient = "grpc"
|
||||||
defaultServer = "grpc"
|
defaultServer = "grpc"
|
||||||
@ -279,6 +299,7 @@ func newCmd(opts ...Option) Cmd {
|
|||||||
Transport: &transport.DefaultTransport,
|
Transport: &transport.DefaultTransport,
|
||||||
Runtime: &runtime.DefaultRuntime,
|
Runtime: &runtime.DefaultRuntime,
|
||||||
Store: &store.DefaultStore,
|
Store: &store.DefaultStore,
|
||||||
|
Tracer: &trace.DefaultTracer,
|
||||||
|
|
||||||
Brokers: DefaultBrokers,
|
Brokers: DefaultBrokers,
|
||||||
Clients: DefaultClients,
|
Clients: DefaultClients,
|
||||||
@ -288,6 +309,7 @@ func newCmd(opts ...Option) Cmd {
|
|||||||
Transports: DefaultTransports,
|
Transports: DefaultTransports,
|
||||||
Runtimes: DefaultRuntimes,
|
Runtimes: DefaultRuntimes,
|
||||||
Stores: DefaultStores,
|
Stores: DefaultStores,
|
||||||
|
Tracers: DefaultTracers,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
@ -330,7 +352,7 @@ func (c *cmd) Before(ctx *cli.Context) error {
|
|||||||
var serverOpts []server.Option
|
var serverOpts []server.Option
|
||||||
var clientOpts []client.Option
|
var clientOpts []client.Option
|
||||||
|
|
||||||
// Set the runtime
|
// Set the store
|
||||||
if name := ctx.String("store"); len(name) > 0 {
|
if name := ctx.String("store"); len(name) > 0 {
|
||||||
s, ok := c.opts.Stores[name]
|
s, ok := c.opts.Stores[name]
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -350,6 +372,16 @@ func (c *cmd) Before(ctx *cli.Context) error {
|
|||||||
*c.opts.Runtime = r()
|
*c.opts.Runtime = r()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set the tracer
|
||||||
|
if name := ctx.String("tracer"); len(name) > 0 {
|
||||||
|
r, ok := c.opts.Tracers[name]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("Unsupported tracer: %s", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
*c.opts.Tracer = r()
|
||||||
|
}
|
||||||
|
|
||||||
// Set the client
|
// Set the client
|
||||||
if name := ctx.String("client"); len(name) > 0 {
|
if name := ctx.String("client"); len(name) > 0 {
|
||||||
// only change if we have the client and type differs
|
// only change if we have the client and type differs
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/micro/go-micro/broker"
|
"github.com/micro/go-micro/broker"
|
||||||
"github.com/micro/go-micro/client"
|
"github.com/micro/go-micro/client"
|
||||||
"github.com/micro/go-micro/client/selector"
|
"github.com/micro/go-micro/client/selector"
|
||||||
|
"github.com/micro/go-micro/debug/trace"
|
||||||
"github.com/micro/go-micro/registry"
|
"github.com/micro/go-micro/registry"
|
||||||
"github.com/micro/go-micro/runtime"
|
"github.com/micro/go-micro/runtime"
|
||||||
"github.com/micro/go-micro/server"
|
"github.com/micro/go-micro/server"
|
||||||
@ -28,6 +29,7 @@ type Options struct {
|
|||||||
Server *server.Server
|
Server *server.Server
|
||||||
Runtime *runtime.Runtime
|
Runtime *runtime.Runtime
|
||||||
Store *store.Store
|
Store *store.Store
|
||||||
|
Tracer *trace.Tracer
|
||||||
|
|
||||||
Brokers map[string]func(...broker.Option) broker.Broker
|
Brokers map[string]func(...broker.Option) broker.Broker
|
||||||
Clients map[string]func(...client.Option) client.Client
|
Clients map[string]func(...client.Option) client.Client
|
||||||
@ -37,6 +39,7 @@ type Options struct {
|
|||||||
Transports map[string]func(...transport.Option) transport.Transport
|
Transports map[string]func(...transport.Option) transport.Transport
|
||||||
Runtimes map[string]func(...runtime.Option) runtime.Runtime
|
Runtimes map[string]func(...runtime.Option) runtime.Runtime
|
||||||
Stores map[string]func(...store.Option) store.Store
|
Stores map[string]func(...store.Option) store.Store
|
||||||
|
Tracers map[string]func(...trace.Option) trace.Tracer
|
||||||
|
|
||||||
// Other options for implementations of the interface
|
// Other options for implementations of the interface
|
||||||
// can be stored in a context
|
// can be stored in a context
|
||||||
@ -100,6 +103,12 @@ func Server(s *server.Server) Option {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Tracer(t *trace.Tracer) Option {
|
||||||
|
return func(o *Options) {
|
||||||
|
o.Tracer = t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// New broker func
|
// New broker func
|
||||||
func NewBroker(name string, b func(...broker.Option) broker.Broker) Option {
|
func NewBroker(name string, b func(...broker.Option) broker.Broker) Option {
|
||||||
return func(o *Options) {
|
return func(o *Options) {
|
||||||
@ -148,3 +157,10 @@ func NewRuntime(name string, r func(...runtime.Option) runtime.Runtime) Option {
|
|||||||
o.Runtimes[name] = r
|
o.Runtimes[name] = r
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// New tracer func
|
||||||
|
func NewTracer(name string, t func(...trace.Option) trace.Tracer) Option {
|
||||||
|
return func(o *Options) {
|
||||||
|
o.Tracers[name] = t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -25,14 +25,14 @@ type Debug struct {
|
|||||||
// the stats collector
|
// the stats collector
|
||||||
stats stats.Stats
|
stats stats.Stats
|
||||||
// the tracer
|
// the tracer
|
||||||
trace trace.Trace
|
trace trace.Tracer
|
||||||
}
|
}
|
||||||
|
|
||||||
func newDebug() *Debug {
|
func newDebug() *Debug {
|
||||||
return &Debug{
|
return &Debug{
|
||||||
log: log.DefaultLog,
|
log: log.DefaultLog,
|
||||||
stats: stats.DefaultStats,
|
stats: stats.DefaultStats,
|
||||||
trace: trace.DefaultTrace,
|
trace: trace.DefaultTracer,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,32 +1,33 @@
|
|||||||
package trace
|
package memory
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
"github.com/micro/go-micro/debug/trace"
|
||||||
"github.com/micro/go-micro/util/ring"
|
"github.com/micro/go-micro/util/ring"
|
||||||
)
|
)
|
||||||
|
|
||||||
type trace struct {
|
type Tracer struct {
|
||||||
opts Options
|
opts trace.Options
|
||||||
|
|
||||||
// ring buffer of traces
|
// ring buffer of traces
|
||||||
buffer *ring.Buffer
|
buffer *ring.Buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *trace) Read(opts ...ReadOption) ([]*Span, error) {
|
func (t *Tracer) Read(opts ...trace.ReadOption) ([]*trace.Span, error) {
|
||||||
var options ReadOptions
|
var options trace.ReadOptions
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
o(&options)
|
o(&options)
|
||||||
}
|
}
|
||||||
|
|
||||||
sp := t.buffer.Get(t.buffer.Size())
|
sp := t.buffer.Get(t.buffer.Size())
|
||||||
|
|
||||||
var spans []*Span
|
var spans []*trace.Span
|
||||||
|
|
||||||
for _, span := range sp {
|
for _, span := range sp {
|
||||||
val := span.Value.(*Span)
|
val := span.Value.(*trace.Span)
|
||||||
// skip if trace id is specified and doesn't match
|
// skip if trace id is specified and doesn't match
|
||||||
if len(options.Trace) > 0 && val.Trace != options.Trace {
|
if len(options.Trace) > 0 && val.Trace != options.Trace {
|
||||||
continue
|
continue
|
||||||
@ -37,8 +38,8 @@ func (t *trace) Read(opts ...ReadOption) ([]*Span, error) {
|
|||||||
return spans, nil
|
return spans, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *trace) Start(ctx context.Context, name string) (context.Context, *Span) {
|
func (t *Tracer) Start(ctx context.Context, name string) (context.Context, *trace.Span) {
|
||||||
span := &Span{
|
span := &trace.Span{
|
||||||
Name: name,
|
Name: name,
|
||||||
Trace: uuid.New().String(),
|
Trace: uuid.New().String(),
|
||||||
Id: uuid.New().String(),
|
Id: uuid.New().String(),
|
||||||
@ -51,7 +52,7 @@ func (t *trace) Start(ctx context.Context, name string) (context.Context, *Span)
|
|||||||
return context.Background(), span
|
return context.Background(), span
|
||||||
}
|
}
|
||||||
|
|
||||||
s, ok := FromContext(ctx)
|
s, ok := trace.FromContext(ctx)
|
||||||
if !ok {
|
if !ok {
|
||||||
return ctx, span
|
return ctx, span
|
||||||
}
|
}
|
||||||
@ -65,7 +66,7 @@ func (t *trace) Start(ctx context.Context, name string) (context.Context, *Span)
|
|||||||
return ctx, span
|
return ctx, span
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *trace) Finish(s *Span) error {
|
func (t *Tracer) Finish(s *trace.Span) error {
|
||||||
// set finished time
|
// set finished time
|
||||||
s.Duration = time.Since(s.Started)
|
s.Duration = time.Since(s.Started)
|
||||||
|
|
||||||
@ -75,13 +76,13 @@ func (t *trace) Finish(s *Span) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTrace(opts ...Option) Trace {
|
func NewTracer(opts ...trace.Option) trace.Tracer {
|
||||||
var options Options
|
var options trace.Options
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
o(&options)
|
o(&options)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &trace{
|
return &Tracer{
|
||||||
opts: options,
|
opts: options,
|
||||||
// the last 64 requests
|
// the last 64 requests
|
||||||
buffer: ring.New(64),
|
buffer: ring.New(64),
|
@ -1,6 +1,9 @@
|
|||||||
package trace
|
package trace
|
||||||
|
|
||||||
type Options struct{}
|
type Options struct {
|
||||||
|
// Size is the size of ring buffer
|
||||||
|
Size int
|
||||||
|
}
|
||||||
|
|
||||||
type Option func(o *Options)
|
type Option func(o *Options)
|
||||||
|
|
||||||
@ -17,3 +20,15 @@ func ReadTrace(t string) ReadOption {
|
|||||||
o.Trace = t
|
o.Trace = t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
// DefaultSize of the buffer
|
||||||
|
DefaultSize = 64
|
||||||
|
)
|
||||||
|
|
||||||
|
// DefaultOptions returns default options
|
||||||
|
func DefaultOptions() Options {
|
||||||
|
return Options{
|
||||||
|
Size: DefaultSize,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -6,8 +6,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Trace is an interface for distributed tracing
|
// Tracer is an interface for distributed tracing
|
||||||
type Trace interface {
|
type Tracer interface {
|
||||||
// Start a trace
|
// Start a trace
|
||||||
Start(ctx context.Context, name string) (context.Context, *Span)
|
Start(ctx context.Context, name string) (context.Context, *Span)
|
||||||
// Finish the trace
|
// Finish the trace
|
||||||
@ -36,11 +36,6 @@ type Span struct {
|
|||||||
|
|
||||||
type spanKey struct{}
|
type spanKey struct{}
|
||||||
|
|
||||||
var (
|
|
||||||
// Default tracer
|
|
||||||
DefaultTrace = NewTrace()
|
|
||||||
)
|
|
||||||
|
|
||||||
// FromContext returns a span from context
|
// FromContext returns a span from context
|
||||||
func FromContext(ctx context.Context) (*Span, bool) {
|
func FromContext(ctx context.Context) (*Span, bool) {
|
||||||
s, ok := ctx.Value(spanKey{}).(*Span)
|
s, ok := ctx.Value(spanKey{}).(*Span)
|
||||||
@ -51,3 +46,25 @@ func FromContext(ctx context.Context) (*Span, bool) {
|
|||||||
func NewContext(ctx context.Context, s *Span) context.Context {
|
func NewContext(ctx context.Context, s *Span) context.Context {
|
||||||
return context.WithValue(ctx, spanKey{}, s)
|
return context.WithValue(ctx, spanKey{}, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
DefaultTracer Tracer = new(noop)
|
||||||
|
)
|
||||||
|
|
||||||
|
type noop struct{}
|
||||||
|
|
||||||
|
func (n *noop) Init(...Option) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *noop) Start(ctx context.Context, name string) (context.Context, *Span) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *noop) Finish(*Span) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *noop) Read(...ReadOption) ([]*Span, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
10
options.go
10
options.go
@ -4,14 +4,15 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/micro/cli/v2"
|
||||||
"github.com/micro/go-micro/broker"
|
"github.com/micro/go-micro/broker"
|
||||||
"github.com/micro/go-micro/client"
|
"github.com/micro/go-micro/client"
|
||||||
"github.com/micro/go-micro/client/selector"
|
"github.com/micro/go-micro/client/selector"
|
||||||
"github.com/micro/go-micro/config/cmd"
|
"github.com/micro/go-micro/config/cmd"
|
||||||
|
"github.com/micro/go-micro/debug/trace"
|
||||||
"github.com/micro/go-micro/registry"
|
"github.com/micro/go-micro/registry"
|
||||||
"github.com/micro/go-micro/server"
|
"github.com/micro/go-micro/server"
|
||||||
"github.com/micro/go-micro/transport"
|
"github.com/micro/go-micro/transport"
|
||||||
"github.com/micro/cli/v2"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Options struct {
|
type Options struct {
|
||||||
@ -112,6 +113,13 @@ func Registry(r registry.Registry) Option {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tracer sets the tracer for the service
|
||||||
|
func Tracer(t trace.Tracer) Option {
|
||||||
|
return func(o *Options) {
|
||||||
|
o.Server.Init(server.Tracer(t))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Selector sets the selector for the service client
|
// Selector sets the selector for the service client
|
||||||
func Selector(s selector.Selector) Option {
|
func Selector(s selector.Selector) Option {
|
||||||
return func(o *Options) {
|
return func(o *Options) {
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
|
|
||||||
"github.com/micro/go-micro/broker"
|
"github.com/micro/go-micro/broker"
|
||||||
"github.com/micro/go-micro/codec"
|
"github.com/micro/go-micro/codec"
|
||||||
|
"github.com/micro/go-micro/debug/trace"
|
||||||
"github.com/micro/go-micro/registry"
|
"github.com/micro/go-micro/registry"
|
||||||
"github.com/micro/go-micro/transport"
|
"github.com/micro/go-micro/transport"
|
||||||
)
|
)
|
||||||
@ -15,6 +16,7 @@ type Options struct {
|
|||||||
Codecs map[string]codec.NewCodec
|
Codecs map[string]codec.NewCodec
|
||||||
Broker broker.Broker
|
Broker broker.Broker
|
||||||
Registry registry.Registry
|
Registry registry.Registry
|
||||||
|
Tracer trace.Tracer
|
||||||
Transport transport.Transport
|
Transport transport.Transport
|
||||||
Metadata map[string]string
|
Metadata map[string]string
|
||||||
Name string
|
Name string
|
||||||
@ -152,6 +154,13 @@ func Registry(r registry.Registry) Option {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tracer mechanism for distributed tracking
|
||||||
|
func Tracer(t trace.Tracer) Option {
|
||||||
|
return func(o *Options) {
|
||||||
|
o.Tracer = t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Transport mechanism for communication e.g http, rabbitmq, etc
|
// Transport mechanism for communication e.g http, rabbitmq, etc
|
||||||
func Transport(t transport.Transport) Option {
|
func Transport(t transport.Transport) Option {
|
||||||
return func(o *Options) {
|
return func(o *Options) {
|
||||||
|
@ -15,7 +15,6 @@ import (
|
|||||||
"github.com/micro/go-micro/debug/profile/pprof"
|
"github.com/micro/go-micro/debug/profile/pprof"
|
||||||
"github.com/micro/go-micro/debug/service/handler"
|
"github.com/micro/go-micro/debug/service/handler"
|
||||||
"github.com/micro/go-micro/debug/stats"
|
"github.com/micro/go-micro/debug/stats"
|
||||||
"github.com/micro/go-micro/debug/trace"
|
|
||||||
"github.com/micro/go-micro/plugin"
|
"github.com/micro/go-micro/plugin"
|
||||||
"github.com/micro/go-micro/server"
|
"github.com/micro/go-micro/server"
|
||||||
"github.com/micro/go-micro/util/log"
|
"github.com/micro/go-micro/util/log"
|
||||||
@ -36,17 +35,14 @@ func newService(opts ...Option) Service {
|
|||||||
|
|
||||||
// wrap client to inject From-Service header on any calls
|
// wrap client to inject From-Service header on any calls
|
||||||
options.Client = wrapper.FromService(serviceName, options.Client)
|
options.Client = wrapper.FromService(serviceName, options.Client)
|
||||||
|
options.Client = wrapper.TraceCall(serviceName, options.Server.Options().Tracer, options.Client)
|
||||||
// wrap client to inject From-Service header on any calls
|
|
||||||
options.Client = wrapper.TraceCall(serviceName, trace.DefaultTrace, options.Client)
|
|
||||||
|
|
||||||
// wrap the server to provide handler stats
|
// wrap the server to provide handler stats
|
||||||
options.Server.Init(
|
options.Server.Init(
|
||||||
server.WrapHandler(wrapper.HandlerStats(stats.DefaultStats)),
|
server.WrapHandler(wrapper.HandlerStats(stats.DefaultStats)),
|
||||||
server.WrapHandler(wrapper.TraceHandler(trace.DefaultTrace)),
|
server.WrapHandler(wrapper.TraceHandler(options.Server.Options().Tracer)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
return &service{
|
return &service{
|
||||||
opts: options,
|
opts: options,
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ type traceWrapper struct {
|
|||||||
client.Client
|
client.Client
|
||||||
|
|
||||||
name string
|
name string
|
||||||
trace trace.Trace
|
trace trace.Tracer
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -97,7 +97,7 @@ func HandlerStats(stats stats.Stats) server.HandlerWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TraceCall is a call tracing wrapper
|
// TraceCall is a call tracing wrapper
|
||||||
func TraceCall(name string, t trace.Trace, c client.Client) client.Client {
|
func TraceCall(name string, t trace.Tracer, c client.Client) client.Client {
|
||||||
return &traceWrapper{
|
return &traceWrapper{
|
||||||
name: name,
|
name: name,
|
||||||
trace: t,
|
trace: t,
|
||||||
@ -106,7 +106,7 @@ func TraceCall(name string, t trace.Trace, c client.Client) client.Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TraceHandler wraps a server handler to perform tracing
|
// TraceHandler wraps a server handler to perform tracing
|
||||||
func TraceHandler(t trace.Trace) server.HandlerWrapper {
|
func TraceHandler(t trace.Tracer) server.HandlerWrapper {
|
||||||
// return a handler wrapper
|
// return a handler wrapper
|
||||||
return func(h server.HandlerFunc) server.HandlerFunc {
|
return func(h server.HandlerFunc) server.HandlerFunc {
|
||||||
// return a function that returns a function
|
// return a function that returns a function
|
||||||
|
Loading…
Reference in New Issue
Block a user