1
0
mirror of https://github.com/redis/go-redis.git synced 2025-07-29 17:41:15 +03:00

Optimize Otel instrumentation

This commit is contained in:
Vladimir Mihailenco
2021-03-20 10:01:48 +02:00
parent 7c5bbc37bd
commit 1b77706c0c
4 changed files with 124 additions and 123 deletions

View File

@ -11,17 +11,18 @@ import (
)
func Sleep(ctx context.Context, dur time.Duration) error {
return WithSpan(ctx, "time.Sleep", func(ctx context.Context, span trace.Span) error {
t := time.NewTimer(dur)
defer t.Stop()
_, span := StartSpan(ctx, "time.Sleep")
defer span.End()
select {
case <-t.C:
return nil
case <-ctx.Done():
return ctx.Err()
}
})
t := time.NewTimer(dur)
defer t.Stop()
select {
case <-t.C:
return nil
case <-ctx.Done():
return ctx.Err()
}
}
func ToLower(s string) string {
@ -54,15 +55,11 @@ func isLower(s string) bool {
var tracer = otel.Tracer("github.com/go-redis/redis")
func WithSpan(ctx context.Context, name string, fn func(context.Context, trace.Span) error) error {
func StartSpan(ctx context.Context, name string) (context.Context, trace.Span) {
if span := trace.SpanFromContext(ctx); !span.IsRecording() {
return fn(ctx, span)
return ctx, span
}
ctx, span := tracer.Start(ctx, name)
defer span.End()
return fn(ctx, span)
return tracer.Start(ctx, name)
}
func RecordError(ctx context.Context, span trace.Span, err error) error {