Skip to content

Commit 6ae8d59

Browse files
committed
Move all key access to a single spot and deduplicate context managers
1 parent 7758d5e commit 6ae8d59

File tree

21 files changed

+122
-231
lines changed

21 files changed

+122
-231
lines changed

instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/__init__.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,10 +210,9 @@ def _patched_api_call(self, original_func, instance, args, kwargs):
210210
raise
211211
else:
212212
_apply_response_attributes(span, result)
213-
_safe_invoke(extension.on_success, span, result)
214-
finally:
215-
_safe_invoke(extension.after_service_call)
213+
_safe_invoke(extension.on_success, span, result)
216214
finally:
215+
_safe_invoke(extension.after_service_call)
217216
self._call_response_hook(span, call_context, result)
218217

219218
return result

instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_instrumentation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
from opentelemetry import trace as trace_api
3030
from opentelemetry.instrumentation.botocore import BotocoreInstrumentor
31-
from opentelemetry.instrumentation.utils import suppress_instrumentation
31+
from opentelemetry.instrumentation.utils import suppress_http_instrumentation, suppress_instrumentation
3232
from opentelemetry.propagate import get_global_textmap, set_global_textmap
3333
from opentelemetry.propagators.aws.aws_xray_propagator import TRACE_HEADER_KEY
3434
from opentelemetry.semconv.trace import SpanAttributes
@@ -342,7 +342,7 @@ def test_suppress_instrumentation_xray_client(self):
342342

343343
@mock_xray
344344
def test_suppress_http_instrumentation_xray_client(self):
345-
with suppress_instrumentation():
345+
with suppress_http_instrumentation():
346346
xray_client.put_trace_segments(TraceSegmentDocuments=["str1"])
347347
xray_client.put_trace_segments(TraceSegmentDocuments=["str2"])
348348
self.assertEqual(2, len(self.get_finished_spans()))

instrumentation/opentelemetry-instrumentation-cassandra/src/opentelemetry/instrumentation/cassandra/__init__.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@
4343
from wrapt import wrap_function_wrapper
4444

4545
from opentelemetry import trace
46+
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
4647
from opentelemetry.instrumentation.cassandra.package import _instruments
4748
from opentelemetry.instrumentation.cassandra.version import __version__
48-
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
4949
from opentelemetry.instrumentation.utils import unwrap
5050
from opentelemetry.semconv.trace import SpanAttributes
5151

@@ -70,10 +70,7 @@ def _traced_execute_async(func, instance, args, kwargs):
7070
if span.is_recording():
7171
span.set_attribute(SpanAttributes.DB_NAME, instance.keyspace)
7272
span.set_attribute(SpanAttributes.DB_SYSTEM, "cassandra")
73-
span.set_attribute(
74-
SpanAttributes.NET_PEER_NAME,
75-
instance.cluster.contact_points,
76-
)
73+
span.set_attribute(SpanAttributes.NET_PEER_NAME, instance.cluster.contact_points)
7774

7875
if include_db_statement:
7976
query = args[0]
@@ -82,9 +79,7 @@ def _traced_execute_async(func, instance, args, kwargs):
8279
response = func(*args, **kwargs)
8380
return response
8481

85-
wrap_function_wrapper(
86-
"cassandra.cluster", "Session.execute_async", _traced_execute_async
87-
)
82+
wrap_function_wrapper("cassandra.cluster", "Session.execute_async", _traced_execute_async)
8883

8984

9085
class CassandraInstrumentor(BaseInstrumentor):

instrumentation/opentelemetry-instrumentation-cassandra/tests/test_cassandra_integration.py

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -46,25 +46,15 @@ def tearDown(self):
4646
def test_instrument_uninstrument(self):
4747
instrumentation = CassandraInstrumentor()
4848
instrumentation.instrument()
49-
self.assertTrue(
50-
isinstance(
51-
cassandra.cluster.Session.execute_async, BoundFunctionWrapper
52-
)
53-
)
49+
self.assertTrue(isinstance(cassandra.cluster.Session.execute_async, BoundFunctionWrapper))
5450

5551
instrumentation.uninstrument()
56-
self.assertFalse(
57-
isinstance(
58-
cassandra.cluster.Session.execute_async, BoundFunctionWrapper
59-
)
60-
)
52+
self.assertFalse(isinstance(cassandra.cluster.Session.execute_async, BoundFunctionWrapper))
6153

6254
@mock.patch("cassandra.cluster.Cluster.connect")
6355
@mock.patch("cassandra.cluster.Session.__init__")
6456
@mock.patch("cassandra.cluster.Session._create_response_future")
65-
def test_instrumentor(
66-
self, mock_create_response_future, mock_session_init, mock_connect
67-
):
57+
def test_instrumentor(self, mock_create_response_future, mock_session_init, mock_connect):
6858
mock_create_response_future.return_value = mock.Mock()
6959
mock_session_init.return_value = None
7060
mock_connect.return_value = cassandra.cluster.Session()
@@ -95,9 +85,7 @@ def test_instrumentor(
9585
@mock.patch("cassandra.cluster.Cluster.connect")
9686
@mock.patch("cassandra.cluster.Session.__init__")
9787
@mock.patch("cassandra.cluster.Session._create_response_future")
98-
def test_custom_tracer_provider(
99-
self, mock_create_response_future, mock_session_init, mock_connect
100-
):
88+
def test_custom_tracer_provider(self, mock_create_response_future, mock_session_init, mock_connect):
10189
mock_create_response_future.return_value = mock.Mock()
10290
mock_session_init.return_value = None
10391
mock_connect.return_value = cassandra.cluster.Session()
@@ -119,9 +107,7 @@ def test_custom_tracer_provider(
119107
@mock.patch("cassandra.cluster.Cluster.connect")
120108
@mock.patch("cassandra.cluster.Session.__init__")
121109
@mock.patch("cassandra.cluster.Session._create_response_future")
122-
def test_instrument_connection_no_op_tracer_provider(
123-
self, mock_create_response_future, mock_session_init, mock_connect
124-
):
110+
def test_instrument_connection_no_op_tracer_provider(self, mock_create_response_future, mock_session_init, mock_connect):
125111
mock_create_response_future.return_value = mock.Mock()
126112
mock_session_init.return_value = None
127113
mock_connect.return_value = cassandra.cluster.Session()

instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ def add(x, y):
6363
from timeit import default_timer
6464
from typing import Collection, Iterable
6565

66-
from billiard import VERSION
6766
from billiard.einfo import ExceptionInfo
6867
from celery import signals # pylint: disable=no-name-in-module
6968

@@ -77,6 +76,8 @@ def add(x, y):
7776
from opentelemetry.propagators.textmap import Getter
7877
from opentelemetry.semconv.trace import SpanAttributes
7978
from opentelemetry.trace.status import Status, StatusCode
79+
from billiard import VERSION
80+
8081

8182
if VERSION >= (4, 0, 1):
8283
from billiard.einfo import ExceptionWithTraceback

instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414

1515
import logging
1616

17-
from billiard import VERSION
1817
from celery import registry # pylint: disable=no-name-in-module
18+
from billiard import VERSION
1919

2020
from opentelemetry.semconv.trace import SpanAttributes
2121

instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ def instrument_consumer(consumer: Consumer, tracer_provider=None)
112112
from .package import _instruments
113113
from .utils import (
114114
KafkaPropertiesExtractor,
115-
_create_new_consume_span,
116115
_end_current_consume_span,
116+
_create_new_consume_span,
117117
_enrich_span,
118118
_get_span_name,
119119
_kafka_getter,

instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
from typing import List, Optional
33

44
from opentelemetry import context, propagate
5+
from opentelemetry.trace import SpanKind, Link
56
from opentelemetry.propagators import textmap
67
from opentelemetry.semconv.trace import (
78
MessagingDestinationKindValues,
89
MessagingOperationValues,
910
SpanAttributes,
1011
)
11-
from opentelemetry.trace import Link, SpanKind
1212

1313
_LOG = getLogger(__name__)
1414

instrumentation/opentelemetry-instrumentation-confluent-kafka/tests/test_instrumentation.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414

1515
# pylint: disable=no-name-in-module
1616

17+
from opentelemetry.semconv.trace import (
18+
SpanAttributes,
19+
MessagingDestinationKindValues,
20+
)
21+
from opentelemetry.test.test_base import TestBase
22+
from .utils import MockConsumer, MockedMessage
23+
1724
from confluent_kafka import Consumer, Producer
1825

1926
from opentelemetry.instrumentation.confluent_kafka import (
@@ -25,13 +32,6 @@
2532
KafkaContextGetter,
2633
KafkaContextSetter,
2734
)
28-
from opentelemetry.semconv.trace import (
29-
MessagingDestinationKindValues,
30-
SpanAttributes,
31-
)
32-
from opentelemetry.test.test_base import TestBase
33-
34-
from .utils import MockConsumer, MockedMessage
3535

3636

3737
class TestConfluentKafka(TestBase):

instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS,
4141
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST,
4242
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE,
43+
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE,
4344
OTEL_PYTHON_INSTRUMENTATION_HTTP_CAPTURE_ALL_METHODS,
4445
get_excluded_urls,
4546
)
@@ -327,9 +328,7 @@ def test_flask_metric_values(self):
327328
if isinstance(point, NumberDataPoint):
328329
self.assertEqual(point.value, 0)
329330

330-
def _assert_basic_metric(
331-
self, expected_duration_attributes, expected_requests_count_attributes
332-
):
331+
def _assert_basic_metric(self, expected_duration_attributes, expected_requests_count_attributes):
333332
metrics_list = self.memory_metrics_reader.get_metrics_data()
334333
for resource_metric in metrics_list.resource_metrics:
335334
for scope_metrics in resource_metric.scope_metrics:
@@ -395,7 +394,7 @@ def test_basic_metric_nonstandard_http_method_success(self):
395394
)
396395

397396
@patch.dict(
398-
"os.environ",
397+
"os.environ",
399398
{
400399
OTEL_PYTHON_INSTRUMENTATION_HTTP_CAPTURE_ALL_METHODS: "1",
401400
},

instrumentation/opentelemetry-instrumentation-httpx/src/opentelemetry/instrumentation/httpx/__init__.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,7 @@ def response_hook(span, request, response):
170170
from opentelemetry.instrumentation.httpx.package import _instruments
171171
from opentelemetry.instrumentation.httpx.version import __version__
172172
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
173-
from opentelemetry.instrumentation.utils import (
174-
http_status_to_status_code,
175-
is_http_instrumentation_enabled,
176-
)
173+
from opentelemetry.instrumentation.utils import http_status_to_status_code
177174
from opentelemetry.propagate import inject
178175
from opentelemetry.semconv.trace import SpanAttributes
179176
from opentelemetry.trace import SpanKind, TracerProvider, get_tracer
@@ -319,7 +316,7 @@ def handle_request(
319316
httpx.Response,
320317
]:
321318
"""Add request info to span."""
322-
if not is_http_instrumentation_enabled():
319+
if context.get_value("suppress_instrumentation"):
323320
return self._transport.handle_request(*args, **kwargs)
324321

325322
method, url, headers, stream, extensions = _extract_parameters(
@@ -412,7 +409,7 @@ async def handle_async_request(
412409
httpx.Response,
413410
]:
414411
"""Add request info to span."""
415-
if not is_http_instrumentation_enabled():
412+
if context.get_value("suppress_instrumentation"):
416413
return await self._transport.handle_async_request(*args, **kwargs)
417414

418415
method, url, headers, stream, extensions = _extract_parameters(

instrumentation/opentelemetry-instrumentation-system-metrics/tests/test_system_metrics.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@
1818
from platform import python_implementation
1919
from unittest import mock
2020

21-
from opentelemetry.instrumentation.system_metrics import (
22-
SystemMetricsInstrumentor,
23-
)
2421
from opentelemetry.sdk.metrics import MeterProvider
2522
from opentelemetry.sdk.metrics.export import InMemoryMetricReader
2623
from opentelemetry.test.test_base import TestBase
2724

25+
from opentelemetry.instrumentation.system_metrics import (
26+
SystemMetricsInstrumentor,
27+
)
28+
2829

2930
def _mock_netconnection():
3031
NetConnection = namedtuple(
@@ -170,9 +171,9 @@ def _assert_metrics(self, observer_name, reader, expected):
170171
for data_point in metric.data.data_points:
171172
for expect in expected:
172173
if (
173-
dict(data_point.attributes)
174-
== expect.attributes
175-
and metric.name == observer_name
174+
dict(data_point.attributes)
175+
== expect.attributes
176+
and metric.name == observer_name
176177
):
177178
self.assertEqual(
178179
data_point.value,

instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/__init__.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,13 @@ def response_hook(span, request_obj, response)
8585
Request,
8686
)
8787

88-
from opentelemetry import context
8988
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
9089
from opentelemetry.instrumentation.urllib.package import _instruments
9190
from opentelemetry.instrumentation.urllib.version import __version__
9291
from opentelemetry.instrumentation.utils import (
93-
http_status_to_status_code,
9492
is_http_instrumentation_enabled,
9593
suppress_http_instrumentation,
94+
http_status_to_status_code,
9695
)
9796
from opentelemetry.metrics import Histogram, get_meter
9897
from opentelemetry.propagate import inject
@@ -233,8 +232,8 @@ def _instrumented_open_call(
233232
inject(headers)
234233

235234
with suppress_http_instrumentation():
235+
start_time = default_timer()
236236
try:
237-
start_time = default_timer()
238237
result = call_wrapped() # *** PROCEED
239238
except Exception as exc: # pylint: disable=W0703
240239
exception = exc

instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,7 @@ def collect_request_attributes(environ):
302302
"""
303303

304304
result = {
305-
SpanAttributes.HTTP_METHOD: sanitize_method(
306-
environ.get("REQUEST_METHOD")
307-
),
305+
SpanAttributes.HTTP_METHOD: sanitize_method(environ.get("REQUEST_METHOD")),
308306
SpanAttributes.HTTP_SERVER_NAME: environ.get("SERVER_NAME"),
309307
SpanAttributes.HTTP_SCHEME: environ.get("wsgi.url_scheme"),
310308
}

instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -286,26 +286,22 @@ def test_wsgi_metrics(self):
286286
self.assertTrue(number_data_point_seen and histogram_data_point_seen)
287287

288288
def test_nonstandard_http_method(self):
289-
self.environ["REQUEST_METHOD"] = "NONSTANDARD"
289+
self.environ["REQUEST_METHOD"]= "NONSTANDARD"
290290
app = otel_wsgi.OpenTelemetryMiddleware(simple_wsgi)
291291
response = app(self.environ, self.start_response)
292-
self.validate_response(
293-
response, span_name="UNKNOWN /", http_method="UNKNOWN"
294-
)
292+
self.validate_response(response, span_name="UNKNOWN /", http_method="UNKNOWN")
295293

296294
@mock.patch.dict(
297-
"os.environ",
295+
"os.environ",
298296
{
299297
OTEL_PYTHON_INSTRUMENTATION_HTTP_CAPTURE_ALL_METHODS: "1",
300298
},
301299
)
302300
def test_nonstandard_http_method_allowed(self):
303-
self.environ["REQUEST_METHOD"] = "NONSTANDARD"
301+
self.environ["REQUEST_METHOD"]= "NONSTANDARD"
304302
app = otel_wsgi.OpenTelemetryMiddleware(simple_wsgi)
305303
response = app(self.environ, self.start_response)
306-
self.validate_response(
307-
response, span_name="NONSTANDARD /", http_method="NONSTANDARD"
308-
)
304+
self.validate_response(response, span_name="NONSTANDARD /", http_method="NONSTANDARD")
309305

310306
def test_default_span_name_missing_path_info(self):
311307
"""Test that default span_names with missing path info."""

0 commit comments

Comments
 (0)