mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-28 20:52:57 +08:00
fix enable_commenter functionality (#1440)
This commit is contained in:
@ -47,6 +47,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
([#1461](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1461))
|
||||
- Add grpc.aio instrumentation to package entry points
|
||||
([#1442](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1442))
|
||||
- Fix a bug in SQLAlchemy instrumentation - support disabling enable_commenter variable
|
||||
([#1440](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1440))
|
||||
|
||||
## Version 1.14.0/0.35b0 (2022-11-03)
|
||||
|
||||
|
@ -136,11 +136,16 @@ class SQLAlchemyInstrumentor(BaseInstrumentor):
|
||||
An instrumented engine if passed in as an argument or list of instrumented engines, None otherwise.
|
||||
"""
|
||||
tracer_provider = kwargs.get("tracer_provider")
|
||||
_w("sqlalchemy", "create_engine", _wrap_create_engine(tracer_provider))
|
||||
enable_commenter = kwargs.get("enable_commenter", False)
|
||||
_w(
|
||||
"sqlalchemy",
|
||||
"create_engine",
|
||||
_wrap_create_engine(tracer_provider, enable_commenter),
|
||||
)
|
||||
_w(
|
||||
"sqlalchemy.engine",
|
||||
"create_engine",
|
||||
_wrap_create_engine(tracer_provider),
|
||||
_wrap_create_engine(tracer_provider, enable_commenter),
|
||||
)
|
||||
_w(
|
||||
"sqlalchemy.engine.base",
|
||||
@ -151,7 +156,7 @@ class SQLAlchemyInstrumentor(BaseInstrumentor):
|
||||
_w(
|
||||
"sqlalchemy.ext.asyncio",
|
||||
"create_async_engine",
|
||||
_wrap_create_async_engine(tracer_provider),
|
||||
_wrap_create_async_engine(tracer_provider, enable_commenter),
|
||||
)
|
||||
if kwargs.get("engine") is not None:
|
||||
return EngineTracer(
|
||||
|
@ -49,27 +49,29 @@ def _get_tracer(tracer_provider=None):
|
||||
)
|
||||
|
||||
|
||||
def _wrap_create_async_engine(tracer_provider=None):
|
||||
def _wrap_create_async_engine(tracer_provider=None, enable_commenter=False):
|
||||
# pylint: disable=unused-argument
|
||||
def _wrap_create_async_engine_internal(func, module, args, kwargs):
|
||||
"""Trace the SQLAlchemy engine, creating an `EngineTracer`
|
||||
object that will listen to SQLAlchemy events.
|
||||
"""
|
||||
engine = func(*args, **kwargs)
|
||||
EngineTracer(_get_tracer(tracer_provider), engine.sync_engine)
|
||||
EngineTracer(
|
||||
_get_tracer(tracer_provider), engine.sync_engine, enable_commenter
|
||||
)
|
||||
return engine
|
||||
|
||||
return _wrap_create_async_engine_internal
|
||||
|
||||
|
||||
def _wrap_create_engine(tracer_provider=None):
|
||||
def _wrap_create_engine(tracer_provider=None, enable_commenter=False):
|
||||
# pylint: disable=unused-argument
|
||||
def _wrap_create_engine_internal(func, module, args, kwargs):
|
||||
"""Trace the SQLAlchemy engine, creating an `EngineTracer`
|
||||
object that will listen to SQLAlchemy events.
|
||||
"""
|
||||
engine = func(*args, **kwargs)
|
||||
EngineTracer(_get_tracer(tracer_provider), engine)
|
||||
EngineTracer(_get_tracer(tracer_provider), engine, enable_commenter)
|
||||
return engine
|
||||
|
||||
return _wrap_create_engine_internal
|
||||
@ -94,7 +96,7 @@ def _wrap_connect(tracer_provider=None):
|
||||
|
||||
class EngineTracer:
|
||||
def __init__(
|
||||
self, tracer, engine, enable_commenter=True, commenter_options=None
|
||||
self, tracer, engine, enable_commenter=False, commenter_options=None
|
||||
):
|
||||
self.tracer = tracer
|
||||
self.engine = engine
|
||||
|
@ -77,3 +77,30 @@ class TestSqlalchemyInstrumentationWithSQLCommenter(TestBase):
|
||||
self.caplog.records[-2].getMessage(),
|
||||
r"SELECT 1 /\*db_driver='(.*)',flask=1,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;",
|
||||
)
|
||||
|
||||
def test_sqlcommenter_enabled_create_engine_after_instrumentation(self):
|
||||
SQLAlchemyInstrumentor().instrument(
|
||||
tracer_provider=self.tracer_provider,
|
||||
enable_commenter=True,
|
||||
)
|
||||
from sqlalchemy import create_engine # pylint: disable-all
|
||||
|
||||
engine = create_engine("sqlite:///:memory:")
|
||||
cnx = engine.connect()
|
||||
cnx.execute("SELECT 1;").fetchall()
|
||||
self.assertRegex(
|
||||
self.caplog.records[-2].getMessage(),
|
||||
r"SELECT 1 /\*db_driver='(.*)',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;",
|
||||
)
|
||||
|
||||
def test_sqlcommenter_disabled_create_engine_after_instrumentation(self):
|
||||
SQLAlchemyInstrumentor().instrument(
|
||||
tracer_provider=self.tracer_provider,
|
||||
enable_commenter=False,
|
||||
)
|
||||
from sqlalchemy import create_engine # pylint: disable-all
|
||||
|
||||
engine = create_engine("sqlite:///:memory:")
|
||||
cnx = engine.connect()
|
||||
cnx.execute("SELECT 1;").fetchall()
|
||||
self.assertEqual(self.caplog.records[-2].getMessage(), "SELECT 1;")
|
||||
|
Reference in New Issue
Block a user