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))
|
([#1461](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1461))
|
||||||
- Add grpc.aio instrumentation to package entry points
|
- Add grpc.aio instrumentation to package entry points
|
||||||
([#1442](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1442))
|
([#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)
|
## 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.
|
An instrumented engine if passed in as an argument or list of instrumented engines, None otherwise.
|
||||||
"""
|
"""
|
||||||
tracer_provider = kwargs.get("tracer_provider")
|
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(
|
_w(
|
||||||
"sqlalchemy.engine",
|
"sqlalchemy.engine",
|
||||||
"create_engine",
|
"create_engine",
|
||||||
_wrap_create_engine(tracer_provider),
|
_wrap_create_engine(tracer_provider, enable_commenter),
|
||||||
)
|
)
|
||||||
_w(
|
_w(
|
||||||
"sqlalchemy.engine.base",
|
"sqlalchemy.engine.base",
|
||||||
@ -151,7 +156,7 @@ class SQLAlchemyInstrumentor(BaseInstrumentor):
|
|||||||
_w(
|
_w(
|
||||||
"sqlalchemy.ext.asyncio",
|
"sqlalchemy.ext.asyncio",
|
||||||
"create_async_engine",
|
"create_async_engine",
|
||||||
_wrap_create_async_engine(tracer_provider),
|
_wrap_create_async_engine(tracer_provider, enable_commenter),
|
||||||
)
|
)
|
||||||
if kwargs.get("engine") is not None:
|
if kwargs.get("engine") is not None:
|
||||||
return EngineTracer(
|
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
|
# pylint: disable=unused-argument
|
||||||
def _wrap_create_async_engine_internal(func, module, args, kwargs):
|
def _wrap_create_async_engine_internal(func, module, args, kwargs):
|
||||||
"""Trace the SQLAlchemy engine, creating an `EngineTracer`
|
"""Trace the SQLAlchemy engine, creating an `EngineTracer`
|
||||||
object that will listen to SQLAlchemy events.
|
object that will listen to SQLAlchemy events.
|
||||||
"""
|
"""
|
||||||
engine = func(*args, **kwargs)
|
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 engine
|
||||||
|
|
||||||
return _wrap_create_async_engine_internal
|
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
|
# pylint: disable=unused-argument
|
||||||
def _wrap_create_engine_internal(func, module, args, kwargs):
|
def _wrap_create_engine_internal(func, module, args, kwargs):
|
||||||
"""Trace the SQLAlchemy engine, creating an `EngineTracer`
|
"""Trace the SQLAlchemy engine, creating an `EngineTracer`
|
||||||
object that will listen to SQLAlchemy events.
|
object that will listen to SQLAlchemy events.
|
||||||
"""
|
"""
|
||||||
engine = func(*args, **kwargs)
|
engine = func(*args, **kwargs)
|
||||||
EngineTracer(_get_tracer(tracer_provider), engine)
|
EngineTracer(_get_tracer(tracer_provider), engine, enable_commenter)
|
||||||
return engine
|
return engine
|
||||||
|
|
||||||
return _wrap_create_engine_internal
|
return _wrap_create_engine_internal
|
||||||
@ -94,7 +96,7 @@ def _wrap_connect(tracer_provider=None):
|
|||||||
|
|
||||||
class EngineTracer:
|
class EngineTracer:
|
||||||
def __init__(
|
def __init__(
|
||||||
self, tracer, engine, enable_commenter=True, commenter_options=None
|
self, tracer, engine, enable_commenter=False, commenter_options=None
|
||||||
):
|
):
|
||||||
self.tracer = tracer
|
self.tracer = tracer
|
||||||
self.engine = engine
|
self.engine = engine
|
||||||
|
@ -77,3 +77,30 @@ class TestSqlalchemyInstrumentationWithSQLCommenter(TestBase):
|
|||||||
self.caplog.records[-2].getMessage(),
|
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}'\*/;",
|
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