Use is_recording flag in requests instrumentation (#1087)

This commit is contained in:
Leighton Chen
2020-09-14 13:13:44 -07:00
committed by alrex
parent 99d7d25535
commit 4ebd81f130
2 changed files with 25 additions and 7 deletions

View File

@ -121,6 +121,7 @@ def _instrument(tracer_provider=None, span_callback=None):
with get_tracer(
__name__, __version__, tracer_provider
).start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
if span.is_recording():
span.set_attribute("component", "http")
span.set_attribute("http.method", method.upper())
span.set_attribute("http.url", url)
@ -139,13 +140,13 @@ def _instrument(tracer_provider=None, span_callback=None):
finally:
context.detach(token)
if exception is not None:
if exception is not None and span.is_recording():
span.set_status(
Status(_exception_to_canonical_code(exception))
)
span.record_exception(exception)
if result is not None:
if result is not None and span.is_recording():
span.set_attribute("http.status_code", result.status_code)
span.set_attribute("http.status_text", result.reason)
span.set_status(

View File

@ -147,6 +147,23 @@ class RequestsIntegrationTestBase(abc.ABC):
self.assert_span(num_spans=0)
def test_not_recording(self):
with mock.patch("opentelemetry.trace.INVALID_SPAN") as mock_span:
RequestsInstrumentor().uninstrument()
# original_tracer_provider returns a default tracer provider, which
# in turn will return an INVALID_SPAN, which is always not recording
RequestsInstrumentor().instrument(
tracer_provider=self.original_tracer_provider
)
mock_span.is_recording.return_value = False
result = self.perform_request(self.URL)
self.assertEqual(result.text, "Hello!")
self.assert_span(None, 0)
self.assertFalse(mock_span.is_recording())
self.assertTrue(mock_span.is_recording.called)
self.assertFalse(mock_span.set_attribute.called)
self.assertFalse(mock_span.set_status.called)
def test_distributed_context(self):
previous_propagator = propagators.get_global_textmap()
try: