From 065b200070b41e6e949710b4f9e01b50ccc60ab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristinn=20Bj=C3=B6rgvin=20=C3=81rdal?= Date: Tue, 26 Oct 2021 15:55:57 +0200 Subject: [PATCH] fix(extra/redisotel): set span.kind attribute to client According to the opentelemetry specification this should always be set to client for database client libraries. I've also removed the SetAttributes call and instead set the attributes during creation of the span. This is what the library SHOULD be doing according to the opentelemetry api specification. --- extra/redisotel/go.sum | 1 + extra/redisotel/redisotel.go | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/extra/redisotel/go.sum b/extra/redisotel/go.sum index 9f163a1..82aa0b0 100644 --- a/extra/redisotel/go.sum +++ b/extra/redisotel/go.sum @@ -33,6 +33,7 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c= diff --git a/extra/redisotel/redisotel.go b/extra/redisotel/redisotel.go index 89fa972..dff869a 100644 --- a/extra/redisotel/redisotel.go +++ b/extra/redisotel/redisotel.go @@ -27,11 +27,16 @@ func (TracingHook) BeforeProcess(ctx context.Context, cmd redis.Cmder) (context. return ctx, nil } - ctx, span := tracer.Start(ctx, cmd.FullName()) - span.SetAttributes( + attrs := []attribute.KeyValue{ attribute.String("db.system", "redis"), attribute.String("db.statement", rediscmd.CmdString(cmd)), - ) + } + opts := []trace.SpanStartOption{ + trace.WithSpanKind(trace.SpanKindClient), + trace.WithAttributes(attrs...), + } + + ctx, _ = tracer.Start(ctx, cmd.FullName(), opts...) return ctx, nil } @@ -52,12 +57,17 @@ func (TracingHook) BeforeProcessPipeline(ctx context.Context, cmds []redis.Cmder summary, cmdsString := rediscmd.CmdsString(cmds) - ctx, span := tracer.Start(ctx, "pipeline "+summary) - span.SetAttributes( + attrs := []attribute.KeyValue{ attribute.String("db.system", "redis"), attribute.Int("db.redis.num_cmd", len(cmds)), attribute.String("db.statement", cmdsString), - ) + } + opts := []trace.SpanStartOption{ + trace.WithSpanKind(trace.SpanKindClient), + trace.WithAttributes(attrs...), + } + + ctx, _ = tracer.Start(ctx, "pipeline "+summary, opts...) return ctx, nil }