Beispiel #1
0
 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()
Beispiel #2
0
 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)
Beispiel #3
0
 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()
Beispiel #4
0
        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()
Beispiel #7
0
        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()
Beispiel #9
0
 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)
Beispiel #10
0
        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()
Beispiel #12
0
 def tearDown(self):
     super().tearDown()
     HTTPXClientInstrumentor().uninstrument()
Beispiel #13
0
 def setUp(self):
     self.client = self.create_client()
     HTTPXClientInstrumentor().instrument()
     super().setUp()