Skip to content

Commit

Permalink
Adds user agent string to grpc headers
Browse files Browse the repository at this point in the history
  • Loading branch information
pridhi-arora committed Nov 5, 2022
1 parent 35ba257 commit 7cc7b9c
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 4 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
([#2976](https://github.com/open-telemetry/opentelemetry-python/pull/2976))
- [exporter/opentelemetry-exporter-otlp-proto-http] Add OTLPMetricExporter
([#2891](https://github.com/open-telemetry/opentelemetry-python/pull/2891))
- [exporter-otlp-proto-grpc] add user agent string
([#3009](https://github.com/open-telemetry/opentelemetry-python/pull/3009))

## [1.13.0-0.34b0](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.13.0) - 2022-09-26

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,7 @@
API
---
"""
from .version import __version__

otel_string = "OTel OTLP Exporter Python/" + __version__
_OTLP_GRPC_HEADERS = dict({"user-agent": otel_string})
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@
from opentelemetry.sdk.resources import Resource as SDKResource
from opentelemetry.util.re import parse_headers
from opentelemetry.sdk.metrics.export import MetricsData
from opentelemetry.exporter.otlp.proto.grpc import (
_OTLP_GRPC_HEADERS,
)

logger = getLogger(__name__)
SDKDataT = TypeVar("SDKDataT")
Expand Down Expand Up @@ -232,12 +235,18 @@ def __init__(
if parsed_url.netloc:
endpoint = parsed_url.netloc

oltp_headers = _OTLP_GRPC_HEADERS
self._headers = headers or environ.get(OTEL_EXPORTER_OTLP_HEADERS)
if isinstance(self._headers, str):
temp_headers = parse_headers(self._headers)
self._headers = tuple(temp_headers.items())
elif isinstance(self._headers, dict):
self._headers = tuple(self._headers.items())
if self._headers is None:
_OTLP_GRPC_HEADERS.items()
self._headers = tuple(_OTLP_GRPC_HEADERS.items())
else:
self._headers = self._headers + tuple(_OTLP_GRPC_HEADERS.items())

self._timeout = timeout or int(
environ.get(OTEL_EXPORTER_OTLP_TIMEOUT, 10)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,21 +275,21 @@ def test_otlp_headers_from_env(self, mock_ssl_channel, mock_secure):
exporter = OTLPSpanExporter()
# pylint: disable=protected-access
self.assertEqual(
exporter._headers, (("key1", "value1"), ("key2", "VALUE=2"))
exporter._headers, (("key1", "value1"),("key2", "VALUE=2"), ("user-agent", "OTel OTLP Exporter Python/1.13.0"))
)
exporter = OTLPSpanExporter(
headers=(("key3", "value3"), ("key4", "value4"))
)
# pylint: disable=protected-access
self.assertEqual(
exporter._headers, (("key3", "value3"), ("key4", "value4"))
exporter._headers, (("key3", "value3"), ("key4", "value4"), ("user-agent", "OTel OTLP Exporter Python/1.13.0"))
)
exporter = OTLPSpanExporter(
headers={"key5": "value5", "key6": "value6"}
)
# pylint: disable=protected-access
self.assertEqual(
exporter._headers, (("key5", "value5"), ("key6", "value6"))
exporter._headers, (("key5", "value5"), ("key6", "value6"), ("user-agent", "OTel OTLP Exporter Python/1.13.0"))
)

@patch.dict(
Expand Down Expand Up @@ -434,7 +434,8 @@ def test_otlp_exporter_otlp_compression_precendence(
def test_otlp_headers(self, mock_ssl_channel, mock_secure):
exporter = OTLPSpanExporter()
# pylint: disable=protected-access
self.assertIsNone(exporter._headers, None)
#This ensures that there is no other header than standard user-agent.
self.assertEqual(exporter._headers, (("user-agent", "OTel OTLP Exporter Python/1.13.0"),))

@patch("opentelemetry.exporter.otlp.proto.grpc.exporter.expo")
@patch("opentelemetry.exporter.otlp.proto.grpc.exporter.sleep")
Expand Down

0 comments on commit 7cc7b9c

Please sign in to comment.