From 411906fb92ace15d807c0664ff33212f812cf7a5 Mon Sep 17 00:00:00 2001 From: Michael Juarez Date: Mon, 9 May 2022 20:06:55 -0700 Subject: [PATCH 1/3] use sqlalchemy module name not engine. fixes #922 --- .../instrumentation/sqlalchemy/__init__.py | 2 +- .../instrumentation/sqlalchemy/engine.py | 11 +++++++---- .../instrumentation/sqlalchemy/package.py | 1 + 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py index 3beab1fefc..6aa60383f0 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py @@ -104,7 +104,7 @@ def _instrument(self, **kwargs): if kwargs.get("engine") is not None: return EngineTracer( - _get_tracer(kwargs.get("engine"), tracer_provider), + _get_tracer(tracer_provider), kwargs.get("engine"), kwargs.get("enable_commenter", False), ) diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py index 10531d8d57..910ff7c4f6 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py @@ -16,6 +16,9 @@ from sqlalchemy.event import listen # pylint: disable=no-name-in-module from opentelemetry import trace +from opentelemetry.instrumentation.sqlalchemy.package import ( + _instrumenting_module_name, +) from opentelemetry.instrumentation.sqlalchemy.version import __version__ from opentelemetry.instrumentation.utils import ( _generate_opentelemetry_traceparent, @@ -40,9 +43,9 @@ def _normalize_vendor(vendor): return vendor -def _get_tracer(engine, tracer_provider=None): +def _get_tracer(tracer_provider=None): return trace.get_tracer( - _normalize_vendor(engine.name), + _instrumenting_module_name, __version__, tracer_provider=tracer_provider, ) @@ -55,7 +58,7 @@ def _wrap_create_async_engine_internal(func, module, args, kwargs): object that will listen to SQLAlchemy events. """ engine = func(*args, **kwargs) - EngineTracer(_get_tracer(engine, tracer_provider), engine.sync_engine) + EngineTracer(_get_tracer(tracer_provider), engine.sync_engine) return engine return _wrap_create_async_engine_internal @@ -68,7 +71,7 @@ def _wrap_create_engine_internal(func, module, args, kwargs): object that will listen to SQLAlchemy events. """ engine = func(*args, **kwargs) - EngineTracer(_get_tracer(engine, tracer_provider), engine) + EngineTracer(_get_tracer(tracer_provider), engine) return engine return _wrap_create_engine_internal diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/package.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/package.py index d608d3476a..f1f833287d 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/package.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/package.py @@ -12,5 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. +_instrumenting_module_name = "opentelemetry.instrumentation.sqlalchemy" _instruments = ("sqlalchemy",) From bf9324d2f409c1ef7c56880df767c452704d5cd1 Mon Sep 17 00:00:00 2001 From: Michael Juarez Date: Tue, 10 May 2022 10:02:08 -0700 Subject: [PATCH 2/3] update test cases --- .../tests/test_sqlalchemy.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py index dd09ff6dbf..bf60e6e6aa 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py @@ -70,6 +70,10 @@ async def run(): self.assertEqual(len(spans), 1) self.assertEqual(spans[0].name, "SELECT :memory:") self.assertEqual(spans[0].kind, trace.SpanKind.CLIENT) + self.assertEqual( + spans[0].instrumentation_scope.name, + "opentelemetry.instrumentation.sqlalchemy", + ) asyncio.get_event_loop().run_until_complete(run()) @@ -104,6 +108,10 @@ def test_create_engine_wrapper(self): self.assertEqual(len(spans), 1) self.assertEqual(spans[0].name, "SELECT :memory:") self.assertEqual(spans[0].kind, trace.SpanKind.CLIENT) + self.assertEqual( + spans[0].instrumentation_scope.name, + "opentelemetry.instrumentation.sqlalchemy", + ) def test_custom_tracer_provider(self): provider = TracerProvider( @@ -154,6 +162,10 @@ async def run(): self.assertEqual(len(spans), 1) self.assertEqual(spans[0].name, "SELECT :memory:") self.assertEqual(spans[0].kind, trace.SpanKind.CLIENT) + self.assertEqual( + spans[0].instrumentation_scope.name, + "opentelemetry.instrumentation.sqlalchemy", + ) asyncio.get_event_loop().run_until_complete(run()) From 8c823306bd5ce90c807c0dabccdb26a378316c2f Mon Sep 17 00:00:00 2001 From: Michael Juarez Date: Tue, 10 May 2022 10:03:23 -0700 Subject: [PATCH 3/3] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33af250b7e..4b90e91bc7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1055](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1055)) - Refactoring custom header collection API for consistency ([#1064](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1064)) +- `opentelemetry-instrumentation-sqlalchemy` will correctly report `otel.library.name` + ([#1086](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1086)) ### Added - `opentelemetry-instrument` and `opentelemetry-bootstrap` now include a `--version` flag