Skip to content

Commit 7ef5ca0

Browse files
authored
feat: add trace headers flag (#253)
1 parent e155169 commit 7ef5ca0

File tree

4 files changed

+43
-7
lines changed

4 files changed

+43
-7
lines changed

cmd.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,15 @@ func Split(slice []string, sep string) ([][2]string, error) {
2020

2121
return res, nil
2222
}
23+
24+
func sliceToMap(s []string) (map[string]string, error) {
25+
m := make(map[string]string, len(s))
26+
kvs, err := Split(s, "=")
27+
if err != nil {
28+
return nil, err
29+
}
30+
for _, kv := range kvs {
31+
m[kv[0]] = kv[1]
32+
}
33+
return m, nil
34+
}

profile.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,12 @@ func NewProfiler(c *cli.Context, svc string, log *logger.Logger) (*pyroscope.Pro
9090
Path: u.Path,
9191
}
9292

93-
tags := map[string]string{}
93+
var tags map[string]string
9494
if pairs := c.StringSlice(FlagProfilingTags); len(pairs) > 0 {
95-
strTags, err := Split(pairs, "=")
95+
tags, err = sliceToMap(pairs)
9696
if err != nil {
9797
return nil, err
9898
}
99-
for _, kv := range strTags {
100-
tags[kv[0]] = kv[1]
101-
}
10299
}
103100

104101
types := allProfilingTypes

trace.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const (
2222
FlagTracingEndpoint = "tracing.endpoint"
2323
FlagTracingEndpointInsecure = "tracing.endpoint-insecure"
2424
FlagTracingTags = "tracing.tags"
25+
FlagTracingHeaders = "tracing.headers"
2526
FlagTracingRatio = "tracing.ratio"
2627
)
2728

@@ -47,6 +48,11 @@ var TracingFlags = Flags{
4748
Usage: "A list of tags appended to every trace. Format: key=value.",
4849
EnvVars: []string{"TRACING_TAGS"},
4950
},
51+
&cli.StringSliceFlag{
52+
Name: FlagTracingHeaders,
53+
Usage: "A list of headers appended to every trace when supported by the exporter. Format: key=value.",
54+
EnvVars: []string{"TRACING_HEADERS"},
55+
},
5056
&cli.Float64Flag{
5157
Name: FlagTracingRatio,
5258
Usage: "The ratio between 0 and 1 of sample traces to take.",
@@ -94,19 +100,30 @@ func createExporter(c *cli.Context) (trace.SpanExporter, error) {
94100
backend := c.String(FlagTracingExporter)
95101
endpoint := c.String(FlagTracingEndpoint)
96102

103+
var (
104+
headers map[string]string
105+
err error
106+
)
107+
if h := c.StringSlice(FlagTracingHeaders); len(h) > 0 {
108+
headers, err = sliceToMap(h)
109+
if err != nil {
110+
return nil, err
111+
}
112+
}
113+
97114
switch backend {
98115
case "":
99116
return nil, nil
100117
case "zipkin":
101118
return zipkin.New(endpoint)
102119
case "otlphttp":
103-
opts := []otlptracehttp.Option{otlptracehttp.WithEndpoint(endpoint)}
120+
opts := []otlptracehttp.Option{otlptracehttp.WithEndpoint(endpoint), otlptracehttp.WithHeaders(headers)}
104121
if c.Bool(FlagTracingEndpointInsecure) {
105122
opts = append(opts, otlptracehttp.WithInsecure())
106123
}
107124
return otlptracehttp.New(c.Context, opts...)
108125
case "otlpgrpc":
109-
opts := []otlptracegrpc.Option{otlptracegrpc.WithEndpoint(endpoint)}
126+
opts := []otlptracegrpc.Option{otlptracegrpc.WithEndpoint(endpoint), otlptracegrpc.WithHeaders(headers)}
110127
if c.Bool(FlagTracingEndpointInsecure) {
111128
opts = append(opts, otlptracegrpc.WithInsecure())
112129
}

trace_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ func TestNewTracer(t *testing.T) {
1717
exporter string
1818
endpoint string
1919
tags []string
20+
headers []string
2021
ratio float64
2122
wantErr require.ErrorAssertionFunc
2223
}{
@@ -42,6 +43,14 @@ func TestNewTracer(t *testing.T) {
4243
ratio: 1.0,
4344
wantErr: require.NoError,
4445
},
46+
{
47+
name: "with headers",
48+
exporter: "otlphttp",
49+
endpoint: "localhost:1234",
50+
headers: []string{"cluster=test", "namespace=num"},
51+
ratio: 1.0,
52+
wantErr: require.NoError,
53+
},
4554
{
4655
name: "unknown exporter",
4756
exporter: "some-exporter",
@@ -74,6 +83,7 @@ func TestNewTracer(t *testing.T) {
7483
fs.String(cmd.FlagTracingExporter, test.exporter, "doc")
7584
fs.String(cmd.FlagTracingEndpoint, test.endpoint, "doc")
7685
fs.Var(cli.NewStringSlice(test.tags...), cmd.FlagTracingTags, "doc")
86+
fs.Var(cli.NewStringSlice(test.headers...), cmd.FlagTracingHeaders, "doc")
7787
fs.Float64(cmd.FlagTracingRatio, test.ratio, "doc")
7888

7989
log := logger.New(io.Discard, logger.LogfmtFormat(), logger.Error)

0 commit comments

Comments
 (0)