Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit b7e0797

Browse files
committedDec 2, 2024·
Auto set span headers for each request
1 parent ed61add commit b7e0797

15 files changed

+48
-38
lines changed
 

‎api/cloudcontroller/wrapper/trace_request.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ type CCTraceHeaderRequest struct {
1212
}
1313

1414
// NewCCTraceHeaderRequest returns a pointer to a CCTraceHeaderRequest wrapper.
15-
func NewCCTraceHeaderRequest(trace, span string) *CCTraceHeaderRequest {
15+
func NewCCTraceHeaderRequest(trace string) *CCTraceHeaderRequest {
1616
return &CCTraceHeaderRequest{
17-
headers: shared.NewTraceHeaders(trace, span),
17+
headers: shared.NewTraceHeaders(trace),
1818
}
1919
}
2020

‎api/cloudcontroller/wrapper/trace_request_test.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,14 @@ var _ = Describe("CCTraceHeaderRequest", func() {
2323
makeErr error
2424

2525
traceHeader string
26-
spanHeader string
2726
)
2827

2928
BeforeEach(func() {
3029
fakeConnection = new(cloudcontrollerfakes.FakeConnection)
3130

3231
traceHeader = "trace-id"
33-
spanHeader = "span-id"
3432

35-
wrapper = NewCCTraceHeaderRequest(traceHeader, spanHeader).Wrap(fakeConnection)
33+
wrapper = NewCCTraceHeaderRequest(traceHeader).Wrap(fakeConnection)
3634

3735
body := bytes.NewReader([]byte("foo"))
3836

@@ -54,7 +52,7 @@ var _ = Describe("CCTraceHeaderRequest", func() {
5452
It("Adds the request headers", func() {
5553
Expect(makeErr).NotTo(HaveOccurred())
5654
Expect(request.Header.Get("X-B3-TraceId")).To(Equal(traceHeader))
57-
Expect(request.Header.Get("X-B3-SpanId")).To(Equal(spanHeader))
55+
Expect(request.Header.Get("X-B3-SpanId")).ToNot(BeEmpty())
5856
})
5957

6058
It("Calls the inner connection", func() {

‎api/router/wrapper/trace_request.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ type RoutingTraceHeaderRequest struct {
1212
}
1313

1414
// NewRoutingTraceHeaderRequest returns a pointer to a RoutingTraceHeaderRequest wrapper.
15-
func NewRoutingTraceHeaderRequest(trace, span string) *RoutingTraceHeaderRequest {
15+
func NewRoutingTraceHeaderRequest(trace string) *RoutingTraceHeaderRequest {
1616
return &RoutingTraceHeaderRequest{
17-
headers: shared.NewTraceHeaders(trace, span),
17+
headers: shared.NewTraceHeaders(trace),
1818
}
1919
}
2020

‎api/router/wrapper/trace_request_test.go

+2-5
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,13 @@ var _ = Describe("CCTraceHeaderRequest", func() {
2323
makeErr error
2424

2525
traceHeader string
26-
spanHeader string
2726
)
2827

2928
BeforeEach(func() {
3029
fakeConnection = new(routerfakes.FakeConnection)
3130

3231
traceHeader = "trace-id"
33-
spanHeader = "span-id"
34-
35-
wrapper = NewRoutingTraceHeaderRequest(traceHeader, spanHeader).Wrap(fakeConnection)
32+
wrapper = NewRoutingTraceHeaderRequest(traceHeader).Wrap(fakeConnection)
3633

3734
body := bytes.NewReader([]byte("foo"))
3835

@@ -54,7 +51,7 @@ var _ = Describe("CCTraceHeaderRequest", func() {
5451
It("Adds the request headers", func() {
5552
Expect(makeErr).NotTo(HaveOccurred())
5653
Expect(request.Header.Get("X-B3-TraceId")).To(Equal(traceHeader))
57-
Expect(request.Header.Get("X-B3-SpanId")).To(Equal(spanHeader))
54+
Expect(request.Header.Get("X-B3-SpanId")).ToNot(BeEmpty())
5855
})
5956

6057
It("Calls the inner connection", func() {

‎api/shared/trace_headers.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package shared
22

33
import (
44
"net/http"
5+
6+
"code.cloudfoundry.org/cli/util/random"
57
)
68

79
const (
@@ -12,14 +14,12 @@ const (
1214
// TraceHeaders sets b3 trace headers to requests.
1315
type TraceHeaders struct {
1416
b3trace string
15-
b3span string
1617
}
1718

1819
// NewTraceHeaders returns a pointer to a TraceHeaderRequest.
19-
func NewTraceHeaders(trace, span string) *TraceHeaders {
20+
func NewTraceHeaders(trace string) *TraceHeaders {
2021
return &TraceHeaders{
2122
b3trace: trace,
22-
b3span: span,
2323
}
2424
}
2525

@@ -30,6 +30,6 @@ func (t *TraceHeaders) SetHeaders(request *http.Request) {
3030
request.Header.Add(B3TraceIDHeader, t.b3trace)
3131
}
3232
if request.Header.Get(B3SpanIDHeader) == "" {
33-
request.Header.Add(B3SpanIDHeader, t.b3span)
33+
request.Header.Add(B3SpanIDHeader, random.GenerateHex(16))
3434
}
3535
}

‎api/shared/trace_headers_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var _ = Describe("B3 Trace Headers", func() {
1313
Describe("SetHeaders", func() {
1414
Context("when there are already headers set", func() {
1515
It("does not add the headers", func() {
16-
traceHeaders := NewTraceHeaders("new_trace_id", "new_span_id")
16+
traceHeaders := NewTraceHeaders("new_trace_id")
1717
request := &http.Request{
1818
Header: http.Header{},
1919
}
@@ -28,14 +28,14 @@ var _ = Describe("B3 Trace Headers", func() {
2828

2929
Context("when there are no headers set", func() {
3030
It("adds the headers", func() {
31-
traceHeaders := NewTraceHeaders("new_trace_id", "new_span_id")
31+
traceHeaders := NewTraceHeaders("new_trace_id")
3232
request := &http.Request{
3333
Header: http.Header{},
3434
}
3535
traceHeaders.SetHeaders(request)
3636

3737
Expect(request.Header.Get("X-B3-TraceId")).To(Equal("new_trace_id"))
38-
Expect(request.Header.Get("X-B3-SpanId")).To(Equal("new_span_id"))
38+
Expect(request.Header.Get("X-B3-SpanId")).ToNot(BeEmpty())
3939
})
4040
})
4141
})

‎api/uaa/wrapper/trace_request.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ type UAATraceHeaderRequest struct {
1414
}
1515

1616
// NewUAATraceHeaderRequest returns a pointer to a UAATraceHeaderRequest wrapper.
17-
func NewUAATraceHeaderRequest(trace, span string) *UAATraceHeaderRequest {
17+
func NewUAATraceHeaderRequest(trace string) *UAATraceHeaderRequest {
1818
return &UAATraceHeaderRequest{
19-
headers: shared.NewTraceHeaders(trace, span),
19+
headers: shared.NewTraceHeaders(trace),
2020
}
2121
}
2222

‎api/uaa/wrapper/trace_request_test.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,14 @@ var _ = Describe("CCTraceHeaderRequest", func() {
2323
makeErr error
2424

2525
traceHeader string
26-
spanHeader string
2726
)
2827

2928
BeforeEach(func() {
3029
fakeConnection = new(uaafakes.FakeConnection)
3130

3231
traceHeader = "trace-id"
33-
spanHeader = "span-id"
3432

35-
wrapper = NewUAATraceHeaderRequest(traceHeader, spanHeader).Wrap(fakeConnection)
33+
wrapper = NewUAATraceHeaderRequest(traceHeader).Wrap(fakeConnection)
3634

3735
body := bytes.NewReader([]byte("foo"))
3836

@@ -54,7 +52,7 @@ var _ = Describe("CCTraceHeaderRequest", func() {
5452
It("Adds the request headers", func() {
5553
Expect(makeErr).NotTo(HaveOccurred())
5654
Expect(request.Header.Get("X-B3-TraceId")).To(Equal(traceHeader))
57-
Expect(request.Header.Get("X-B3-SpanId")).To(Equal(spanHeader))
55+
Expect(request.Header.Get("X-B3-SpanId")).ToNot(BeEmpty())
5856
})
5957

6058
It("Calls the inner connection", func() {

‎command/config.go

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ type Config interface {
1616
AuthorizationEndpoint() string
1717
APIVersion() string
1818
B3TraceID() string
19-
B3SpanID() string
2019
BinaryName() string
2120
BinaryVersion() string
2221
CFPassword() string

‎command/v7/shared/new_clients.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func NewWrappedCloudControllerClient(config command.Config, ui command.UI, extra
4747
}
4848

4949
ccWrappers = append(ccWrappers, extraWrappers...)
50-
ccWrappers = append(ccWrappers, ccWrapper.NewCCTraceHeaderRequest(config.B3TraceID(), config.B3SpanID()))
50+
ccWrappers = append(ccWrappers, ccWrapper.NewCCTraceHeaderRequest(config.B3TraceID()))
5151
ccWrappers = append(ccWrappers, ccWrapper.NewRetryRequest(config.RequestRetryCount()))
5252

5353
return ccv3.NewClient(ccv3.Config{
@@ -86,7 +86,7 @@ func newWrappedUAAClient(config command.Config, ui command.UI) (*uaa.Client, err
8686

8787
uaaAuthWrapper := uaaWrapper.NewUAAAuthentication(uaaClient, config)
8888
uaaClient.WrapConnection(uaaAuthWrapper)
89-
uaaClient.WrapConnection(uaaWrapper.NewUAATraceHeaderRequest(config.B3TraceID(), config.B3SpanID()))
89+
uaaClient.WrapConnection(uaaWrapper.NewUAATraceHeaderRequest(config.B3TraceID()))
9090
uaaClient.WrapConnection(uaaWrapper.NewRetryRequest(config.RequestRetryCount()))
9191

9292
err = uaaClient.SetupResources(config.UAAEndpoint(), config.AuthorizationEndpoint())

‎util/configv3/env.go

-8
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ type EnvOverride struct {
2323
CFTrace string
2424
CFUsername string
2525
CFB3TraceID string
26-
CFB3SpanID string
2726
DockerPassword string
2827
CNBCredentials string
2928
Experimental string
@@ -171,10 +170,3 @@ func (config *Config) B3TraceID() string {
171170
}
172171
return config.ENV.CFB3TraceID
173172
}
174-
175-
func (config *Config) B3SpanID() string {
176-
if config.ENV.CFB3SpanID == "" {
177-
config.ENV.CFB3SpanID = random.GenerateHex(16)
178-
}
179-
return config.ENV.CFB3SpanID
180-
}

‎util/configv3/load_config.go

-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ func LoadConfig(flags ...FlagOverride) (*Config, error) {
128128
CFTrace: os.Getenv("CF_TRACE"),
129129
CFUsername: os.Getenv("CF_USERNAME"),
130130
CFB3TraceID: os.Getenv("CF_B3_TRACE_ID"),
131-
CFB3SpanID: os.Getenv("CF_B3_SPAN_ID"),
132131
DockerPassword: os.Getenv("CF_DOCKER_PASSWORD"),
133132
CNBCredentials: os.Getenv("CNB_REGISTRY_CREDS"),
134133
Experimental: os.Getenv("CF_CLI_EXPERIMENTAL"),

‎util/random/hex.go

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/hex"
66
)
77

8+
// GenerateHex returns a random hex string of the given length.
89
func GenerateHex(length int) string {
910
b := make([]byte, length/2)
1011
if _, err := rand.Read(b); err != nil {

‎util/random/hex_test.go

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package random_test
2+
3+
import (
4+
"code.cloudfoundry.org/cli/util/random"
5+
. "github.com/onsi/ginkgo/v2"
6+
. "github.com/onsi/gomega"
7+
)
8+
9+
var _ = Describe("GenerateHex", func() {
10+
It("returns random hex of correct length", func() {
11+
Expect(random.GenerateHex(16)).To(HaveLen(16))
12+
})
13+
})

‎util/random/random_suite_test.go

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package random_test
2+
3+
import (
4+
. "github.com/onsi/ginkgo/v2"
5+
. "github.com/onsi/gomega"
6+
7+
"testing"
8+
)
9+
10+
func TestRandom(t *testing.T) {
11+
RegisterFailHandler(Fail)
12+
RunSpecs(t, "Random Suite")
13+
}

0 commit comments

Comments
 (0)
Please sign in to comment.