Skip to content

Commit c4cf437

Browse files
committed
opentelemetry-exporter-otlp-proto-http: permit to override default exporter headers
1 parent bb6eb68 commit c4cf437

File tree

6 files changed

+57
-12
lines changed

6 files changed

+57
-12
lines changed

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/_log_exporter/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,9 @@ def __init__(
118118
)
119119
self._compression = compression or _compression_from_env()
120120
self._session = session or requests.Session()
121-
self._session.headers.update(self._headers)
122121
self._session.headers.update(_OTLP_HTTP_HEADERS)
122+
# let users override our defaults
123+
self._session.headers.update(self._headers)
123124
if self._compression is not Compression.NoCompression:
124125
self._session.headers.update(
125126
{"Content-Encoding": self._compression.value}

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/metric_exporter/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,9 @@ def __init__(
160160
)
161161
self._compression = compression or _compression_from_env()
162162
self._session = session or requests.Session()
163-
self._session.headers.update(self._headers)
164163
self._session.headers.update(_OTLP_HTTP_HEADERS)
164+
# let users override our defaults
165+
self._session.headers.update(self._headers)
165166
if self._compression is not Compression.NoCompression:
166167
self._session.headers.update(
167168
{"Content-Encoding": self._compression.value}

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,9 @@ def __init__(
116116
)
117117
self._compression = compression or _compression_from_env()
118118
self._session = session or requests.Session()
119-
self._session.headers.update(self._headers)
120119
self._session.headers.update(_OTLP_HTTP_HEADERS)
120+
# let users override our defaults
121+
self._session.headers.update(self._headers)
121122
if self._compression is not Compression.NoCompression:
122123
self._session.headers.update(
123124
{"Content-Encoding": self._compression.value}

exporter/opentelemetry-exporter-otlp-proto-http/tests/metrics/test_otlp_metrics_exporter.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
OS_ENV_CERTIFICATE = "os/env/base.crt"
8282
OS_ENV_CLIENT_CERTIFICATE = "os/env/client-cert.pem"
8383
OS_ENV_CLIENT_KEY = "os/env/client-key.pem"
84-
OS_ENV_HEADERS = "envHeader1=val1,envHeader2=val2"
84+
OS_ENV_HEADERS = "envHeader1=val1,envHeader2=val2,User-agent=Overridden"
8585
OS_ENV_TIMEOUT = "30"
8686

8787

@@ -151,7 +151,7 @@ def test_constructor_default(self):
151151
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY: "metrics/client-key.pem",
152152
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION: Compression.Deflate.value,
153153
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: "https://metrics.endpoint.env",
154-
OTEL_EXPORTER_OTLP_METRICS_HEADERS: "metricsEnv1=val1,metricsEnv2=val2,metricEnv3===val3==",
154+
OTEL_EXPORTER_OTLP_METRICS_HEADERS: "metricsEnv1=val1,metricsEnv2=val2,metricEnv3===val3==,User-agent=metrics-user-agent",
155155
OTEL_EXPORTER_OTLP_METRICS_TIMEOUT: "40",
156156
},
157157
)
@@ -172,9 +172,18 @@ def test_exporter_metrics_env_take_priority(self):
172172
"metricsenv1": "val1",
173173
"metricsenv2": "val2",
174174
"metricenv3": "==val3==",
175+
"user-agent": "metrics-user-agent",
175176
},
176177
)
177178
self.assertIsInstance(exporter._session, Session)
179+
self.assertEqual(
180+
exporter._session.headers.get("User-Agent"),
181+
"metrics-user-agent",
182+
)
183+
self.assertEqual(
184+
exporter._session.headers.get("Content-Type"),
185+
"application/x-protobuf",
186+
)
178187

179188
@patch.dict(
180189
"os.environ",
@@ -237,7 +246,12 @@ def test_exporter_env(self):
237246
self.assertEqual(exporter._timeout, int(OS_ENV_TIMEOUT))
238247
self.assertIs(exporter._compression, Compression.Gzip)
239248
self.assertEqual(
240-
exporter._headers, {"envheader1": "val1", "envheader2": "val2"}
249+
exporter._headers,
250+
{
251+
"envheader1": "val1",
252+
"envheader2": "val2",
253+
"user-agent": "Overridden",
254+
},
241255
)
242256

243257
@patch.dict(

exporter/opentelemetry-exporter-otlp-proto-http/tests/test_proto_log_exporter.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
ENV_CERTIFICATE = "/etc/base.crt"
7272
ENV_CLIENT_CERTIFICATE = "/etc/client-cert.pem"
7373
ENV_CLIENT_KEY = "/etc/client-key.pem"
74-
ENV_HEADERS = "envHeader1=val1,envHeader2=val2"
74+
ENV_HEADERS = "envHeader1=val1,envHeader2=val2,User-agent=Overridden"
7575
ENV_TIMEOUT = "30"
7676

7777

@@ -114,7 +114,7 @@ def test_constructor_default(self):
114114
OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY: "logs/client-key.pem",
115115
OTEL_EXPORTER_OTLP_LOGS_COMPRESSION: Compression.Deflate.value,
116116
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: "https://logs.endpoint.env",
117-
OTEL_EXPORTER_OTLP_LOGS_HEADERS: "logsEnv1=val1,logsEnv2=val2,logsEnv3===val3==",
117+
OTEL_EXPORTER_OTLP_LOGS_HEADERS: "logsEnv1=val1,logsEnv2=val2,logsEnv3===val3==,User-agent=LogsUserAgent",
118118
OTEL_EXPORTER_OTLP_LOGS_TIMEOUT: "40",
119119
},
120120
)
@@ -135,9 +135,18 @@ def test_exporter_metrics_env_take_priority(self):
135135
"logsenv1": "val1",
136136
"logsenv2": "val2",
137137
"logsenv3": "==val3==",
138+
"user-agent": "LogsUserAgent",
138139
},
139140
)
140141
self.assertIsInstance(exporter._session, requests.Session)
142+
self.assertEqual(
143+
exporter._session.headers.get("User-Agent"),
144+
"LogsUserAgent",
145+
)
146+
self.assertEqual(
147+
exporter._session.headers.get("Content-Type"),
148+
"application/x-protobuf",
149+
)
141150

142151
@patch.dict(
143152
"os.environ",
@@ -202,7 +211,12 @@ def test_exporter_env(self):
202211
self.assertEqual(exporter._timeout, int(ENV_TIMEOUT))
203212
self.assertIs(exporter._compression, Compression.Gzip)
204213
self.assertEqual(
205-
exporter._headers, {"envheader1": "val1", "envheader2": "val2"}
214+
exporter._headers,
215+
{
216+
"envheader1": "val1",
217+
"envheader2": "val2",
218+
"user-agent": "Overridden",
219+
},
206220
)
207221
self.assertIsInstance(exporter._session, requests.Session)
208222

exporter/opentelemetry-exporter-otlp-proto-http/tests/test_proto_span_exporter.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
OS_ENV_CERTIFICATE = "os/env/base.crt"
5555
OS_ENV_CLIENT_CERTIFICATE = "os/env/client-cert.pem"
5656
OS_ENV_CLIENT_KEY = "os/env/client-key.pem"
57-
OS_ENV_HEADERS = "envHeader1=val1,envHeader2=val2"
57+
OS_ENV_HEADERS = "envHeader1=val1,envHeader2=val2,User-agent=Overridden"
5858
OS_ENV_TIMEOUT = "30"
5959
BASIC_SPAN = _Span(
6060
"abc",
@@ -108,7 +108,7 @@ def test_constructor_default(self):
108108
OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY: "traces/client-key.pem",
109109
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION: Compression.Deflate.value,
110110
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: "https://traces.endpoint.env",
111-
OTEL_EXPORTER_OTLP_TRACES_HEADERS: "tracesEnv1=val1,tracesEnv2=val2,traceEnv3===val3==",
111+
OTEL_EXPORTER_OTLP_TRACES_HEADERS: "tracesEnv1=val1,tracesEnv2=val2,traceEnv3===val3==,User-agent=TraceUserAgent",
112112
OTEL_EXPORTER_OTLP_TRACES_TIMEOUT: "40",
113113
},
114114
)
@@ -129,9 +129,18 @@ def test_exporter_traces_env_take_priority(self):
129129
"tracesenv1": "val1",
130130
"tracesenv2": "val2",
131131
"traceenv3": "==val3==",
132+
"user-agent": "TraceUserAgent",
132133
},
133134
)
134135
self.assertIsInstance(exporter._session, requests.Session)
136+
self.assertEqual(
137+
exporter._session.headers.get("Content-Type"),
138+
"application/x-protobuf",
139+
)
140+
self.assertEqual(
141+
exporter._session.headers.get("User-Agent"),
142+
"TraceUserAgent",
143+
)
135144

136145
@patch.dict(
137146
"os.environ",
@@ -194,7 +203,12 @@ def test_exporter_env(self):
194203
self.assertEqual(exporter._timeout, int(OS_ENV_TIMEOUT))
195204
self.assertIs(exporter._compression, Compression.Gzip)
196205
self.assertEqual(
197-
exporter._headers, {"envheader1": "val1", "envheader2": "val2"}
206+
exporter._headers,
207+
{
208+
"envheader1": "val1",
209+
"envheader2": "val2",
210+
"user-agent": "Overridden",
211+
},
198212
)
199213

200214
@patch.dict(

0 commit comments

Comments
 (0)