@@ -27,14 +27,14 @@ import (
27
27
type Transport struct {
28
28
rt http.RoundTripper
29
29
30
- tracer trace.Tracer
31
- meter metric.Meter
32
- propagators propagation.TextMapPropagator
33
- spanStartOptions []trace.SpanStartOption
34
- filters []Filter
35
- spanNameFormatter func (string , * http.Request ) string
36
- clientTrace func (context.Context ) * httptrace.ClientTrace
37
- attributes []attribute.KeyValue
30
+ tracer trace.Tracer
31
+ meter metric.Meter
32
+ propagators propagation.TextMapPropagator
33
+ spanStartOptions []trace.SpanStartOption
34
+ filters []Filter
35
+ spanNameFormatter func (string , * http.Request ) string
36
+ clientTrace func (context.Context ) * httptrace.ClientTrace
37
+ reqAttributesMapper func ( * http. Request ) []attribute.KeyValue
38
38
39
39
semconv semconv.HTTPClient
40
40
requestBytesCounter metric.Int64Counter
@@ -80,7 +80,7 @@ func (t *Transport) applyConfig(c *config) {
80
80
t .filters = c .Filters
81
81
t .spanNameFormatter = c .SpanNameFormatter
82
82
t .clientTrace = c .ClientTrace
83
- t .attributes = c .Attributes
83
+ t .reqAttributesMapper = c .ReqAttributesMapper
84
84
}
85
85
86
86
func (t * Transport ) createMeasures () {
@@ -172,7 +172,7 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) {
172
172
}
173
173
174
174
// metrics
175
- metricAttrs := append (append (labeler .Get (), semconvutil .HTTPClientRequestMetrics (r )... ), t .attributes ... )
175
+ metricAttrs := append (append (labeler .Get (), semconvutil .HTTPClientRequestMetrics (r )... ), t .attributesFromRequest ( r ) ... )
176
176
if res .StatusCode > 0 {
177
177
metricAttrs = append (metricAttrs , semconv .HTTPStatusCode (res .StatusCode ))
178
178
}
@@ -198,6 +198,14 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) {
198
198
return res , err
199
199
}
200
200
201
+ func (t * Transport ) attributesFromRequest (r * http.Request ) []attribute.KeyValue {
202
+ var attributeForRequest []attribute.KeyValue
203
+ if t .reqAttributesMapper != nil {
204
+ attributeForRequest = t .reqAttributesMapper (r )
205
+ }
206
+ return attributeForRequest
207
+ }
208
+
201
209
// newWrappedBody returns a new and appropriately scoped *wrappedBody as an
202
210
// io.ReadCloser. If the passed body implements io.Writer, the returned value
203
211
// will implement io.ReadWriteCloser.
0 commit comments