mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-31 06:03:21 +08:00
Updated dbapi and psycopg2 instrumentations. (#246)
Changes: - Update dbapi instrumentation to use the SQL statement name as the span instead of the entire SQL query. - Renamed TracedCursor with CursorTracing. The class was not a valid Cursor so the name was confusing. - Updated CursorTracing's (previously TracedCursor) traced_execution method to accept the cursor instance as the first argument. This is required as for some dbapi implementations, we need a reference to the cursor in order to correctly format the SQL query. - Updated psycopg2 instrumentation to leverage dbapi's `cursor_factory` mechanism instead of wrapping the cursor with wrapt. This results in a simpler instrumentation without monkey patching objects at runtime and allows psycopg2's type registration system to work. This should make it possible to use psycopg2 instrumentation when using the JSONB feature or with frameworks like Django.
This commit is contained in:
@ -50,7 +50,7 @@ class TestDBApiIntegration(TestBase):
|
||||
spans_list = self.memory_exporter.get_finished_spans()
|
||||
self.assertEqual(len(spans_list), 1)
|
||||
span = spans_list[0]
|
||||
self.assertEqual(span.name, "Test query")
|
||||
self.assertEqual(span.name, "Test")
|
||||
self.assertIs(span.kind, trace_api.SpanKind.CLIENT)
|
||||
|
||||
self.assertEqual(span.attributes["component"], "testcomponent")
|
||||
@ -65,6 +65,27 @@ class TestDBApiIntegration(TestBase):
|
||||
span.status.status_code, trace_api.status.StatusCode.UNSET
|
||||
)
|
||||
|
||||
def test_span_name(self):
|
||||
db_integration = dbapi.DatabaseApiIntegration(
|
||||
self.tracer, "testcomponent", "testtype", {}
|
||||
)
|
||||
mock_connection = db_integration.wrapped_connection(
|
||||
mock_connect, {}, {}
|
||||
)
|
||||
cursor = mock_connection.cursor()
|
||||
cursor.execute("Test query", ("param1Value", False))
|
||||
cursor.execute(
|
||||
"""multi
|
||||
line
|
||||
query"""
|
||||
)
|
||||
cursor.execute("tab\tseparated query")
|
||||
spans_list = self.memory_exporter.get_finished_spans()
|
||||
self.assertEqual(len(spans_list), 3)
|
||||
self.assertEqual(spans_list[0].name, "Test")
|
||||
self.assertEqual(spans_list[1].name, "multi")
|
||||
self.assertEqual(spans_list[2].name, "tab")
|
||||
|
||||
def test_span_succeeded_with_capture_of_statement_parameters(self):
|
||||
connection_props = {
|
||||
"database": "testdatabase",
|
||||
@ -93,7 +114,7 @@ class TestDBApiIntegration(TestBase):
|
||||
spans_list = self.memory_exporter.get_finished_spans()
|
||||
self.assertEqual(len(spans_list), 1)
|
||||
span = spans_list[0]
|
||||
self.assertEqual(span.name, "Test query")
|
||||
self.assertEqual(span.name, "Test")
|
||||
self.assertIs(span.kind, trace_api.SpanKind.CLIENT)
|
||||
|
||||
self.assertEqual(span.attributes["component"], "testcomponent")
|
||||
|
Reference in New Issue
Block a user