Skip to content

Commit 2760eb8

Browse files
committed
implement tags according to spec
tested with: add-tags = foo=var,term=${WAIT_HOSTS:defalut-shouldnotseeme},term2=${TERM2:default-should-see-me},term3=${term3},bar=baz
1 parent be75917 commit 2760eb8

File tree

1 file changed

+45
-10
lines changed

1 file changed

+45
-10
lines changed

jaeger/jaeger.go

+45-10
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package jaeger
22

33
import (
4+
"fmt"
45
"io"
5-
"log"
6+
"os"
67
"strings"
78
"time"
89

910
"flag"
1011

1112
"github.com/grafana/globalconf"
1213
opentracing "github.com/opentracing/opentracing-go"
14+
log "github.com/sirupsen/logrus"
1315
jaegercfg "github.com/uber/jaeger-client-go/config"
1416
jaegerlog "github.com/uber/jaeger-client-go/log"
1517
)
@@ -52,18 +54,51 @@ func ConfigSetup() {
5254
}
5355

5456
func ConfigProcess() {
55-
addTagsRaw = strings.TrimSpace(addTagsRaw)
56-
if len(addTagsRaw) == 0 {
57-
return
57+
var err error
58+
addTagsParsed, err = parseTags(addTagsRaw)
59+
if err != nil {
60+
log.Fatalf("jaeger: Config validation error. %s", err)
5861
}
59-
tagSpecs := strings.Split(addTagsRaw, ",")
60-
for _, tagSpec := range tagSpecs {
61-
split := strings.Split(tagSpec, "=")
62-
if len(split) != 2 {
63-
log.Fatalf("cannot parse add-tags value %q", tagSpec)
62+
}
63+
64+
// parseTags parses the given string into a slice of opentracing.Tag.
65+
// the string must be a comma separated list of key=value pairs, where value
66+
// can be specified as ${key:default}, where `key` is an environment
67+
// variable and `default` is the value to use in case the env var is not set
68+
func parseTags(input string) ([]opentracing.Tag, error) {
69+
pairs := strings.Split(input, ",")
70+
var tags []opentracing.Tag
71+
for _, pair := range pairs {
72+
if pair == "" {
73+
continue
74+
}
75+
76+
if !strings.Contains(pair, "=") {
77+
return nil, fmt.Errorf("invalid tag specifier %q", pair)
6478
}
65-
addTagsParsed = append(addTagsParsed, opentracing.Tag{Key: split[0], Value: split[1]})
79+
kv := strings.SplitN(pair, "=", 2)
80+
key, val := strings.TrimSpace(kv[0]), strings.TrimSpace(kv[1])
81+
if len(key) == 0 || len(val) == 0 {
82+
return nil, fmt.Errorf("invalid tag specifier %q", pair)
83+
}
84+
85+
if strings.HasPrefix(val, "${") && strings.HasSuffix(val, "}") {
86+
spec := strings.SplitN(val[2:len(val)-1], ":", 2)
87+
envVar := spec[0]
88+
var envDefault string
89+
if len(spec) == 2 {
90+
envDefault = spec[1]
91+
}
92+
val = os.Getenv(envVar)
93+
if val == "" && envDefault != "" {
94+
val = envDefault
95+
}
96+
}
97+
98+
tags = append(tags, opentracing.Tag{Key: key, Value: val})
6699
}
100+
101+
return tags, nil
67102
}
68103

69104
// Get() returns a jaeger tracer

0 commit comments

Comments
 (0)