tracing option to customize span name

This commit is contained in:
Rangel Reale 2023-02-14 09:55:07 -03:00
parent 3532f2a414
commit 095fb1c110
2 changed files with 38 additions and 7 deletions

View File

@ -14,6 +14,7 @@ type config struct {
dbSystem string
attrs []attribute.KeyValue
spanNameFn func(hook TracingHook, defaultName string) string
// Tracing options.
@ -114,6 +115,21 @@ func WithDBStatement(on bool) TracingOption {
})
}
type TracingHook int
const (
TracingHookDial TracingHook = iota
TracingHookProcess
TracingHookProcessPipeline
)
// WithSpanName provides a function to customize the span names.
func WithSpanName(f func(hook TracingHook, defaultName string) string) TracingOption {
return tracingOption(func(conf *config) {
conf.spanNameFn = f
})
}
// ------------------------------------------------------------------------------
type MetricsOption interface {

View File

@ -91,7 +91,12 @@ func (th *tracingHook) DialHook(hook redis.DialHook) redis.DialHook {
return hook(ctx, network, addr)
}
ctx, span := th.conf.tracer.Start(ctx, "redis.dial", th.spanOpts...)
spanName := "redis.dial"
if th.conf.spanNameFn != nil {
spanName = th.conf.spanNameFn(TracingHookDial, spanName)
}
ctx, span := th.conf.tracer.Start(ctx, spanName, th.spanOpts...)
defer span.End()
conn, err := hook(ctx, network, addr)
@ -126,7 +131,12 @@ func (th *tracingHook) ProcessHook(hook redis.ProcessHook) redis.ProcessHook {
opts := th.spanOpts
opts = append(opts, trace.WithAttributes(attrs...))
ctx, span := th.conf.tracer.Start(ctx, cmd.FullName(), opts...)
spanName := cmd.FullName()
if th.conf.spanNameFn != nil {
spanName = th.conf.spanNameFn(TracingHookProcess, spanName)
}
ctx, span := th.conf.tracer.Start(ctx, spanName, opts...)
defer span.End()
if err := hook(ctx, cmd); err != nil {
@ -163,7 +173,12 @@ func (th *tracingHook) ProcessPipelineHook(
opts := th.spanOpts
opts = append(opts, trace.WithAttributes(attrs...))
ctx, span := th.conf.tracer.Start(ctx, "redis.pipeline "+summary, opts...)
spanName := "redis.pipeline " + summary
if th.conf.spanNameFn != nil {
spanName = th.conf.spanNameFn(TracingHookProcessPipeline, spanName)
}
ctx, span := th.conf.tracer.Start(ctx, spanName, opts...)
defer span.End()
if err := hook(ctx, cmds); err != nil {