Skip to content

Commit cfd017e

Browse files
authored
fix enable_commenter functionality (#1440)
1 parent 99e0b42 commit cfd017e

File tree

4 files changed

+44
-8
lines changed

4 files changed

+44
-8
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4747
([#1461](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1461))
4848
- Add grpc.aio instrumentation to package entry points
4949
([#1442](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1442))
50+
- Fix a bug in SQLAlchemy instrumentation - support disabling enable_commenter variable
51+
([#1440](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1440))
5052

5153
## Version 1.14.0/0.35b0 (2022-11-03)
5254

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

+8-3
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,16 @@ def _instrument(self, **kwargs):
136136
An instrumented engine if passed in as an argument or list of instrumented engines, None otherwise.
137137
"""
138138
tracer_provider = kwargs.get("tracer_provider")
139-
_w("sqlalchemy", "create_engine", _wrap_create_engine(tracer_provider))
139+
enable_commenter = kwargs.get("enable_commenter", False)
140+
_w(
141+
"sqlalchemy",
142+
"create_engine",
143+
_wrap_create_engine(tracer_provider, enable_commenter),
144+
)
140145
_w(
141146
"sqlalchemy.engine",
142147
"create_engine",
143-
_wrap_create_engine(tracer_provider),
148+
_wrap_create_engine(tracer_provider, enable_commenter),
144149
)
145150
_w(
146151
"sqlalchemy.engine.base",
@@ -151,7 +156,7 @@ def _instrument(self, **kwargs):
151156
_w(
152157
"sqlalchemy.ext.asyncio",
153158
"create_async_engine",
154-
_wrap_create_async_engine(tracer_provider),
159+
_wrap_create_async_engine(tracer_provider, enable_commenter),
155160
)
156161
if kwargs.get("engine") is not None:
157162
return EngineTracer(

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

+7-5
Original file line numberDiff line numberDiff line change
@@ -49,27 +49,29 @@ def _get_tracer(tracer_provider=None):
4949
)
5050

5151

52-
def _wrap_create_async_engine(tracer_provider=None):
52+
def _wrap_create_async_engine(tracer_provider=None, enable_commenter=False):
5353
# pylint: disable=unused-argument
5454
def _wrap_create_async_engine_internal(func, module, args, kwargs):
5555
"""Trace the SQLAlchemy engine, creating an `EngineTracer`
5656
object that will listen to SQLAlchemy events.
5757
"""
5858
engine = func(*args, **kwargs)
59-
EngineTracer(_get_tracer(tracer_provider), engine.sync_engine)
59+
EngineTracer(
60+
_get_tracer(tracer_provider), engine.sync_engine, enable_commenter
61+
)
6062
return engine
6163

6264
return _wrap_create_async_engine_internal
6365

6466

65-
def _wrap_create_engine(tracer_provider=None):
67+
def _wrap_create_engine(tracer_provider=None, enable_commenter=False):
6668
# pylint: disable=unused-argument
6769
def _wrap_create_engine_internal(func, module, args, kwargs):
6870
"""Trace the SQLAlchemy engine, creating an `EngineTracer`
6971
object that will listen to SQLAlchemy events.
7072
"""
7173
engine = func(*args, **kwargs)
72-
EngineTracer(_get_tracer(tracer_provider), engine)
74+
EngineTracer(_get_tracer(tracer_provider), engine, enable_commenter)
7375
return engine
7476

7577
return _wrap_create_engine_internal
@@ -94,7 +96,7 @@ def _wrap_connect_internal(func, module, args, kwargs):
9496

9597
class EngineTracer:
9698
def __init__(
97-
self, tracer, engine, enable_commenter=True, commenter_options=None
99+
self, tracer, engine, enable_commenter=False, commenter_options=None
98100
):
99101
self.tracer = tracer
100102
self.engine = engine

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

+27
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,30 @@ def test_sqlcommenter_flask_integration(self):
7777
self.caplog.records[-2].getMessage(),
7878
r"SELECT 1 /\*db_driver='(.*)',flask=1,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;",
7979
)
80+
81+
def test_sqlcommenter_enabled_create_engine_after_instrumentation(self):
82+
SQLAlchemyInstrumentor().instrument(
83+
tracer_provider=self.tracer_provider,
84+
enable_commenter=True,
85+
)
86+
from sqlalchemy import create_engine # pylint: disable-all
87+
88+
engine = create_engine("sqlite:///:memory:")
89+
cnx = engine.connect()
90+
cnx.execute("SELECT 1;").fetchall()
91+
self.assertRegex(
92+
self.caplog.records[-2].getMessage(),
93+
r"SELECT 1 /\*db_driver='(.*)',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;",
94+
)
95+
96+
def test_sqlcommenter_disabled_create_engine_after_instrumentation(self):
97+
SQLAlchemyInstrumentor().instrument(
98+
tracer_provider=self.tracer_provider,
99+
enable_commenter=False,
100+
)
101+
from sqlalchemy import create_engine # pylint: disable-all
102+
103+
engine = create_engine("sqlite:///:memory:")
104+
cnx = engine.connect()
105+
cnx.execute("SELECT 1;").fetchall()
106+
self.assertEqual(self.caplog.records[-2].getMessage(), "SELECT 1;")

0 commit comments

Comments
 (0)