def test_uninstrument(self): HTTPXClientInstrumentor().uninstrument() result = self.perform_request(self.URL) self.assertEqual(result.text, "Hello!") self.assert_span(num_spans=0) # instrument again to avoid annoying warning message HTTPXClientInstrumentor().instrument()
def test_existing_client(self): HTTPXClientInstrumentor().uninstrument() client = self.create_client() HTTPXClientInstrumentor().instrument() result = self.perform_request(self.URL, client=client) self.assertEqual(result.text, "Hello!") self.assert_span(num_spans=1)
def test_instrument_client(self): HTTPXClientInstrumentor().uninstrument() client = self.create_client() HTTPXClientInstrumentor().instrument_client(client) result = self.perform_request(self.URL, client=client) self.assertEqual(result.text, "Hello!") self.assert_span(num_spans=1) # instrument again to avoid annoying warning message HTTPXClientInstrumentor().instrument()
def test_request_hook_no_span_update(self): HTTPXClientInstrumentor().uninstrument() HTTPXClientInstrumentor().instrument( tracer_provider=self.tracer_provider, request_hook=self.no_update_request_hook, ) client = self.create_client() result = self.perform_request(self.URL, client=client) self.assertEqual(result.text, "Hello!") span = self.assert_span() self.assertEqual(span.name, "HTTP GET")
def test_suppress_instrumentation_new_client(self): HTTPXClientInstrumentor().instrument() token = context.attach( context.set_value("suppress_instrumentation", True)) try: client = self.create_client() result = self.perform_request(self.URL, client=client) self.assertEqual(result.text, "Hello!") finally: context.detach(token) self.assert_span(num_spans=0) HTTPXClientInstrumentor().uninstrument()
def test_custom_tracer_provider(self): resource = resources.Resource.create({}) result = self.create_tracer_provider(resource=resource) tracer_provider, exporter = result HTTPXClientInstrumentor().instrument( tracer_provider=tracer_provider) client = self.create_client() result = self.perform_request(self.URL, client=client) self.assertEqual(result.text, "Hello!") span = self.assert_span(exporter=exporter) self.assertIs(span.resource, resource) HTTPXClientInstrumentor().uninstrument()
def test_uninstrument_client(self): HTTPXClientInstrumentor().uninstrument_client(self.client) result = self.perform_request(self.URL) self.assertEqual(result.text, "Hello!") self.assert_span(num_spans=0)
def test_not_recording(self): with mock.patch("opentelemetry.trace.INVALID_SPAN") as mock_span: HTTPXClientInstrumentor().instrument( tracer_provider=trace.NoOpTracerProvider()) client = self.create_client() mock_span.is_recording.return_value = False result = self.perform_request(self.URL, client=client) 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) HTTPXClientInstrumentor().uninstrument()
def instrument_app(self) -> None: logger.info("Activating Opentelemetry tracing to app", app=self.title) trace.set_tracer_provider(tracer_provider) FastAPIInstrumentor.instrument_app(self) RequestsInstrumentor().instrument() HTTPXClientInstrumentor().instrument() RedisInstrumentor().instrument() Psycopg2Instrumentor().instrument() SQLAlchemyInstrumentor().instrument(engine=db.engine, tracer_provider=tracer_provider)
def test_response_hook(self): HTTPXClientInstrumentor().uninstrument() HTTPXClientInstrumentor().instrument( tracer_provider=self.tracer_provider, response_hook=self.response_hook, ) client = self.create_client() result = self.perform_request(self.URL, client=client) self.assertEqual(result.text, "Hello!") span = self.assert_span() self.assertEqual( span.attributes, { SpanAttributes.HTTP_METHOD: "GET", SpanAttributes.HTTP_URL: self.URL, SpanAttributes.HTTP_STATUS_CODE: 200, HTTP_RESPONSE_BODY: "Hello!", }, )
def test_uninstrument_new_client(self): HTTPXClientInstrumentor().instrument() client1 = self.create_client() HTTPXClientInstrumentor().uninstrument_client(client1) result = self.perform_request(self.URL, client=client1) self.assertEqual(result.text, "Hello!") self.assert_span(num_spans=0) # Test that other clients as well as instance client is still # instrumented client2 = self.create_client() result = self.perform_request(self.URL, client=client2) self.assertEqual(result.text, "Hello!") self.assert_span() self.memory_exporter.clear() result = self.perform_request(self.URL) self.assertEqual(result.text, "Hello!") self.assert_span()
def tearDown(self): super().tearDown() HTTPXClientInstrumentor().uninstrument()
def setUp(self): self.client = self.create_client() HTTPXClientInstrumentor().instrument() super().setUp()