From b2d4efb340e9a5b0f5627a7d46ca76ba6493b9d6 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 14 Nov 2024 10:23:09 -0800 Subject: [PATCH 1/5] event --- .../azure-monitor-opentelemetry/CHANGELOG.md | 3 +++ .../azure/monitor/opentelemetry/_configure.py | 6 ++++++ .../tests/test_configure.py | 13 +++++++++++++ 3 files changed, 22 insertions(+) diff --git a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md index a314e2090ab1..6046b84289fb 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md @@ -4,6 +4,9 @@ ### Features Added +- Distro to automatically configure event logger provider + ([#38071](https://github.com/Azure/azure-sdk-for-python/pull/38071)) + ### Breaking Changes ### Bugs Fixed diff --git a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py index 18e349913678..d344e0865b4b 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -7,6 +7,7 @@ from logging import getLogger from typing import Dict, List, cast +from opentelemetry._events import set_event_logger_provider from opentelemetry._logs import set_logger_provider from opentelemetry.instrumentation.dependencies import ( get_dist_dependency_conflicts, @@ -15,6 +16,7 @@ BaseInstrumentor, ) from opentelemetry.metrics import set_meter_provider +from opentelemetry.sdk._events import EventLoggerProvider from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler from opentelemetry.sdk._logs.export import BatchLogRecordProcessor from opentelemetry.sdk.metrics import MeterProvider @@ -172,6 +174,10 @@ def _setup_logging(configurations: Dict[str, ConfigurationValue]): logger_name: str = configurations[LOGGER_NAME_ARG] # type: ignore getLogger(logger_name).addHandler(handler) + # Setup EventLoggerProvider + event_provider = EventLoggerProvider(logger_provider) + set_event_logger_provider(event_provider) + def _setup_metrics(configurations: Dict[str, ConfigurationValue]): resource: Resource = configurations[RESOURCE_ARG] # type: ignore diff --git a/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py b/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py index e084c5205c26..5d1e5ca91d28 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py @@ -303,6 +303,13 @@ def test_setup_tracing( tp_init_mock.add_span_processor.assert_has_calls([call(custom_sp), call(bsp_init_mock)]) self.assertEqual(azure_core_mock.tracing_implementation, OpenTelemetrySpan) + @patch( + "azure.monitor.opentelemetry._configure.set_event_logger_provider", + ) + @patch( + "azure.monitor.opentelemetry._configure.EventLoggerProvider", + autospec=True, + ) @patch( "azure.monitor.opentelemetry._configure.getLogger", ) @@ -330,10 +337,14 @@ def test_setup_logging( blrp_mock, logging_handler_mock, get_logger_mock, + elp_mock, + set_elp_mock, ): lp_init_mock = Mock() lp_mock.return_value = lp_init_mock log_exp_init_mock = Mock() + elp_init_mock = Mock() + elp_mock.return_value = elp_init_mock log_exporter_mock.return_value = log_exp_init_mock blrp_init_mock = Mock() blrp_mock.return_value = blrp_init_mock @@ -359,6 +370,8 @@ def test_setup_logging( logging_handler_mock.assert_called_once_with(logger_provider=lp_init_mock) get_logger_mock.assert_called_once_with("test") logger_mock.addHandler.assert_called_once_with(logging_handler_init_mock) + elp_mock.assert_called_once_with(lp_init_mock) + set_elp_mock.assert_called_once_with(elp_init_mock) @patch( "azure.monitor.opentelemetry._configure.PeriodicExportingMetricReader", From aaf120c72d4d6c47be811233d0cef53ccba11791 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 14 Nov 2024 10:31:49 -0800 Subject: [PATCH 2/5] Update CHANGELOG.md --- sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md index 6046b84289fb..ccec7162c262 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md @@ -5,7 +5,7 @@ ### Features Added - Distro to automatically configure event logger provider - ([#38071](https://github.com/Azure/azure-sdk-for-python/pull/38071)) + ([#38543](https://github.com/Azure/azure-sdk-for-python/pull/38543)) ### Breaking Changes From b3e69d727664cced449f6ed7b22da49d3cbe25e2 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 14 Nov 2024 12:11:16 -0800 Subject: [PATCH 3/5] Update test_psycopg2.py --- .../tests/instrumentation/test_psycopg2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py b/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py index 222e03120f7a..3d399a6c10db 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py +++ b/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py @@ -10,7 +10,7 @@ # Skip for Python v3.13 until https://github.com/psycopg/psycopg2/pull/1729 is resolved # Skip for Python v3.8 on windows due to https://github.com/psycopg/psycopg/issues/936 -if not (platform.system() == "Windows" and sys.version_info < (3, 9)) and sys.implementation.name != "pypy": +if (not (platform.system() == "Windows" and sys.version_info < (3, 9))) and sys.implementation.name != "pypy": from opentelemetry.instrumentation.psycopg2 import ( Psycopg2Instrumentor, ) From dbcb2e1bdb1fe17d347a33d763d05ad4ce1226aa Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 14 Nov 2024 13:53:16 -0800 Subject: [PATCH 4/5] Update test_psycopg2.py --- .../tests/instrumentation/test_psycopg2.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py b/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py index 3d399a6c10db..f12f1f9ed128 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py +++ b/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py @@ -3,14 +3,14 @@ # Licensed under the MIT License. See License in the project root for # license information. # -------------------------------------------------------------------------- -import platform +import os import pytest import sys import unittest # Skip for Python v3.13 until https://github.com/psycopg/psycopg2/pull/1729 is resolved # Skip for Python v3.8 on windows due to https://github.com/psycopg/psycopg/issues/936 -if (not (platform.system() == "Windows" and sys.version_info < (3, 9))) and sys.implementation.name != "pypy": +if (os.name != "nt" or sys.version_info > (3, 8)) and sys.implementation.name != "pypy": from opentelemetry.instrumentation.psycopg2 import ( Psycopg2Instrumentor, ) @@ -19,7 +19,7 @@ class TestPsycopg2Instrumentation(unittest.TestCase): @pytest.mark.skipif( - platform.system() == "Windows" and sys.version_info < (3, 9) or sys.implementation.name == "pypy", + (os.name == "nt" and sys.version_info < (3, 9)) or sys.implementation.name == "pypy", reason="Psycopg2 not supported for pypy, Windows Py3.8", ) def test_instrument(self): From 24ff38d51480e1d9fe669b9dea437e1b1671508f Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 14 Nov 2024 15:50:18 -0800 Subject: [PATCH 5/5] Update dev_requirements.txt --- sdk/monitor/azure-monitor-opentelemetry/dev_requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/dev_requirements.txt b/sdk/monitor/azure-monitor-opentelemetry/dev_requirements.txt index 5e5654475d4e..82e943333b52 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/dev_requirements.txt +++ b/sdk/monitor/azure-monitor-opentelemetry/dev_requirements.txt @@ -3,6 +3,6 @@ pytest django fastapi-slim flask -psycopg2-binary; python_version >= '3.9' +psycopg2-binary requests urllib3