From 5eaac85907b06ae2873dcd2aae7e998ca2868494 Mon Sep 17 00:00:00 2001 From: Kyle Nusbaum Date: Thu, 23 Apr 2020 03:11:10 -0500 Subject: [PATCH 1/9] ddtrace/tracer: implement fmt.Formatter interface to support log injection This change implements `fmt.Formatter` to allow printing a span in various formats for logging. --- ddtrace/tracer/span.go | 18 ++++++++++++++++++ ddtrace/tracer/span_test.go | 38 +++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/ddtrace/tracer/span.go b/ddtrace/tracer/span.go index b5c0c94e70..a5601ef759 100644 --- a/ddtrace/tracer/span.go +++ b/ddtrace/tracer/span.go @@ -337,6 +337,24 @@ func (s *span) String() string { return strings.Join(lines, "\n") } +// Format implements fmt.Formatter. +func (s *span) Format(f fmt.State, c rune) { + switch c { + case 's': + fmt.Fprint(f, s.String()) + case 'v': + fmt.Fprintf(f, "dd.trace_id=%d dd.span_id=%d dd.service=%s", s.TraceID, s.SpanID, s.Service) + if e := s.Meta[ext.Environment]; e != "" { + fmt.Fprintf(f, " dd.env=%s", e) + } + if v := s.Meta[ext.Version]; v != "" { + fmt.Fprintf(f, " dd.version=%s", v) + } + default: + fmt.Fprintf(f, "%%!%c(ddtrace.Span=%v)", c, s) + } +} + const ( keySamplingPriority = "_sampling_priority_v1" keySamplingPriorityRate = "_sampling_priority_rate_v1" diff --git a/ddtrace/tracer/span_test.go b/ddtrace/tracer/span_test.go index 3630b6593f..6f3099c63c 100644 --- a/ddtrace/tracer/span_test.go +++ b/ddtrace/tracer/span_test.go @@ -404,6 +404,44 @@ func TestSpanSamplingPriority(t *testing.T) { } } +func TestSpanLog(t *testing.T) { + t.Run("default", func(t *testing.T) { + assert := assert.New(t) + tracer, _, _, stop := startTestTracer(t, WithService("tracer.test")) + defer stop() + span := tracer.StartSpan("test.request").(*span) + expect := fmt.Sprintf("dd.trace_id=%d dd.span_id=%d dd.service=tracer.test", span.TraceID, span.SpanID) + assert.Equal(expect, fmt.Sprintf("%v", span)) + }) + + t.Run("env", func(t *testing.T) { + assert := assert.New(t) + tracer, _, _, stop := startTestTracer(t, WithService("tracer.test"), WithEnv("testenv")) + defer stop() + span := tracer.StartSpan("test.request").(*span) + expect := fmt.Sprintf("dd.trace_id=%d dd.span_id=%d dd.service=tracer.test dd.env=testenv", span.TraceID, span.SpanID) + assert.Equal(expect, fmt.Sprintf("%v", span)) + }) + + t.Run("version", func(t *testing.T) { + assert := assert.New(t) + tracer, _, _, stop := startTestTracer(t, WithService("tracer.test"), WithServiceVersion("1.2.3")) + defer stop() + span := tracer.StartSpan("test.request").(*span) + expect := fmt.Sprintf("dd.trace_id=%d dd.span_id=%d dd.service=tracer.test dd.version=1.2.3", span.TraceID, span.SpanID) + assert.Equal(expect, fmt.Sprintf("%v", span)) + }) + + t.Run("badformat", func(t *testing.T) { + assert := assert.New(t) + tracer, _, _, stop := startTestTracer(t, WithService("tracer.test"), WithServiceVersion("1.2.3")) + defer stop() + span := tracer.StartSpan("test.request").(*span) + expect := fmt.Sprintf("%%!b(ddtrace.Span=dd.trace_id=%d dd.span_id=%d dd.service=tracer.test dd.version=1.2.3)", span.TraceID, span.SpanID) + assert.Equal(expect, fmt.Sprintf("%b", span)) + }) +} + func BenchmarkSetTagMetric(b *testing.B) { span := newBasicSpan("bench.span") keys := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" From c3fd87ac995752338dd69a94a17af5dc08bac81c Mon Sep 17 00:00:00 2001 From: Kyle Nusbaum Date: Wed, 6 May 2020 09:37:48 -0500 Subject: [PATCH 2/9] Fix Tests --- ddtrace/tracer/span.go | 10 +++++++--- ddtrace/tracer/span_test.go | 8 ++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/ddtrace/tracer/span.go b/ddtrace/tracer/span.go index a5601ef759..e1a2bc1dd1 100644 --- a/ddtrace/tracer/span.go +++ b/ddtrace/tracer/span.go @@ -19,6 +19,7 @@ import ( "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" "github.com/tinylib/msgp/msgp" "golang.org/x/xerrors" @@ -343,13 +344,16 @@ func (s *span) Format(f fmt.State, c rune) { case 's': fmt.Fprint(f, s.String()) case 'v': - fmt.Fprintf(f, "dd.trace_id=%d dd.span_id=%d dd.service=%s", s.TraceID, s.SpanID, s.Service) + if tr, ok := internal.GetGlobalTracer().(*tracer); ok { + fmt.Fprintf(f, "dd.service=%s ", tr.config.serviceName) + } if e := s.Meta[ext.Environment]; e != "" { - fmt.Fprintf(f, " dd.env=%s", e) + fmt.Fprintf(f, "dd.env=%s ", e) } if v := s.Meta[ext.Version]; v != "" { - fmt.Fprintf(f, " dd.version=%s", v) + fmt.Fprintf(f, "dd.version=%s ", v) } + fmt.Fprintf(f, "dd.trace_id=%d dd.span_id=%d", s.TraceID, s.SpanID) default: fmt.Fprintf(f, "%%!%c(ddtrace.Span=%v)", c, s) } diff --git a/ddtrace/tracer/span_test.go b/ddtrace/tracer/span_test.go index 6f3099c63c..848b37abcc 100644 --- a/ddtrace/tracer/span_test.go +++ b/ddtrace/tracer/span_test.go @@ -410,7 +410,7 @@ func TestSpanLog(t *testing.T) { tracer, _, _, stop := startTestTracer(t, WithService("tracer.test")) defer stop() span := tracer.StartSpan("test.request").(*span) - expect := fmt.Sprintf("dd.trace_id=%d dd.span_id=%d dd.service=tracer.test", span.TraceID, span.SpanID) + expect := fmt.Sprintf("dd.service=tracer.test dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) assert.Equal(expect, fmt.Sprintf("%v", span)) }) @@ -419,7 +419,7 @@ func TestSpanLog(t *testing.T) { tracer, _, _, stop := startTestTracer(t, WithService("tracer.test"), WithEnv("testenv")) defer stop() span := tracer.StartSpan("test.request").(*span) - expect := fmt.Sprintf("dd.trace_id=%d dd.span_id=%d dd.service=tracer.test dd.env=testenv", span.TraceID, span.SpanID) + expect := fmt.Sprintf("dd.service=tracer.test dd.env=testenv dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) assert.Equal(expect, fmt.Sprintf("%v", span)) }) @@ -428,7 +428,7 @@ func TestSpanLog(t *testing.T) { tracer, _, _, stop := startTestTracer(t, WithService("tracer.test"), WithServiceVersion("1.2.3")) defer stop() span := tracer.StartSpan("test.request").(*span) - expect := fmt.Sprintf("dd.trace_id=%d dd.span_id=%d dd.service=tracer.test dd.version=1.2.3", span.TraceID, span.SpanID) + expect := fmt.Sprintf("dd.service=tracer.test dd.version=1.2.3 dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) assert.Equal(expect, fmt.Sprintf("%v", span)) }) @@ -437,7 +437,7 @@ func TestSpanLog(t *testing.T) { tracer, _, _, stop := startTestTracer(t, WithService("tracer.test"), WithServiceVersion("1.2.3")) defer stop() span := tracer.StartSpan("test.request").(*span) - expect := fmt.Sprintf("%%!b(ddtrace.Span=dd.trace_id=%d dd.span_id=%d dd.service=tracer.test dd.version=1.2.3)", span.TraceID, span.SpanID) + expect := fmt.Sprintf("%%!b(ddtrace.Span=dd.service=tracer.test dd.version=1.2.3 dd.trace_id=%d dd.span_id=%d)", span.TraceID, span.SpanID) assert.Equal(expect, fmt.Sprintf("%b", span)) }) } From 9a1debb6650ca8ee278f589d84d590532103c0f3 Mon Sep 17 00:00:00 2001 From: Kyle Nusbaum Date: Wed, 6 May 2020 10:23:03 -0500 Subject: [PATCH 3/9] use tracer for source of service, env, and version, add tests. --- ddtrace/tracer/span.go | 13 +++++++------ ddtrace/tracer/span_test.go | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/ddtrace/tracer/span.go b/ddtrace/tracer/span.go index e1a2bc1dd1..85e485b373 100644 --- a/ddtrace/tracer/span.go +++ b/ddtrace/tracer/span.go @@ -346,12 +346,13 @@ func (s *span) Format(f fmt.State, c rune) { case 'v': if tr, ok := internal.GetGlobalTracer().(*tracer); ok { fmt.Fprintf(f, "dd.service=%s ", tr.config.serviceName) - } - if e := s.Meta[ext.Environment]; e != "" { - fmt.Fprintf(f, "dd.env=%s ", e) - } - if v := s.Meta[ext.Version]; v != "" { - fmt.Fprintf(f, "dd.version=%s ", v) + if env, ok := tr.config.globalTags[ext.Environment]; ok { + fmt.Fprintf(f, "dd.env=%s ", env) + } + if tr.config.version != "" { + fmt.Fprintf(f, "dd.version=%s ", tr.config.version) + } + } fmt.Fprintf(f, "dd.trace_id=%d dd.span_id=%d", s.TraceID, s.SpanID) default: diff --git a/ddtrace/tracer/span_test.go b/ddtrace/tracer/span_test.go index 848b37abcc..f895ebb4c9 100644 --- a/ddtrace/tracer/span_test.go +++ b/ddtrace/tracer/span_test.go @@ -432,6 +432,24 @@ func TestSpanLog(t *testing.T) { assert.Equal(expect, fmt.Sprintf("%v", span)) }) + t.Run("full", func(t *testing.T) { + assert := assert.New(t) + tracer, _, _, stop := startTestTracer(t, WithService("tracer.test"), WithServiceVersion("1.2.3"), WithEnv("testenv")) + defer stop() + span := tracer.StartSpan("test.request").(*span) + expect := fmt.Sprintf("dd.service=tracer.test dd.env=testenv dd.version=1.2.3 dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) + assert.Equal(expect, fmt.Sprintf("%v", span)) + }) + + t.Run("subservice", func(t *testing.T) { + assert := assert.New(t) + tracer, _, _, stop := startTestTracer(t, WithService("tracer.test")) + defer stop() + span := tracer.StartSpan("test.request", ServiceName("subservice name")).(*span) + expect := fmt.Sprintf("dd.service=tracer.test dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) + assert.Equal(expect, fmt.Sprintf("%v", span)) + }) + t.Run("badformat", func(t *testing.T) { assert := assert.New(t) tracer, _, _, stop := startTestTracer(t, WithService("tracer.test"), WithServiceVersion("1.2.3")) From 3e72800e803f8c040f107508f83f6785424d291b Mon Sep 17 00:00:00 2001 From: Kyle Nusbaum Date: Wed, 6 May 2020 10:33:43 -0500 Subject: [PATCH 4/9] improve test --- ddtrace/tracer/span_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ddtrace/tracer/span_test.go b/ddtrace/tracer/span_test.go index f895ebb4c9..d968fb7b8d 100644 --- a/ddtrace/tracer/span_test.go +++ b/ddtrace/tracer/span_test.go @@ -443,10 +443,10 @@ func TestSpanLog(t *testing.T) { t.Run("subservice", func(t *testing.T) { assert := assert.New(t) - tracer, _, _, stop := startTestTracer(t, WithService("tracer.test")) + tracer, _, _, stop := startTestTracer(t, WithService("tracer.test"), WithServiceVersion("1.2.3"), WithEnv("testenv")) defer stop() span := tracer.StartSpan("test.request", ServiceName("subservice name")).(*span) - expect := fmt.Sprintf("dd.service=tracer.test dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) + expect := fmt.Sprintf("dd.service=tracer.test dd.env=testenv dd.version=1.2.3 dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) assert.Equal(expect, fmt.Sprintf("%v", span)) }) From edb0b17c1a32aa2ec027c81bd9b9072ce95e7670 Mon Sep 17 00:00:00 2001 From: Kyle Nusbaum Date: Thu, 7 May 2020 10:23:12 -0500 Subject: [PATCH 5/9] Address concerns --- ddtrace/tracer/span.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ddtrace/tracer/span.go b/ddtrace/tracer/span.go index 85e485b373..3f85b1ed52 100644 --- a/ddtrace/tracer/span.go +++ b/ddtrace/tracer/span.go @@ -9,6 +9,7 @@ package tracer import ( "fmt" + "os" "reflect" "runtime" "runtime/debug" @@ -20,6 +21,7 @@ import ( "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" + "gopkg.in/DataDog/dd-trace-go.v1/internal/globalconfig" "github.com/tinylib/msgp/msgp" "golang.org/x/xerrors" @@ -344,8 +346,10 @@ func (s *span) Format(f fmt.State, c rune) { case 's': fmt.Fprint(f, s.String()) case 'v': + if svc := globalconfig.ServiceName(); svc != "" { + fmt.Fprintf(f, "dd.service=%s ", svc) + } if tr, ok := internal.GetGlobalTracer().(*tracer); ok { - fmt.Fprintf(f, "dd.service=%s ", tr.config.serviceName) if env, ok := tr.config.globalTags[ext.Environment]; ok { fmt.Fprintf(f, "dd.env=%s ", env) } @@ -353,6 +357,13 @@ func (s *span) Format(f fmt.State, c rune) { fmt.Fprintf(f, "dd.version=%s ", tr.config.version) } + } else { + if env := os.Getenv("DD_ENV"); env != "" { + fmt.Fprintf(f, "dd.env=%s ", env) + } + if v := os.Getenv("DD_VERSION"); v != "" { + fmt.Fprintf(f, "dd.version=%s ", v) + } } fmt.Fprintf(f, "dd.trace_id=%d dd.span_id=%d", s.TraceID, s.SpanID) default: From 9e81e3373c6be1e143c0a5df66d041a40e3099a8 Mon Sep 17 00:00:00 2001 From: Kyle Nusbaum Date: Thu, 7 May 2020 10:53:24 -0500 Subject: [PATCH 6/9] look for env, version, service in DD_TAGS --- ddtrace/tracer/option.go | 43 ++++++++++++++---------- ddtrace/tracer/option_test.go | 27 +++++++++++++++ ddtrace/tracer/span_test.go | 62 +++++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+), 17 deletions(-) diff --git a/ddtrace/tracer/option.go b/ddtrace/tracer/option.go index f9df48736a..dcf640a617 100644 --- a/ddtrace/tracer/option.go +++ b/ddtrace/tracer/option.go @@ -105,18 +105,6 @@ func defaults(c *config) { log.Warn("unable to look up hostname: %v", err) } } - if v := os.Getenv("DD_ENV"); v != "" { - WithEnv(v)(c) - } - if v := os.Getenv("DD_SERVICE"); v != "" { - c.serviceName = v - globalconfig.SetServiceName(v) - } else { - c.serviceName = filepath.Base(os.Args[0]) - } - if ver := os.Getenv("DD_VERSION"); ver != "" { - c.version = ver - } if v := os.Getenv("DD_TAGS"); v != "" { for _, tag := range strings.Split(v, ",") { tag = strings.TrimSpace(tag) @@ -125,14 +113,35 @@ func defaults(c *config) { } kv := strings.SplitN(tag, ":", 2) k := strings.TrimSpace(kv[0]) - switch len(kv) { - case 1: - WithGlobalTag(k, "")(c) - case 2: - WithGlobalTag(k, strings.TrimSpace(kv[1]))(c) + var v string + if len(kv) == 2 { + v = strings.TrimSpace(kv[1]) + } + switch k { + case "service": + c.serviceName = v + globalconfig.SetServiceName(v) + case "env": + WithEnv(v)(c) + case "version": + c.version = v + default: + WithGlobalTag(k, v)(c) } } } + if v := os.Getenv("DD_ENV"); v != "" { + WithEnv(v)(c) + } + if v := os.Getenv("DD_SERVICE"); v != "" { + c.serviceName = v + globalconfig.SetServiceName(v) + } else if c.serviceName == "" { + c.serviceName = filepath.Base(os.Args[0]) + } + if ver := os.Getenv("DD_VERSION"); ver != "" { + c.version = ver + } } func statsTags(c *config) []string { diff --git a/ddtrace/tracer/option_test.go b/ddtrace/tracer/option_test.go index f4a0190753..a3ed820677 100644 --- a/ddtrace/tracer/option_test.go +++ b/ddtrace/tracer/option_test.go @@ -145,6 +145,33 @@ func TestTracerOptionsDefaults(t *testing.T) { assert.False(ok) assert.Equal(nil, dVal) }) + + t.Run("dd_tags/service", func(t *testing.T) { + os.Setenv("DD_TAGS", "service:testservice") + defer os.Unsetenv("DD_TAGS") + assert := assert.New(t) + var c config + defaults(&c) + assert.Equal("testservice", c.serviceName) + }) + + t.Run("dd_tags/version", func(t *testing.T) { + os.Setenv("DD_TAGS", "version:1.2.3") + defer os.Unsetenv("DD_TAGS") + assert := assert.New(t) + var c config + defaults(&c) + assert.Equal("1.2.3", c.version) + }) + + t.Run("dd_tags/env", func(t *testing.T) { + os.Setenv("DD_TAGS", "env:testenv") + defer os.Unsetenv("DD_TAGS") + assert := assert.New(t) + var c config + defaults(&c) + assert.Equal("testenv", c.globalTags["env"]) + }) } func TestServiceName(t *testing.T) { diff --git a/ddtrace/tracer/span_test.go b/ddtrace/tracer/span_test.go index d968fb7b8d..5314e5bf93 100644 --- a/ddtrace/tracer/span_test.go +++ b/ddtrace/tracer/span_test.go @@ -8,6 +8,7 @@ package tracer import ( "errors" "fmt" + "os" "strings" "testing" "time" @@ -450,6 +451,32 @@ func TestSpanLog(t *testing.T) { assert.Equal(expect, fmt.Sprintf("%v", span)) }) + t.Run("dd_tags", func(t *testing.T) { + os.Setenv("DD_TAGS", "version:1.2.3,env:testenv,service:tracer.test") + defer os.Unsetenv("DD_TAGS") + assert := assert.New(t) + tracer, _, _, stop := startTestTracer(t) + defer stop() + span := tracer.StartSpan("test.request").(*span) + expect := fmt.Sprintf("dd.service=tracer.test dd.env=testenv dd.version=1.2.3 dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) + assert.Equal(expect, fmt.Sprintf("%v", span)) + }) + + t.Run("env", func(t *testing.T) { + os.Setenv("DD_SERVICE", "tracer.test") + defer os.Unsetenv("DD_SERVICE") + os.Setenv("DD_VERSION", "1.2.3") + defer os.Unsetenv("DD_VERSION") + os.Setenv("DD_ENV", "testenv") + defer os.Unsetenv("DD_ENV") + assert := assert.New(t) + tracer, _, _, stop := startTestTracer(t) + defer stop() + span := tracer.StartSpan("test.request").(*span) + expect := fmt.Sprintf("dd.service=tracer.test dd.env=testenv dd.version=1.2.3 dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) + assert.Equal(expect, fmt.Sprintf("%v", span)) + }) + t.Run("badformat", func(t *testing.T) { assert := assert.New(t) tracer, _, _, stop := startTestTracer(t, WithService("tracer.test"), WithServiceVersion("1.2.3")) @@ -458,6 +485,41 @@ func TestSpanLog(t *testing.T) { expect := fmt.Sprintf("%%!b(ddtrace.Span=dd.service=tracer.test dd.version=1.2.3 dd.trace_id=%d dd.span_id=%d)", span.TraceID, span.SpanID) assert.Equal(expect, fmt.Sprintf("%b", span)) }) + + t.Run("notracer/options", func(t *testing.T) { + assert := assert.New(t) + tracer, _, _, stop := startTestTracer(t, WithService("tracer.test"), WithServiceVersion("1.2.3"), WithEnv("testenv")) + span := tracer.StartSpan("test.request").(*span) + stop() + expect := fmt.Sprintf("dd.service=tracer.test dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) + assert.Equal(expect, fmt.Sprintf("%v", span)) + }) + + t.Run("notracer/dd_tags", func(t *testing.T) { + os.Setenv("DD_TAGS", "version:1.2.3,env:testenv,service:tracer.test") + defer os.Unsetenv("DD_TAGS") + assert := assert.New(t) + tracer, _, _, stop := startTestTracer(t) + span := tracer.StartSpan("test.request").(*span) + stop() + expect := fmt.Sprintf("dd.service=tracer.test dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) + assert.Equal(expect, fmt.Sprintf("%v", span)) + }) + + t.Run("notracer/env", func(t *testing.T) { + os.Setenv("DD_SERVICE", "tracer.test") + defer os.Unsetenv("DD_SERVICE") + os.Setenv("DD_VERSION", "1.2.3") + defer os.Unsetenv("DD_VERSION") + os.Setenv("DD_ENV", "testenv") + defer os.Unsetenv("DD_ENV") + assert := assert.New(t) + tracer, _, _, stop := startTestTracer(t) + span := tracer.StartSpan("test.request").(*span) + stop() + expect := fmt.Sprintf("dd.service=tracer.test dd.env=testenv dd.version=1.2.3 dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) + assert.Equal(expect, fmt.Sprintf("%v", span)) + }) } func BenchmarkSetTagMetric(b *testing.B) { From 5d9bb31c674e670ba8bcca42d44b0e0cc6a37e6b Mon Sep 17 00:00:00 2001 From: Kyle Nusbaum Date: Fri, 8 May 2020 15:53:22 -0500 Subject: [PATCH 7/9] revert DD_TAGS changes. --- ddtrace/tracer/option.go | 43 ++++++++++++++--------------------- ddtrace/tracer/option_test.go | 27 ---------------------- 2 files changed, 17 insertions(+), 53 deletions(-) diff --git a/ddtrace/tracer/option.go b/ddtrace/tracer/option.go index dcf640a617..f9df48736a 100644 --- a/ddtrace/tracer/option.go +++ b/ddtrace/tracer/option.go @@ -105,43 +105,34 @@ func defaults(c *config) { log.Warn("unable to look up hostname: %v", err) } } - if v := os.Getenv("DD_TAGS"); v != "" { - for _, tag := range strings.Split(v, ",") { - tag = strings.TrimSpace(tag) - if tag == "" { - continue - } - kv := strings.SplitN(tag, ":", 2) - k := strings.TrimSpace(kv[0]) - var v string - if len(kv) == 2 { - v = strings.TrimSpace(kv[1]) - } - switch k { - case "service": - c.serviceName = v - globalconfig.SetServiceName(v) - case "env": - WithEnv(v)(c) - case "version": - c.version = v - default: - WithGlobalTag(k, v)(c) - } - } - } if v := os.Getenv("DD_ENV"); v != "" { WithEnv(v)(c) } if v := os.Getenv("DD_SERVICE"); v != "" { c.serviceName = v globalconfig.SetServiceName(v) - } else if c.serviceName == "" { + } else { c.serviceName = filepath.Base(os.Args[0]) } if ver := os.Getenv("DD_VERSION"); ver != "" { c.version = ver } + if v := os.Getenv("DD_TAGS"); v != "" { + for _, tag := range strings.Split(v, ",") { + tag = strings.TrimSpace(tag) + if tag == "" { + continue + } + kv := strings.SplitN(tag, ":", 2) + k := strings.TrimSpace(kv[0]) + switch len(kv) { + case 1: + WithGlobalTag(k, "")(c) + case 2: + WithGlobalTag(k, strings.TrimSpace(kv[1]))(c) + } + } + } } func statsTags(c *config) []string { diff --git a/ddtrace/tracer/option_test.go b/ddtrace/tracer/option_test.go index a3ed820677..f4a0190753 100644 --- a/ddtrace/tracer/option_test.go +++ b/ddtrace/tracer/option_test.go @@ -145,33 +145,6 @@ func TestTracerOptionsDefaults(t *testing.T) { assert.False(ok) assert.Equal(nil, dVal) }) - - t.Run("dd_tags/service", func(t *testing.T) { - os.Setenv("DD_TAGS", "service:testservice") - defer os.Unsetenv("DD_TAGS") - assert := assert.New(t) - var c config - defaults(&c) - assert.Equal("testservice", c.serviceName) - }) - - t.Run("dd_tags/version", func(t *testing.T) { - os.Setenv("DD_TAGS", "version:1.2.3") - defer os.Unsetenv("DD_TAGS") - assert := assert.New(t) - var c config - defaults(&c) - assert.Equal("1.2.3", c.version) - }) - - t.Run("dd_tags/env", func(t *testing.T) { - os.Setenv("DD_TAGS", "env:testenv") - defer os.Unsetenv("DD_TAGS") - assert := assert.New(t) - var c config - defaults(&c) - assert.Equal("testenv", c.globalTags["env"]) - }) } func TestServiceName(t *testing.T) { From 0ffb5bdb842ad2572df8bdd41a7fc3afe533a6e0 Mon Sep 17 00:00:00 2001 From: Kyle Nusbaum Date: Fri, 8 May 2020 15:56:33 -0500 Subject: [PATCH 8/9] revert tags-related tests --- ddtrace/tracer/span_test.go | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/ddtrace/tracer/span_test.go b/ddtrace/tracer/span_test.go index 5314e5bf93..1108f0d598 100644 --- a/ddtrace/tracer/span_test.go +++ b/ddtrace/tracer/span_test.go @@ -451,17 +451,6 @@ func TestSpanLog(t *testing.T) { assert.Equal(expect, fmt.Sprintf("%v", span)) }) - t.Run("dd_tags", func(t *testing.T) { - os.Setenv("DD_TAGS", "version:1.2.3,env:testenv,service:tracer.test") - defer os.Unsetenv("DD_TAGS") - assert := assert.New(t) - tracer, _, _, stop := startTestTracer(t) - defer stop() - span := tracer.StartSpan("test.request").(*span) - expect := fmt.Sprintf("dd.service=tracer.test dd.env=testenv dd.version=1.2.3 dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) - assert.Equal(expect, fmt.Sprintf("%v", span)) - }) - t.Run("env", func(t *testing.T) { os.Setenv("DD_SERVICE", "tracer.test") defer os.Unsetenv("DD_SERVICE") @@ -495,17 +484,6 @@ func TestSpanLog(t *testing.T) { assert.Equal(expect, fmt.Sprintf("%v", span)) }) - t.Run("notracer/dd_tags", func(t *testing.T) { - os.Setenv("DD_TAGS", "version:1.2.3,env:testenv,service:tracer.test") - defer os.Unsetenv("DD_TAGS") - assert := assert.New(t) - tracer, _, _, stop := startTestTracer(t) - span := tracer.StartSpan("test.request").(*span) - stop() - expect := fmt.Sprintf("dd.service=tracer.test dd.trace_id=%d dd.span_id=%d", span.TraceID, span.SpanID) - assert.Equal(expect, fmt.Sprintf("%v", span)) - }) - t.Run("notracer/env", func(t *testing.T) { os.Setenv("DD_SERVICE", "tracer.test") defer os.Unsetenv("DD_SERVICE") From 6ef6cdf1e9b82cddbed779a39fda51e365d60679 Mon Sep 17 00:00:00 2001 From: Kyle Nusbaum Date: Fri, 8 May 2020 16:02:37 -0500 Subject: [PATCH 9/9] address comments. --- ddtrace/tracer/span.go | 1 - 1 file changed, 1 deletion(-) diff --git a/ddtrace/tracer/span.go b/ddtrace/tracer/span.go index 3f85b1ed52..efc3561a00 100644 --- a/ddtrace/tracer/span.go +++ b/ddtrace/tracer/span.go @@ -356,7 +356,6 @@ func (s *span) Format(f fmt.State, c rune) { if tr.config.version != "" { fmt.Fprintf(f, "dd.version=%s ", tr.config.version) } - } else { if env := os.Getenv("DD_ENV"); env != "" { fmt.Fprintf(f, "dd.env=%s ", env)