def test_span_callback(self): RequestsInstrumentor().uninstrument() def span_callback(span, result: requests.Response): span.set_attribute("http.response.body", result.content.decode("utf-8")) RequestsInstrumentor().instrument( tracer_provider=self.tracer_provider, span_callback=span_callback, ) result = requests.get(self.URL) self.assertEqual(result.text, "Hello!") span_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(span_list), 1) span = span_list[0] self.assertEqual( span.attributes, { "component": "http", "http.method": "GET", "http.url": self.URL, "http.status_code": 200, "http.status_text": "OK", "http.response.body": "Hello!", }, )
def test_uninstrument(self): RequestsInstrumentor().uninstrument() result = requests.get(self.URL) self.assertEqual(result.text, "Hello!") span_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(span_list), 0) # instrument again to avoid annoying warning message RequestsInstrumentor().instrument()
def test_custom_tracer_provider(self): resource = resources.Resource.create({}) result = self.create_tracer_provider(resource=resource) tracer_provider, exporter = result RequestsInstrumentor().uninstrument() RequestsInstrumentor().instrument(tracer_provider=tracer_provider) result = requests.get(self.URL) self.assertEqual(result.text, "Hello!") span_list = exporter.get_finished_spans() self.assertEqual(len(span_list), 1) span = span_list[0] self.assertIs(span.resource, resource)
def setUp(self): super().setUp() RequestsInstrumentor().instrument() httpretty.enable() httpretty.register_uri( httpretty.GET, self.URL, body="Hello!", )
def test_uninstrument_session(self): session1 = requests.Session() RequestsInstrumentor().uninstrument_session(session1) result = session1.get(self.URL) self.assertEqual(result.text, "Hello!") span_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(span_list), 0) # Test that other sessions as well as global requests is still # instrumented session2 = requests.Session() result = session2.get(self.URL) self.assertEqual(result.text, "Hello!") span_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(span_list), 1) self.memory_exporter.clear() result = requests.get(self.URL) self.assertEqual(result.text, "Hello!") span_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(span_list), 1)
import flask import requests from opentelemetry import trace from opentelemetry.ext.flask import FlaskInstrumentor from opentelemetry.ext.requests import RequestsInstrumentor from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, SimpleExportSpanProcessor, ) trace.set_tracer_provider(TracerProvider()) trace.get_tracer_provider().add_span_processor( SimpleExportSpanProcessor(ConsoleSpanExporter())) app = flask.Flask(__name__) FlaskInstrumentor().instrument_app(app) RequestsInstrumentor().instrument() @app.route("/") def hello(): tracer = trace.get_tracer(__name__) with tracer.start_as_current_span("example-request"): requests.get("http://www.example.com") return "hello" app.run(debug=True, port=5000)
def tearDown(self): super().tearDown() RequestsInstrumentor().uninstrument() httpretty.disable()