From 89fb0896c8471dc25a0f86539c0e15800778d421 Mon Sep 17 00:00:00 2001 From: "Jens H. Nielsen" Date: Thu, 12 Sep 2024 16:07:13 +0200 Subject: [PATCH 1/2] Remove opencensus telemetry --- pyproject.toml | 4 -- src/qcodes/logger/logger.py | 76 +++---------------------------------- 2 files changed, 5 insertions(+), 75 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 506bef38cc5..019e0532d52 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -113,10 +113,6 @@ docs = [ "qcodes_loop>=0.1.1", # legacy dataset import examples "jinja2>=3.1.3", # transitive dependency pin due to cve in earlier version ] -opencensus = [ - "opencensus>=0.7.10", - "opencensus-ext-azure>=1.0.4, <2.0.0", -] refactor = [ "libcst>=1.2.0" ] diff --git a/src/qcodes/logger/logger.py b/src/qcodes/logger/logger.py index 667838697d4..2c8bb24fdbd 100644 --- a/src/qcodes/logger/logger.py +++ b/src/qcodes/logger/logger.py @@ -10,7 +10,6 @@ import logging import logging.handlers import os -import platform import sys from collections import OrderedDict from contextlib import contextmanager @@ -77,6 +76,10 @@ ) +@deprecated( + "filter_out_telemetry_log_records is deprecated and will be removed", + category=QCoDeSDeprecationWarning, +) def filter_out_telemetry_log_records(record: logging.LogRecord) -> bool: """ here we filter any message that is likely to be thrown from @@ -212,72 +215,6 @@ def flush_telemetry_traces() -> None: telemetry_handler.flush() -@deprecated( - "OpenCensus integration is deprecated. Please use your own telemetry integration as needed, we recommend OpenTelemetry", - category=QCoDeSDeprecationWarning, -) -def _create_telemetry_handler() -> "AzureLogHandler": - """ - Configure, create, and return the telemetry handler - """ - from opencensus.ext.azure.log_exporter import ( # type: ignore[import-not-found] - AzureLogHandler, - ) - - global telemetry_handler - - # The default_custom_dimensions will appear in the "customDimensions" - # field in Azure log analytics for every log message alongside any - # custom dimensions that message may have. All messages additionally come - # with custom dimensions fileName, level, lineNumber, module, and process - default_custom_dimensions = {"pythonExecutable": sys.executable} - - class CustomDimensionsFilter(logging.Filter): - """ - Add application-wide properties to the customDimension field of - AzureLogHandler records - """ - - def __init__(self, custom_dimensions: dict[str, str]): - super().__init__() - self.custom_dimensions = custom_dimensions - - def filter(self, record: logging.LogRecord) -> bool: - """ - Add the default custom_dimensions into the current log record - """ - cdim = self.custom_dimensions.copy() - cdim.update(getattr(record, "custom_dimensions", {})) - record.custom_dimensions = cdim - - return True - - # Transport module of opencensus-ext-azure logs info 'transmission - # succeeded' which is also exported to azure if AzureLogHandler is - # in root_logger. The following lines stops that. - logging.getLogger("opencensus.ext.azure.common.transport").setLevel(logging.WARNING) - - loc = qc.config.GUID_components.location - stat = qc.config.GUID_components.work_station - - def callback_function(envelope: "Envelope") -> bool: - envelope.tags["ai.user.accountId"] = platform.node() - envelope.tags["ai.user.id"] = f"{loc:02x}-{stat:06x}" - return True - - telemetry_handler = AzureLogHandler( - connection_string=f"InstrumentationKey=" - f"{qc.config.telemetry.instrumentation_key}" - ) - assert telemetry_handler is not None - telemetry_handler.add_telemetry_processor(callback_function) - telemetry_handler.setLevel(logging.INFO) - telemetry_handler.addFilter(CustomDimensionsFilter(default_custom_dimensions)) - telemetry_handler.setFormatter(get_formatter_for_telemetry()) - - return telemetry_handler - - def start_logger() -> None: """ Start logging of messages passed through the python logging module. @@ -312,7 +249,6 @@ def start_logger() -> None: console_handler = logging.StreamHandler() console_handler.setLevel(qc.config.logger.console_level) console_handler.setFormatter(get_formatter()) - console_handler.addFilter(filter_out_telemetry_log_records) root_logger.addHandler(console_handler) # file @@ -331,9 +267,7 @@ def start_logger() -> None: logging.captureWarnings(capture=True) if qc.config.telemetry.enabled: - root_logger.addHandler( - _create_telemetry_handler() # pyright: ignore[reportDeprecated] - ) + log.warning("Enabling telemetry in QCoDes config has no effect.") log.info("QCoDes logger setup completed") From ac6d9c7db7dff553a7be45f03227f9428ba2fc5a Mon Sep 17 00:00:00 2001 From: "Jens H. Nielsen" Date: Fri, 13 Sep 2024 09:48:20 +0200 Subject: [PATCH 2/2] Add changelog for 6439 --- docs/changes/newsfragments/6439.improved | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/changes/newsfragments/6439.improved diff --git a/docs/changes/newsfragments/6439.improved b/docs/changes/newsfragments/6439.improved new file mode 100644 index 00000000000..3ca116fadea --- /dev/null +++ b/docs/changes/newsfragments/6439.improved @@ -0,0 +1,5 @@ +The deprecated support for enabling OpenCensus based telemetry has been removed. +QCoDeS will now warn if you try to enable OpenCensus based telemetry in the config. +Users are encouraged to roll out their own telemetry solution if they need it based +on OpenTelemetry. This also means that the `qcodes[opencensus]` install target has been removed. +The unused method `filter_out_telemetry_log_records` has been deprecated and will be removed in a future release.