Skip to content

Commit 897c769

Browse files
authored
fix: fix trace middleware http writer (#401)
* improve trace middleware writer * fix failing acceptance test * fix bug
1 parent b2bdbd5 commit 897c769

File tree

2 files changed

+6
-17
lines changed

2 files changed

+6
-17
lines changed

pkg/middleware/trace.go

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"net/http"
2626
"sync"
2727

28+
"github.com/go-chi/chi/v5/middleware"
2829
"github.com/optimizely/agent/config"
2930
"github.com/rs/zerolog/log"
3031
"go.opentelemetry.io/otel"
@@ -80,16 +81,6 @@ func (gen *traceIDGenerator) NewIDs(ctx context.Context) (trace.TraceID, trace.S
8081
return tid, sid
8182
}
8283

83-
type statusRecorder struct {
84-
http.ResponseWriter
85-
statusCode int
86-
}
87-
88-
func (r *statusRecorder) WriteHeader(code int) {
89-
r.statusCode = code
90-
r.ResponseWriter.WriteHeader(code)
91-
}
92-
9384
func AddTracing(conf config.TracingConfig, tracerName, spanName string) func(http.Handler) http.Handler {
9485
return func(next http.Handler) http.Handler {
9586
fn := func(w http.ResponseWriter, r *http.Request) {
@@ -107,15 +98,12 @@ func AddTracing(conf config.TracingConfig, tracerName, spanName string) func(htt
10798
attribute.String(OptlySDKHeader, r.Header.Get(OptlySDKHeader)),
10899
)
109100

110-
rec := &statusRecorder{
111-
ResponseWriter: w,
112-
statusCode: http.StatusOK,
113-
}
101+
respWriter := middleware.NewWrapResponseWriter(w, r.ProtoMajor)
114102

115-
next.ServeHTTP(rec, r.WithContext(ctx))
103+
next.ServeHTTP(respWriter, r.WithContext(ctx))
116104

117105
span.SetAttributes(
118-
semconv.HTTPStatusCodeKey.Int(rec.statusCode),
106+
semconv.HTTPStatusCodeKey.Int(respWriter.Status()),
119107
)
120108
}
121109
return http.HandlerFunc(fn)

tests/acceptance/test_acceptance/test_odp_redis.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ def test_redis_save(session_override_sdk_key_odp):
5252
"""
5353

5454
expected_segments = ["atsbugbashsegmenthaspurchased", "atsbugbashsegmentdob"]
55+
expected_segments_rev = ["atsbugbashsegmentdob", "atsbugbashsegmenthaspurchased"]
5556
uId = "fs_user_id-$-matjaz-user-1"
5657
r = redis.Redis(host='localhost', port=6379, db=0)
5758
# clean redis before testing since several tests use same user_id
@@ -72,7 +73,7 @@ def test_redis_save(session_override_sdk_key_odp):
7273
params=params)
7374

7475
# Check saved segments
75-
assert json.loads(json.dumps(expected_segments)) == json.loads(r.get(uId))
76+
assert json.loads(json.dumps(expected_segments)) == json.loads(r.get(uId)) or json.loads(json.dumps(expected_segments_rev)) == json.loads(r.get(uId))
7677

7778
assert json.loads(json.dumps(expected_redis_save)) == resp.json()
7879
assert resp.status_code == 200, resp.text

0 commit comments

Comments
 (0)