diff --git a/tracer/memory/memory.go b/tracer/memory/memory.go index 64f44ee9..2b85f9fa 100644 --- a/tracer/memory/memory.go +++ b/tracer/memory/memory.go @@ -46,6 +46,10 @@ func (s memoryStringer) String() string { return s.s } +func (t *Tracer) Enabled() bool { + return t.opts.Enabled +} + func (t *Tracer) Flush(_ context.Context) error { return nil } diff --git a/tracer/noop.go b/tracer/noop.go index 7da4bed9..d382c0b2 100644 --- a/tracer/noop.go +++ b/tracer/noop.go @@ -18,6 +18,10 @@ func (t *noopTracer) Spans() []Span { return t.spans } +func (t *noopTracer) Enabled() bool { + return t.opts.Enabled +} + func (t *noopTracer) Start(ctx context.Context, name string, opts ...SpanOption) (context.Context, Span) { options := NewSpanOptions(opts...) span := &noopSpan{ diff --git a/tracer/options.go b/tracer/options.go index 1c67e1e8..2e3b5e00 100644 --- a/tracer/options.go +++ b/tracer/options.go @@ -142,6 +142,8 @@ type Options struct { Name string // ContextAttrFuncs contains funcs that provides tracing ContextAttrFuncs []ContextAttrFunc + // Enabled specify trace status + Enabled bool } // Option func signature @@ -181,6 +183,7 @@ func NewOptions(opts ...Option) Options { Logger: logger.DefaultLogger, Context: context.Background(), ContextAttrFuncs: DefaultContextAttrFuncs, + Enabled: true, } for _, o := range opts { o(&options) @@ -194,3 +197,10 @@ func Name(n string) Option { o.Name = n } } + +// Disabled disable tracer +func Disabled(b bool) Option { + return func(o *Options) { + o.Enabled = !b + } +} diff --git a/tracer/tracer.go b/tracer/tracer.go index 2cf05647..14f1e216 100644 --- a/tracer/tracer.go +++ b/tracer/tracer.go @@ -51,6 +51,8 @@ type Tracer interface { // Extract(ctx context.Context) // Flush flushes spans Flush(ctx context.Context) error + // Enabled returns tracer status + Enabled() bool } type Span interface { diff --git a/util/buffer/seeker_buffer.go b/util/buffer/seeker_buffer.go index 0ecfc71e..5d48c826 100644 --- a/util/buffer/seeker_buffer.go +++ b/util/buffer/seeker_buffer.go @@ -67,6 +67,12 @@ func (b *SeekerBuffer) Close() error { return nil } +// Reset clears all the data out of the buffer and sets the read position to 0. +func (b *SeekerBuffer) Reset() { + b.data = nil + b.pos = 0 +} + // Len returns the length of data remaining to be read. func (b *SeekerBuffer) Len() int { return len(b.data[b.pos:])