Skip to content

Commit 70477b6

Browse files
committed
opentelemetry-exporter-otlp-proto-http: permit to override default exporter headers
1 parent 347bfae commit 70477b6

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
@@ -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/src/opentelemetry/exporter/otlp/proto/http/metric_exporter/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,9 @@ def __init__(
155155
)
156156
self._compression = compression or _compression_from_env()
157157
self._session = session or requests.Session()
158-
self._session.headers.update(self._headers)
159158
self._session.headers.update(_OTLP_HTTP_HEADERS)
159+
# let users override our defaults
160+
self._session.headers.update(self._headers)
160161
if self._compression is not Compression.NoCompression:
161162
self._session.headers.update(
162163
{"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
@@ -113,8 +113,9 @@ def __init__(
113113
)
114114
self._compression = compression or _compression_from_env()
115115
self._session = session or requests.Session()
116-
self._session.headers.update(self._headers)
117116
self._session.headers.update(_OTLP_HTTP_HEADERS)
117+
# let users override our defaults
118+
self._session.headers.update(self._headers)
118119
if self._compression is not Compression.NoCompression:
119120
self._session.headers.update(
120121
{"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
@@ -80,7 +80,7 @@
8080
OS_ENV_CERTIFICATE = "os/env/base.crt"
8181
OS_ENV_CLIENT_CERTIFICATE = "os/env/client-cert.pem"
8282
OS_ENV_CLIENT_KEY = "os/env/client-key.pem"
83-
OS_ENV_HEADERS = "envHeader1=val1,envHeader2=val2"
83+
OS_ENV_HEADERS = "envHeader1=val1,envHeader2=val2,User-agent=Overridden"
8484
OS_ENV_TIMEOUT = "30"
8585

8686

@@ -150,7 +150,7 @@ def test_constructor_default(self):
150150
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY: "metrics/client-key.pem",
151151
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION: Compression.Deflate.value,
152152
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: "https://metrics.endpoint.env",
153-
OTEL_EXPORTER_OTLP_METRICS_HEADERS: "metricsEnv1=val1,metricsEnv2=val2,metricEnv3===val3==",
153+
OTEL_EXPORTER_OTLP_METRICS_HEADERS: "metricsEnv1=val1,metricsEnv2=val2,metricEnv3===val3==,User-agent=metrics-user-agent",
154154
OTEL_EXPORTER_OTLP_METRICS_TIMEOUT: "40",
155155
},
156156
)
@@ -171,9 +171,18 @@ def test_exporter_metrics_env_take_priority(self):
171171
"metricsenv1": "val1",
172172
"metricsenv2": "val2",
173173
"metricenv3": "==val3==",
174+
"user-agent": "metrics-user-agent",
174175
},
175176
)
176177
self.assertIsInstance(exporter._session, Session)
178+
self.assertEqual(
179+
exporter._session.headers.get("User-Agent"),
180+
"metrics-user-agent",
181+
)
182+
self.assertEqual(
183+
exporter._session.headers.get("Content-Type"),
184+
"application/x-protobuf",
185+
)
177186

178187
@patch.dict(
179188
"os.environ",
@@ -236,7 +245,12 @@ def test_exporter_env(self):
236245
self.assertEqual(exporter._timeout, int(OS_ENV_TIMEOUT))
237246
self.assertIs(exporter._compression, Compression.Gzip)
238247
self.assertEqual(
239-
exporter._headers, {"envheader1": "val1", "envheader2": "val2"}
248+
exporter._headers,
249+
{
250+
"envheader1": "val1",
251+
"envheader2": "val2",
252+
"user-agent": "Overridden",
253+
},
240254
)
241255

242256
@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
@@ -62,7 +62,7 @@
6262
ENV_CERTIFICATE = "/etc/base.crt"
6363
ENV_CLIENT_CERTIFICATE = "/etc/client-cert.pem"
6464
ENV_CLIENT_KEY = "/etc/client-key.pem"
65-
ENV_HEADERS = "envHeader1=val1,envHeader2=val2"
65+
ENV_HEADERS = "envHeader1=val1,envHeader2=val2,User-agent=Overridden"
6666
ENV_TIMEOUT = "30"
6767

6868

@@ -105,7 +105,7 @@ def test_constructor_default(self):
105105
OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY: "logs/client-key.pem",
106106
OTEL_EXPORTER_OTLP_LOGS_COMPRESSION: Compression.Deflate.value,
107107
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: "https://logs.endpoint.env",
108-
OTEL_EXPORTER_OTLP_LOGS_HEADERS: "logsEnv1=val1,logsEnv2=val2,logsEnv3===val3==",
108+
OTEL_EXPORTER_OTLP_LOGS_HEADERS: "logsEnv1=val1,logsEnv2=val2,logsEnv3===val3==,User-agent=LogsUserAgent",
109109
OTEL_EXPORTER_OTLP_LOGS_TIMEOUT: "40",
110110
},
111111
)
@@ -126,9 +126,18 @@ def test_exporter_metrics_env_take_priority(self):
126126
"logsenv1": "val1",
127127
"logsenv2": "val2",
128128
"logsenv3": "==val3==",
129+
"user-agent": "LogsUserAgent",
129130
},
130131
)
131132
self.assertIsInstance(exporter._session, requests.Session)
133+
self.assertEqual(
134+
exporter._session.headers.get("User-Agent"),
135+
"LogsUserAgent",
136+
)
137+
self.assertEqual(
138+
exporter._session.headers.get("Content-Type"),
139+
"application/x-protobuf",
140+
)
132141

133142
@patch.dict(
134143
"os.environ",
@@ -193,7 +202,12 @@ def test_exporter_env(self):
193202
self.assertEqual(exporter._timeout, int(ENV_TIMEOUT))
194203
self.assertIs(exporter._compression, Compression.Gzip)
195204
self.assertEqual(
196-
exporter._headers, {"envheader1": "val1", "envheader2": "val2"}
205+
exporter._headers,
206+
{
207+
"envheader1": "val1",
208+
"envheader2": "val2",
209+
"user-agent": "Overridden",
210+
},
197211
)
198212
self.assertIsInstance(exporter._session, requests.Session)
199213

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
@@ -50,7 +50,7 @@
5050
OS_ENV_CERTIFICATE = "os/env/base.crt"
5151
OS_ENV_CLIENT_CERTIFICATE = "os/env/client-cert.pem"
5252
OS_ENV_CLIENT_KEY = "os/env/client-key.pem"
53-
OS_ENV_HEADERS = "envHeader1=val1,envHeader2=val2"
53+
OS_ENV_HEADERS = "envHeader1=val1,envHeader2=val2,User-agent=Overridden"
5454
OS_ENV_TIMEOUT = "30"
5555

5656

@@ -94,7 +94,7 @@ def test_constructor_default(self):
9494
OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY: "traces/client-key.pem",
9595
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION: Compression.Deflate.value,
9696
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: "https://traces.endpoint.env",
97-
OTEL_EXPORTER_OTLP_TRACES_HEADERS: "tracesEnv1=val1,tracesEnv2=val2,traceEnv3===val3==",
97+
OTEL_EXPORTER_OTLP_TRACES_HEADERS: "tracesEnv1=val1,tracesEnv2=val2,traceEnv3===val3==,User-agent=TraceUserAgent",
9898
OTEL_EXPORTER_OTLP_TRACES_TIMEOUT: "40",
9999
},
100100
)
@@ -115,9 +115,18 @@ def test_exporter_traces_env_take_priority(self):
115115
"tracesenv1": "val1",
116116
"tracesenv2": "val2",
117117
"traceenv3": "==val3==",
118+
"user-agent": "TraceUserAgent",
118119
},
119120
)
120121
self.assertIsInstance(exporter._session, requests.Session)
122+
self.assertEqual(
123+
exporter._session.headers.get("Content-Type"),
124+
"application/x-protobuf",
125+
)
126+
self.assertEqual(
127+
exporter._session.headers.get("User-Agent"),
128+
"TraceUserAgent",
129+
)
121130

122131
@patch.dict(
123132
"os.environ",
@@ -180,7 +189,12 @@ def test_exporter_env(self):
180189
self.assertEqual(exporter._timeout, int(OS_ENV_TIMEOUT))
181190
self.assertIs(exporter._compression, Compression.Gzip)
182191
self.assertEqual(
183-
exporter._headers, {"envheader1": "val1", "envheader2": "val2"}
192+
exporter._headers,
193+
{
194+
"envheader1": "val1",
195+
"envheader2": "val2",
196+
"user-agent": "Overridden",
197+
},
184198
)
185199

186200
@patch.dict(

0 commit comments

Comments
 (0)