Skip to content

Commit 3a1746a

Browse files
authored
Respect suppress instrumentation key in gRPC client (#559)
1 parent df0ca3b commit 3a1746a

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

Diff for: CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2828
- Updating dependency for opentelemetry api/sdk packages to support major version instead
2929
of pinning to specific versions.
3030
([#567](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/567))
31+
- `opentelemetry-instrumentation-grpc` Respect the suppress instrumentation in gRPC client instrumentor
32+
([#559](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/559))
3133
- `opentelemetry-instrumentation-grpc` Fixed asynchonous unary call traces
3234
([#536](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/536))
3335
- `opentelemetry-sdk-extension-aws` Update AWS entry points to match spec

Diff for: instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_client.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@
2424

2525
import grpc
2626

27-
from opentelemetry import trace
27+
from opentelemetry import context, trace
2828
from opentelemetry.instrumentation.grpc import grpcext
2929
from opentelemetry.instrumentation.grpc._utilities import RpcInfo
30+
from opentelemetry.instrumentation.utils import _SUPPRESS_INSTRUMENTATION_KEY
3031
from opentelemetry.propagate import inject
3132
from opentelemetry.propagators.textmap import Setter
3233
from opentelemetry.semconv.trace import SpanAttributes
@@ -101,6 +102,9 @@ def _trace_result(self, span, rpc_info, result):
101102
return result
102103

103104
def _intercept(self, request, metadata, client_info, invoker):
105+
if context.get_value(_SUPPRESS_INSTRUMENTATION_KEY):
106+
return invoker(request, metadata)
107+
104108
if not metadata:
105109
mutable_metadata = OrderedDict()
106110
else:
@@ -184,6 +188,9 @@ def _intercept_server_stream(
184188
def intercept_stream(
185189
self, request_or_iterator, metadata, client_info, invoker
186190
):
191+
if context.get_value(_SUPPRESS_INSTRUMENTATION_KEY):
192+
return invoker(request_or_iterator, metadata)
193+
187194
if client_info.is_server_stream:
188195
return self._intercept_server_stream(
189196
request_or_iterator, metadata, client_info, invoker

Diff for: instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py

+46-1
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@
1818
)
1919

2020
import opentelemetry.instrumentation.grpc
21-
from opentelemetry import trace
21+
from opentelemetry import context, trace
2222
from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient
2323
from opentelemetry.instrumentation.grpc._client import (
2424
OpenTelemetryClientInterceptor,
2525
)
2626
from opentelemetry.instrumentation.grpc.grpcext._interceptor import (
2727
_UnaryClientInfo,
2828
)
29+
from opentelemetry.instrumentation.utils import _SUPPRESS_INSTRUMENTATION_KEY
2930
from opentelemetry.propagate import get_global_textmap, set_global_textmap
3031
from opentelemetry.semconv.trace import SpanAttributes
3132
from opentelemetry.test.mock_textmap import MockTextMapPropagator
@@ -301,3 +302,47 @@ def invoker(request, metadata):
301302

302303
finally:
303304
set_global_textmap(previous_propagator)
305+
306+
def test_unary_unary_with_suppress_key(self):
307+
token = context.attach(
308+
context.set_value(_SUPPRESS_INSTRUMENTATION_KEY, True)
309+
)
310+
try:
311+
simple_method(self._stub)
312+
spans = self.memory_exporter.get_finished_spans()
313+
finally:
314+
context.detach(token)
315+
self.assertEqual(len(spans), 0)
316+
317+
def test_unary_stream_with_suppress_key(self):
318+
token = context.attach(
319+
context.set_value(_SUPPRESS_INSTRUMENTATION_KEY, True)
320+
)
321+
try:
322+
server_streaming_method(self._stub)
323+
spans = self.memory_exporter.get_finished_spans()
324+
finally:
325+
context.detach(token)
326+
self.assertEqual(len(spans), 0)
327+
328+
def test_stream_unary_with_suppress_key(self):
329+
token = context.attach(
330+
context.set_value(_SUPPRESS_INSTRUMENTATION_KEY, True)
331+
)
332+
try:
333+
client_streaming_method(self._stub)
334+
spans = self.memory_exporter.get_finished_spans()
335+
finally:
336+
context.detach(token)
337+
self.assertEqual(len(spans), 0)
338+
339+
def test_stream_stream_with_suppress_key(self):
340+
token = context.attach(
341+
context.set_value(_SUPPRESS_INSTRUMENTATION_KEY, True)
342+
)
343+
try:
344+
bidirectional_streaming_method(self._stub)
345+
spans = self.memory_exporter.get_finished_spans()
346+
finally:
347+
context.detach(token)
348+
self.assertEqual(len(spans), 0)

0 commit comments

Comments
 (0)