Skip to content

Commit 4234bf3

Browse files
committed
Override __new__ to instrument multiple engines
1 parent 51ba801 commit 4234bf3

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py

+3
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ class SQLAlchemyInstrumentor(BaseInstrumentor):
7373
See `BaseInstrumentor`
7474
"""
7575

76+
def __new__(cls, *args, **kwargs):
77+
return object.__new__(cls, *args, **kwargs)
78+
7679
def instrumentation_dependencies(self) -> Collection[str]:
7780
return _instruments
7881

instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py

+22
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,28 @@ def test_trace_integration(self):
5050
self.assertEqual(spans[0].name, "SELECT :memory:")
5151
self.assertEqual(spans[0].kind, trace.SpanKind.CLIENT)
5252

53+
def test_instrument_two_engines(self):
54+
engine_1 = create_engine("sqlite:///:memory:")
55+
engine_2 = create_engine("sqlite:///:memory:")
56+
57+
SQLAlchemyInstrumentor().instrument(
58+
engine=engine_1,
59+
tracer_provider=self.tracer_provider,
60+
)
61+
cnx_1 = engine_1.connect()
62+
cnx_1.execute("SELECT 1 + 1;").fetchall()
63+
64+
SQLAlchemyInstrumentor().instrument(
65+
engine=engine_2,
66+
tracer_provider=self.tracer_provider,
67+
)
68+
cnx_2 = engine_2.connect()
69+
cnx_2.execute("SELECT 1 + 1;").fetchall()
70+
71+
spans = self.memory_exporter.get_finished_spans()
72+
73+
self.assertEqual(len(spans), 2)
74+
5375
@pytest.mark.skipif(
5476
not sqlalchemy.__version__.startswith("1.4"),
5577
reason="only run async tests for 1.4",

0 commit comments

Comments
 (0)