Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0590617

Browse files
authored
Adding optional session parameter to Trace Exporters constructors (open-telemetry#2783)
1 parent f7a3e62 commit 0590617

File tree

9 files changed

+50
-9
lines changed

9 files changed

+50
-9
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.12.0rc1-0.31b0...HEAD)
99

10+
- Add optional sessions parameter to all Exporters leveraging requests.Session
11+
([#2783](https://github.com/open-telemetry/opentelemetry-python/pull/2783))
1012
- Add min/max fields to Histogram
1113
([#2759](https://github.com/open-telemetry/opentelemetry-python/pull/2759))
1214
- `opentelemetry-exporter-otlp-proto-http` Add support for OTLP/HTTP log exporter

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
@@ -62,6 +62,7 @@ def __init__(
6262
headers: Optional[Dict[str, str]] = None,
6363
timeout: Optional[int] = None,
6464
compression: Optional[Compression] = None,
65+
session: Optional[requests.Session] = None,
6566
):
6667
self._endpoint = endpoint or _append_logs_path(
6768
environ.get(OTEL_EXPORTER_OTLP_ENDPOINT, DEFAULT_ENDPOINT)
@@ -75,7 +76,7 @@ def __init__(
7576
environ.get(OTEL_EXPORTER_OTLP_TIMEOUT, DEFAULT_TIMEOUT)
7677
)
7778
self._compression = compression or _compression_from_env()
78-
self._session = requests.Session()
79+
self._session = session or requests.Session()
7980
self._session.headers.update(self._headers)
8081
self._session.headers.update(
8182
{"Content-Type": _ProtobufEncoder._CONTENT_TYPE}

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
@@ -63,6 +63,7 @@ def __init__(
6363
headers: Optional[Dict[str, str]] = None,
6464
timeout: Optional[int] = None,
6565
compression: Optional[Compression] = None,
66+
session: Optional[requests.Session] = None,
6667
):
6768
self._endpoint = endpoint or environ.get(
6869
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,
@@ -86,7 +87,7 @@ def __init__(
8687
)
8788
)
8889
self._compression = compression or _compression_from_env()
89-
self._session = requests.Session()
90+
self._session = session or requests.Session()
9091
self._session.headers.update(self._headers)
9192
self._session.headers.update(
9293
{"Content-Type": _ProtobufEncoder._CONTENT_TYPE}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
import unittest
1818
from typing import List, Tuple
19-
from unittest.mock import patch
19+
from unittest.mock import MagicMock, patch
20+
21+
import requests
2022

2123
from opentelemetry.exporter.otlp.proto.http import Compression
2224
from opentelemetry.exporter.otlp.proto.http._log_exporter import (
@@ -81,6 +83,7 @@ def test_constructor_default(self):
8183
self.assertEqual(exporter._timeout, DEFAULT_TIMEOUT)
8284
self.assertIs(exporter._compression, DEFAULT_COMPRESSION)
8385
self.assertEqual(exporter._headers, {})
86+
self.assertIsInstance(exporter._session, requests.Session)
8487

8588
@patch.dict(
8689
"os.environ",
@@ -93,12 +96,14 @@ def test_constructor_default(self):
9396
},
9497
)
9598
def test_exporter_constructor_take_priority(self):
99+
sess = MagicMock()
96100
exporter = OTLPLogExporter(
97101
endpoint="endpoint.local:69/logs",
98102
certificate_file="/hello.crt",
99103
headers={"testHeader1": "value1", "testHeader2": "value2"},
100104
timeout=70,
101105
compression=Compression.NoCompression,
106+
session=sess(),
102107
)
103108

104109
self.assertEqual(exporter._endpoint, "endpoint.local:69/logs")
@@ -109,6 +114,7 @@ def test_exporter_constructor_take_priority(self):
109114
exporter._headers,
110115
{"testHeader1": "value1", "testHeader2": "value2"},
111116
)
117+
self.assertTrue(sess.called)
112118

113119
@patch.dict(
114120
"os.environ",
@@ -133,6 +139,7 @@ def test_exporter_env(self):
133139
self.assertEqual(
134140
exporter._headers, {"envheader1": "val1", "envheader2": "val2"}
135141
)
142+
self.assertIsInstance(exporter._session, requests.Session)
136143

137144
def test_encode(self):
138145
sdk_logs, expected_encoding = self.get_test_logs()

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import unittest
1616
from unittest.mock import patch
1717

18+
import requests
19+
1820
from opentelemetry.exporter.otlp.proto.http import Compression
1921
from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
2022
DEFAULT_COMPRESSION,
@@ -55,6 +57,7 @@ def test_constructor_default(self):
5557
self.assertEqual(exporter._timeout, DEFAULT_TIMEOUT)
5658
self.assertIs(exporter._compression, DEFAULT_COMPRESSION)
5759
self.assertEqual(exporter._headers, {})
60+
self.assertIsInstance(exporter._session, requests.Session)
5861

5962
@patch.dict(
6063
"os.environ",
@@ -86,6 +89,7 @@ def test_exporter_traces_env_take_priority(self):
8689
"traceenv3": "==val3==",
8790
},
8891
)
92+
self.assertIsInstance(exporter._session, requests.Session)
8993

9094
@patch.dict(
9195
"os.environ",
@@ -105,6 +109,7 @@ def test_exporter_constructor_take_priority(self):
105109
headers={"testHeader1": "value1", "testHeader2": "value2"},
106110
timeout=20,
107111
compression=Compression.NoCompression,
112+
session=requests.Session(),
108113
)
109114

110115
self.assertEqual(exporter._endpoint, "example.com/1234")
@@ -115,6 +120,7 @@ def test_exporter_constructor_take_priority(self):
115120
exporter._headers,
116121
{"testHeader1": "value1", "testHeader2": "value2"},
117122
)
123+
self.assertIsInstance(exporter._session, requests.Session)
118124

119125
@patch.dict(
120126
"os.environ",

exporter/opentelemetry-exporter-zipkin-json/src/opentelemetry/exporter/zipkin/json/__init__.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
3232
.. code:: python
3333
34+
import requests
35+
3436
from opentelemetry import trace
3537
from opentelemetry.exporter.zipkin.json import ZipkinExporter
3638
from opentelemetry.sdk.trace import TracerProvider
@@ -47,8 +49,9 @@
4749
# local_node_ipv4="192.168.0.1",
4850
# local_node_ipv6="2001:db8::c001",
4951
# local_node_port=31313,
50-
# max_tag_value_length=256
51-
# timeout=5 (in seconds)
52+
# max_tag_value_length=256,
53+
# timeout=5 (in seconds),
54+
# session=requests.Session(),
5255
)
5356
5457
# Create a BatchSpanProcessor and add the exporter to it
@@ -103,6 +106,7 @@ def __init__(
103106
local_node_port: Optional[int] = None,
104107
max_tag_value_length: Optional[int] = None,
105108
timeout: Optional[int] = None,
109+
session: Optional[requests.Session] = None,
106110
):
107111
"""Zipkin exporter.
108112
@@ -116,6 +120,7 @@ def __init__(
116120
max_tag_value_length: Max length string attribute values can have.
117121
timeout: Maximum time the Zipkin exporter will wait for each batch export.
118122
The default value is 10s.
123+
session: Connection session to the Zipkin collector endpoint.
119124
120125
The tuple (local_node_ipv4, local_node_ipv6, local_node_port) is used to represent
121126
the network context of a node in the service graph.
@@ -135,7 +140,7 @@ def __init__(
135140
elif version == Protocol.V2:
136141
self.encoder = JsonV2Encoder(max_tag_value_length)
137142

138-
self.session = requests.Session()
143+
self.session = session or requests.Session()
139144
self.session.headers.update(
140145
{"Content-Type": self.encoder.content_type()}
141146
)

exporter/opentelemetry-exporter-zipkin-json/tests/test_zipkin_exporter.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import unittest
1818
from unittest.mock import patch
1919

20+
import requests
21+
2022
from opentelemetry import trace
2123
from opentelemetry.exporter.zipkin.encoder import Protocol
2224
from opentelemetry.exporter.zipkin.json import DEFAULT_ENDPOINT, ZipkinExporter
@@ -55,6 +57,7 @@ def tearDown(self):
5557
def test_constructor_default(self):
5658
exporter = ZipkinExporter()
5759
self.assertIsInstance(exporter.encoder, JsonV2Encoder)
60+
self.assertIsInstance(exporter.session, requests.Session)
5861
self.assertEqual(exporter.endpoint, DEFAULT_ENDPOINT)
5962
self.assertEqual(exporter.local_node.service_name, TEST_SERVICE_NAME)
6063
self.assertEqual(exporter.local_node.ipv4, None)
@@ -83,6 +86,7 @@ def test_constructor_protocol_endpoint(self):
8386
exporter = ZipkinExporter(endpoint=endpoint)
8487

8588
self.assertIsInstance(exporter.encoder, JsonV2Encoder)
89+
self.assertIsInstance(exporter.session, requests.Session)
8690
self.assertEqual(exporter.endpoint, endpoint)
8791
self.assertEqual(exporter.local_node.service_name, TEST_SERVICE_NAME)
8892
self.assertEqual(exporter.local_node.ipv4, None)
@@ -104,6 +108,7 @@ def test_constructor_all_params_and_env_vars(self):
104108
local_node_port = 30301
105109
max_tag_value_length = 56
106110
timeout_param = 20
111+
session_param = requests.Session()
107112

108113
exporter = ZipkinExporter(
109114
constructor_param_version,
@@ -113,9 +118,11 @@ def test_constructor_all_params_and_env_vars(self):
113118
local_node_port,
114119
max_tag_value_length,
115120
timeout_param,
121+
session_param,
116122
)
117123

118124
self.assertIsInstance(exporter.encoder, JsonV2Encoder)
125+
self.assertIsInstance(exporter.session, requests.Session)
119126
self.assertEqual(exporter.endpoint, constructor_param_endpoint)
120127
self.assertEqual(exporter.local_node.service_name, TEST_SERVICE_NAME)
121128
self.assertEqual(

exporter/opentelemetry-exporter-zipkin-proto-http/src/opentelemetry/exporter/zipkin/proto/http/__init__.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
3232
.. code:: python
3333
34+
import requests
35+
3436
from opentelemetry import trace
3537
from opentelemetry.exporter.zipkin.proto.http import ZipkinExporter
3638
from opentelemetry.sdk.trace import TracerProvider
@@ -46,8 +48,9 @@
4648
# local_node_ipv4="192.168.0.1",
4749
# local_node_ipv6="2001:db8::c001",
4850
# local_node_port=31313,
49-
# max_tag_value_length=256
50-
# timeout=5 (in seconds)
51+
# max_tag_value_length=256,
52+
# timeout=5 (in seconds),
53+
# session=requests.Session()
5154
)
5255
5356
# Create a BatchSpanProcessor and add the exporter to it
@@ -99,6 +102,7 @@ def __init__(
99102
local_node_port: Optional[int] = None,
100103
max_tag_value_length: Optional[int] = None,
101104
timeout: Optional[int] = None,
105+
session: Optional[requests.Session] = None,
102106
):
103107
"""Zipkin exporter.
104108
@@ -112,6 +116,7 @@ def __init__(
112116
max_tag_value_length: Max length string attribute values can have.
113117
timeout: Maximum time the Zipkin exporter will wait for each batch export.
114118
The default value is 10s.
119+
session: Connection session to the Zipkin collector endpoint.
115120
116121
The tuple (local_node_ipv4, local_node_ipv6, local_node_port) is used to represent
117122
the network context of a node in the service graph.
@@ -128,7 +133,7 @@ def __init__(
128133

129134
self.encoder = ProtobufEncoder(max_tag_value_length)
130135

131-
self.session = requests.Session()
136+
self.session = session or requests.Session()
132137
self.session.headers.update(
133138
{"Content-Type": self.encoder.content_type()}
134139
)

exporter/opentelemetry-exporter-zipkin-proto-http/tests/test_zipkin_exporter.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import unittest
1818
from unittest.mock import patch
1919

20+
import requests
21+
2022
from opentelemetry import trace
2123
from opentelemetry.exporter.zipkin.node_endpoint import NodeEndpoint
2224
from opentelemetry.exporter.zipkin.proto.http import (
@@ -57,6 +59,7 @@ def tearDown(self):
5759
def test_constructor_default(self):
5860
exporter = ZipkinExporter()
5961
self.assertIsInstance(exporter.encoder, ProtobufEncoder)
62+
self.assertIsInstance(exporter.session, requests.Session)
6063
self.assertEqual(exporter.endpoint, DEFAULT_ENDPOINT)
6164
self.assertEqual(exporter.local_node.service_name, TEST_SERVICE_NAME)
6265
self.assertEqual(exporter.local_node.ipv4, None)
@@ -85,6 +88,7 @@ def test_constructor_protocol_endpoint(self):
8588
exporter = ZipkinExporter(endpoint)
8689

8790
self.assertIsInstance(exporter.encoder, ProtobufEncoder)
91+
self.assertIsInstance(exporter.session, requests.Session)
8892
self.assertEqual(exporter.endpoint, endpoint)
8993
self.assertEqual(exporter.local_node.service_name, TEST_SERVICE_NAME)
9094
self.assertEqual(exporter.local_node.ipv4, None)
@@ -105,6 +109,7 @@ def test_constructor_all_params_and_env_vars(self):
105109
local_node_port = 30301
106110
max_tag_value_length = 56
107111
timeout_param = 20
112+
session_param = requests.Session()
108113

109114
exporter = ZipkinExporter(
110115
constructor_param_endpoint,
@@ -113,9 +118,11 @@ def test_constructor_all_params_and_env_vars(self):
113118
local_node_port,
114119
max_tag_value_length,
115120
timeout_param,
121+
session_param,
116122
)
117123

118124
self.assertIsInstance(exporter.encoder, ProtobufEncoder)
125+
self.assertIsInstance(exporter.session, requests.Session)
119126
self.assertEqual(exporter.endpoint, constructor_param_endpoint)
120127
self.assertEqual(exporter.local_node.service_name, TEST_SERVICE_NAME)
121128
self.assertEqual(

0 commit comments

Comments
 (0)