aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugin/trace/trace.go44
-rw-r--r--plugin/trace/trace_test.go28
2 files changed, 51 insertions, 21 deletions
diff --git a/plugin/trace/trace.go b/plugin/trace/trace.go
index bbca68849..c1b0fb4cf 100644
--- a/plugin/trace/trace.go
+++ b/plugin/trace/trace.go
@@ -25,14 +25,34 @@ import (
)
const (
- tagName = "coredns.io/name"
- tagType = "coredns.io/type"
- tagRcode = "coredns.io/rcode"
- tagProto = "coredns.io/proto"
- tagRemote = "coredns.io/remote"
defaultTopLevelSpanName = "servedns"
)
+type traceTags struct {
+ Name string
+ Type string
+ Rcode string
+ Proto string
+ Remote string
+}
+
+var tagByProvider = map[string]traceTags{
+ "default": {
+ Name: "coredns.io/name",
+ Type: "coredns.io/type",
+ Rcode: "coredns.io/rcode",
+ Proto: "coredns.io/proto",
+ Remote: "coredns.io/remote",
+ },
+ "datadog": {
+ Name: "coredns.io@name",
+ Type: "coredns.io@type",
+ Rcode: "coredns.io@rcode",
+ Proto: "coredns.io@proto",
+ Remote: "coredns.io@remote",
+ },
+}
+
type trace struct {
count uint64 // as per Go spec, needs to be first element in a struct
@@ -46,6 +66,7 @@ type trace struct {
every uint64
datadogAnalyticsRate float64
Once sync.Once
+ tagSet traceTags
}
func (t *trace) Tracer() ot.Tracer {
@@ -68,6 +89,7 @@ func (t *trace) OnStartup() error {
tracer.WithAnalyticsRate(t.datadogAnalyticsRate),
)
t.tracer = tracer
+ t.tagSet = tagByProvider["datadog"]
default:
err = fmt.Errorf("unknown endpoint type: %s", t.EndpointType)
}
@@ -90,6 +112,8 @@ func (t *trace) setupZipkin() error {
return err
}
t.tracer = zipkinot.Wrap(tracer)
+
+ t.tagSet = tagByProvider["default"]
return err
}
@@ -119,11 +143,11 @@ func (t *trace) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg)
ctx = ot.ContextWithSpan(ctx, span)
status, err := plugin.NextOrFailure(t.Name(), t.Next, ctx, rw, r)
- span.SetTag(tagName, req.Name())
- span.SetTag(tagType, req.Type())
- span.SetTag(tagProto, req.Proto())
- span.SetTag(tagRemote, req.IP())
- span.SetTag(tagRcode, rcode.ToString(rw.Rcode))
+ span.SetTag(t.tagSet.Name, req.Name())
+ span.SetTag(t.tagSet.Type, req.Type())
+ span.SetTag(t.tagSet.Proto, req.Proto())
+ span.SetTag(t.tagSet.Remote, req.IP())
+ span.SetTag(t.tagSet.Rcode, rcode.ToString(rw.Rcode))
return status, err
}
diff --git a/plugin/trace/trace_test.go b/plugin/trace/trace_test.go
index 613f88b6d..832447138 100644
--- a/plugin/trace/trace_test.go
+++ b/plugin/trace/trace_test.go
@@ -28,6 +28,11 @@ func TestStartup(t *testing.T) {
t.Errorf("Error starting tracing plugin: %s", err)
return
}
+
+ if m.tagSet != tagByProvider["default"] {
+ t.Errorf("TagSet by proviser hasn't been corectly initialized")
+ }
+
if m.Tracer() == nil {
t.Errorf("Error, no tracer created")
}
@@ -51,7 +56,7 @@ func TestTrace(t *testing.T) {
question: new(dns.Msg).SetQuestion("example.net.", dns.TypeCNAME),
},
}
-
+ defaultTagSet := tagByProvider["default"]
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
@@ -65,6 +70,7 @@ func TestTrace(t *testing.T) {
}),
every: 1,
tracer: m,
+ tagSet: defaultTagSet,
}
ctx := context.TODO()
if _, err := tr.ServeDNS(ctx, w, tc.question); err != nil {
@@ -83,20 +89,20 @@ func TestTrace(t *testing.T) {
t.Errorf("Unexpected span name: rootSpan.Name: want %v, got %v", defaultTopLevelSpanName, rootSpan.OperationName)
}
- if rootSpan.Tag(tagName) != req.Name() {
- t.Errorf("Unexpected span tag: rootSpan.Tag(%v): want %v, got %v", tagName, req.Name(), rootSpan.Tag(tagName))
+ if rootSpan.Tag(defaultTagSet.Name) != req.Name() {
+ t.Errorf("Unexpected span tag: rootSpan.Tag(%v): want %v, got %v", defaultTagSet.Name, req.Name(), rootSpan.Tag(defaultTagSet.Name))
}
- if rootSpan.Tag(tagType) != req.Type() {
- t.Errorf("Unexpected span tag: rootSpan.Tag(%v): want %v, got %v", tagType, req.Type(), rootSpan.Tag(tagType))
+ if rootSpan.Tag(defaultTagSet.Type) != req.Type() {
+ t.Errorf("Unexpected span tag: rootSpan.Tag(%v): want %v, got %v", defaultTagSet.Type, req.Type(), rootSpan.Tag(defaultTagSet.Type))
}
- if rootSpan.Tag(tagProto) != req.Proto() {
- t.Errorf("Unexpected span tag: rootSpan.Tag(%v): want %v, got %v", tagProto, req.Proto(), rootSpan.Tag(tagProto))
+ if rootSpan.Tag(defaultTagSet.Proto) != req.Proto() {
+ t.Errorf("Unexpected span tag: rootSpan.Tag(%v): want %v, got %v", defaultTagSet.Proto, req.Proto(), rootSpan.Tag(defaultTagSet.Proto))
}
- if rootSpan.Tag(tagRemote) != req.IP() {
- t.Errorf("Unexpected span tag: rootSpan.Tag(%v): want %v, got %v", tagRemote, req.IP(), rootSpan.Tag(tagRemote))
+ if rootSpan.Tag(defaultTagSet.Remote) != req.IP() {
+ t.Errorf("Unexpected span tag: rootSpan.Tag(%v): want %v, got %v", defaultTagSet.Remote, req.IP(), rootSpan.Tag(defaultTagSet.Remote))
}
- if rootSpan.Tag(tagRcode) != rcode.ToString(tc.rcode) {
- t.Errorf("Unexpected span tag: rootSpan.Tag(%v): want %v, got %v", tagRcode, rcode.ToString(tc.rcode), rootSpan.Tag(tagRcode))
+ if rootSpan.Tag(defaultTagSet.Rcode) != rcode.ToString(tc.rcode) {
+ t.Errorf("Unexpected span tag: rootSpan.Tag(%v): want %v, got %v", defaultTagSet.Rcode, rcode.ToString(tc.rcode), rootSpan.Tag(defaultTagSet.Rcode))
}
})
}