From 0f8f12aee07294670a9e7e25a8caa1eeb508a860 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Mon, 19 May 2025 09:33:01 +0300 Subject: [PATCH] add tracer enabled status Signed-off-by: Vasiliy Tolstov --- tracer/memory/memory.go | 4 ++++ tracer/noop.go | 4 ++++ tracer/options.go | 10 ++++++++++ tracer/tracer.go | 2 ++ 4 files changed, 20 insertions(+) diff --git a/tracer/memory/memory.go b/tracer/memory/memory.go index 2272a03c..26fecb63 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 d76a5887..1eed2cb2 100644 --- a/tracer/noop.go +++ b/tracer/noop.go @@ -20,6 +20,10 @@ func (t *noopTracer) Spans() []Span { var uuidNil = uuid.Nil.String() +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 a98ab22d..acf4d5c7 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 8979c69e..45c20df5 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 {