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)
Beispiel #6
0
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()