mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-08-01 09:13:23 +08:00
Add callback for direct instrument
This commit is contained in:
@ -173,13 +173,18 @@ def _teardown_request(exc):
|
||||
|
||||
|
||||
class _InstrumentedFlask(flask.Flask):
|
||||
|
||||
name_callback = get_default_span_name
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self._original_wsgi_ = self.wsgi_app
|
||||
self.wsgi_app = _rewrapped_app(self.wsgi_app)
|
||||
|
||||
_before_request = _wrapped_before_request(get_default_span_name)
|
||||
_before_request = _wrapped_before_request(
|
||||
_InstrumentedFlask.name_callback
|
||||
)
|
||||
self._before_request = _before_request
|
||||
self.before_request(_before_request)
|
||||
self.teardown_request(_teardown_request)
|
||||
@ -194,6 +199,9 @@ class FlaskInstrumentor(BaseInstrumentor):
|
||||
|
||||
def _instrument(self, **kwargs):
|
||||
self._original_flask = flask.Flask
|
||||
name_callback = kwargs.get("name_callback")
|
||||
if callable(name_callback):
|
||||
_InstrumentedFlask.name_callback = name_callback
|
||||
flask.Flask = _InstrumentedFlask
|
||||
|
||||
def instrument_app(
|
||||
|
@ -208,3 +208,32 @@ class TestProgrammaticCustomSpanName(
|
||||
span_list = self.memory_exporter.get_finished_spans()
|
||||
self.assertEqual(len(span_list), 1)
|
||||
self.assertEqual(span_list[0].name, "flask-custom-span-name")
|
||||
|
||||
|
||||
class TestProgrammaticCustomSpanNameCallbackWithoutApp(
|
||||
InstrumentationTest, TestBase, WsgiTestBase
|
||||
):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
||||
def custom_span_name():
|
||||
return "instrument-without-app"
|
||||
|
||||
FlaskInstrumentor().instrument(name_callback=custom_span_name)
|
||||
from flask import Flask
|
||||
|
||||
self.app = Flask(__name__)
|
||||
|
||||
self._common_initialization()
|
||||
|
||||
def tearDown(self):
|
||||
super().tearDown()
|
||||
with self.disable_logging():
|
||||
FlaskInstrumentor().uninstrument()
|
||||
|
||||
def test_custom_span_name(self):
|
||||
self.client.get("/hello/123")
|
||||
|
||||
span_list = self.memory_exporter.get_finished_spans()
|
||||
self.assertEqual(len(span_list), 1)
|
||||
self.assertEqual(span_list[0].name, "instrument-without-app")
|
||||
|
Reference in New Issue
Block a user