Skip to content

Commit d84ce2e

Browse files
authored
Fix mypy errors for exporter and distro (#45132)
* Fix mypy errors for exporter and distro * Fix format * Retrigger CI/CD pipeline
1 parent feb69a4 commit d84ce2e

10 files changed

Lines changed: 76 additions & 75 deletions

File tree

sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/_performance_counters/_manager.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from opentelemetry import metrics
1111
from opentelemetry.metrics import CallbackOptions, Observation
12-
from opentelemetry.sdk._logs import ReadableLogRecord
12+
from opentelemetry.sdk._logs import ReadWriteLogRecord
1313
from opentelemetry.sdk.trace import ReadableSpan
1414
from opentelemetry.semconv.attributes.exception_attributes import (
1515
EXCEPTION_MESSAGE,
@@ -630,13 +630,13 @@ def _record_span(self, span: ReadableSpan) -> None:
630630
except Exception: # pylint: disable=broad-except
631631
_logger.exception("Exception occurred while recording span.") # pylint: disable=C4769
632632

633-
def _record_log_record(self, readable_log_record: ReadableLogRecord) -> None:
633+
def _record_log_record(self, read_write_log_record: ReadWriteLogRecord) -> None:
634634
try:
635635
# pylint: disable=global-statement
636636
global _EXCEPTIONS_COUNT
637-
if readable_log_record.log_record:
637+
if read_write_log_record.log_record:
638638
exc_type = None
639-
log_record = readable_log_record.log_record
639+
log_record = read_write_log_record.log_record
640640
if log_record.attributes:
641641
exc_type = log_record.attributes.get(EXCEPTION_TYPE)
642642
exc_message = log_record.attributes.get(EXCEPTION_MESSAGE)

sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/_performance_counters/_processor.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33

4-
from opentelemetry.sdk._logs import ReadableLogRecord, LogRecordProcessor
4+
from opentelemetry.sdk._logs import LogRecordProcessor, ReadWriteLogRecord
55
from opentelemetry.sdk.trace import ReadableSpan, SpanProcessor
66

77
from azure.monitor.opentelemetry.exporter._performance_counters._manager import _PerformanceCountersManager
@@ -13,18 +13,18 @@ def __init__(self):
1313
super().__init__()
1414
self.call_on_emit = hasattr(super(), "on_emit")
1515

16-
def on_emit(self, readable_log_record: ReadableLogRecord) -> None: # type: ignore # pylint: disable=arguments-renamed
16+
def on_emit(self, log_record: ReadWriteLogRecord) -> None: # type: ignore # pylint: disable=arguments-renamed
1717
pcm = _PerformanceCountersManager()
1818
if pcm:
19-
pcm._record_log_record(readable_log_record)
19+
pcm._record_log_record(log_record)
2020
if self.call_on_emit:
21-
super().on_emit(readable_log_record) # type: ignore[safe-super]
21+
super().on_emit(log_record) # type: ignore[safe-super]
2222
else:
2323
# this method was removed in opentelemetry-sdk and replaced with on_emit
24-
super().emit(readable_log_record) # type: ignore[safe-super,misc] # pylint: disable=no-member
24+
super().emit(log_record) # type: ignore[safe-super,misc] # pylint: disable=no-member
2525

26-
def emit(self, readable_log_record: ReadableLogRecord) -> None:
27-
self.on_emit(readable_log_record)
26+
def emit(self, log_record: ReadWriteLogRecord) -> None:
27+
self.on_emit(log_record)
2828

2929
def shutdown(self):
3030
pass

sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/_quickpulse/_manager.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import psutil
1111

12-
from opentelemetry.sdk._logs import ReadableLogRecord
12+
from opentelemetry.sdk._logs import ReadWriteLogRecord
1313
from opentelemetry.sdk.metrics import MeterProvider, Meter
1414
from opentelemetry.sdk.resources import Resource
1515
from opentelemetry.sdk.trace import ReadableSpan
@@ -214,43 +214,43 @@ def _create_metric_instruments(self) -> None:
214214
if not self._meter:
215215
raise ValueError("Meter must be initialized before creating instruments")
216216

217-
self._request_duration = self._meter.create_histogram(
217+
self._request_duration = self._meter.create_histogram( # type: ignore
218218
_REQUEST_DURATION_NAME[0], "ms", "live metrics avg request duration in ms"
219219
)
220-
self._dependency_duration = self._meter.create_histogram(
220+
self._dependency_duration = self._meter.create_histogram( # type: ignore
221221
_DEPENDENCY_DURATION_NAME[0], "ms", "live metrics avg dependency duration in ms"
222222
)
223223
# We use a counter to represent rates per second because collection
224224
# interval is one second so we simply need the number of requests
225225
# within the collection interval
226-
self._request_rate_counter = self._meter.create_counter(
226+
self._request_rate_counter = self._meter.create_counter( # type: ignore
227227
_REQUEST_RATE_NAME[0], "req/sec", "live metrics request rate per second"
228228
)
229-
self._request_failed_rate_counter = self._meter.create_counter(
229+
self._request_failed_rate_counter = self._meter.create_counter( # type: ignore
230230
_REQUEST_FAILURE_RATE_NAME[0], "req/sec", "live metrics request failed rate per second"
231231
)
232-
self._dependency_rate_counter = self._meter.create_counter(
232+
self._dependency_rate_counter = self._meter.create_counter( # type: ignore
233233
_DEPENDENCY_RATE_NAME[0], "dep/sec", "live metrics dependency rate per second"
234234
)
235-
self._dependency_failure_rate_counter = self._meter.create_counter(
235+
self._dependency_failure_rate_counter = self._meter.create_counter( # type: ignore
236236
_DEPENDENCY_FAILURE_RATE_NAME[0], "dep/sec", "live metrics dependency failure rate per second"
237237
)
238-
self._exception_rate_counter = self._meter.create_counter(
238+
self._exception_rate_counter = self._meter.create_counter( # type: ignore
239239
_EXCEPTION_RATE_NAME[0], "exc/sec", "live metrics exception rate per second"
240240
)
241-
self._process_memory_gauge_old = self._meter.create_observable_gauge(
241+
self._process_memory_gauge_old = self._meter.create_observable_gauge( # type: ignore
242242
_COMMITTED_BYTES_NAME[0],
243243
[_get_process_memory],
244244
)
245-
self._process_memory_gauge = self._meter.create_observable_gauge(
245+
self._process_memory_gauge = self._meter.create_observable_gauge( # type: ignore
246246
_PROCESS_PHYSICAL_BYTES_NAME[0],
247247
[_get_process_memory],
248248
)
249-
self._process_time_gauge_old = self._meter.create_observable_gauge(
249+
self._process_time_gauge_old = self._meter.create_observable_gauge( # type: ignore
250250
_PROCESSOR_TIME_NAME[0],
251251
[_get_process_time_normalized_old],
252252
)
253-
self._process_time_gauge = self._meter.create_observable_gauge(
253+
self._process_time_gauge = self._meter.create_observable_gauge( # type: ignore
254254
_PROCESS_TIME_NORMALIZED_NAME[0],
255255
[_get_process_time_normalized],
256256
)
@@ -354,7 +354,7 @@ def _record_span(self, span: ReadableSpan) -> None:
354354
except Exception as e: # pylint: disable=broad-except
355355
_logger.exception("Exception occurred while recording span: %s", e) # pylint: disable=C4769
356356

357-
def _record_log_record(self, readable_log_record: ReadableLogRecord) -> None:
357+
def _record_log_record(self, read_write_log_record: ReadWriteLogRecord) -> None:
358358
# Only record if in post state and manager is initialized
359359
if not (_is_post_state() and self.is_initialized()):
360360
return
@@ -365,9 +365,9 @@ def _record_log_record(self, readable_log_record: ReadableLogRecord) -> None:
365365
return
366366

367367
try:
368-
if readable_log_record.log_record:
368+
if read_write_log_record.log_record:
369369
exc_type = None
370-
log_record = readable_log_record.log_record
370+
log_record = read_write_log_record.log_record
371371
if log_record.attributes:
372372
exc_type = log_record.attributes.get(SpanAttributes.EXCEPTION_TYPE)
373373
exc_message = log_record.attributes.get(SpanAttributes.EXCEPTION_MESSAGE)

sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/_quickpulse/_processor.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33

4-
from opentelemetry.sdk._logs import ReadableLogRecord, LogRecordProcessor
4+
from opentelemetry.sdk._logs import LogRecordProcessor, ReadWriteLogRecord
55
from opentelemetry.sdk.trace import ReadableSpan, SpanProcessor
66

77
from azure.monitor.opentelemetry.exporter._quickpulse._state import get_quickpulse_manager
@@ -13,18 +13,18 @@ def __init__(self):
1313
super().__init__()
1414
self.call_on_emit = hasattr(super(), "on_emit")
1515

16-
def on_emit(self, readable_log_record: ReadableLogRecord) -> None: # type: ignore # pylint: disable=arguments-renamed
16+
def on_emit(self, log_record: ReadWriteLogRecord) -> None: # type: ignore # pylint: disable=arguments-renamed
1717
qpm = get_quickpulse_manager()
1818
if qpm:
19-
qpm._record_log_record(readable_log_record)
19+
qpm._record_log_record(log_record)
2020
if self.call_on_emit:
21-
super().on_emit(readable_log_record) # type: ignore[safe-super]
21+
super().on_emit(log_record) # type: ignore[safe-super]
2222
else:
2323
# this method was removed in opentelemetry-sdk and replaced with on_emit
24-
super().emit(readable_log_record) # type: ignore[safe-super,misc] # pylint: disable=no-member
24+
super().emit(log_record) # type: ignore[safe-super,misc] # pylint: disable=no-member
2525

26-
def emit(self, readable_log_record: ReadableLogRecord) -> None: # pylint: disable=arguments-renamed
27-
self.on_emit(readable_log_record)
26+
def emit(self, log_record: ReadWriteLogRecord) -> None: # pylint: disable=arguments-renamed
27+
self.on_emit(log_record)
2828

2929
def shutdown(self):
3030
pass

sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/export/logs/_exporter.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
enduser_attributes as _enduser_attributes,
2626
)
2727
except ImportError:
28-
_enduser_attributes = None
28+
_enduser_attributes = None # type: ignore
2929

3030
from azure.monitor.opentelemetry.exporter import _utils
3131
from azure.monitor.opentelemetry.exporter._constants import (
@@ -85,7 +85,7 @@ def export(self, batch: Sequence[ReadableLogRecord], **kwargs: Any) -> LogRecord
8585
:param batch: OpenTelemetry ReadableLogRecord(s) to export.
8686
:type batch: ~typing.Sequence[~opentelemetry._logs.ReadableLogRecord]
8787
:return: The result of the export.
88-
:rtype: ~opentelemetry.sdk._logs.export.ReadableLogRecord
88+
:rtype: ~opentelemetry.sdk._logs.export.LogRecordExportResult
8989
"""
9090
envelopes = [self._log_to_envelope(log) for log in batch]
9191
try:
@@ -150,9 +150,9 @@ def _convert_log_to_envelope(readable_log_record: ReadableLogRecord) -> Telemetr
150150
tags.update(_utils._populate_part_a_fields(readable_log_record.resource)) # type: ignore
151151
tags[ContextTagKeys.AI_OPERATION_ID] = "{:032x}".format(log_record.trace_id or _DEFAULT_TRACE_ID) # type: ignore
152152
if log_record.attributes and _ENDUSER_ID_ATTRIBUTE in log_record.attributes:
153-
tags[ContextTagKeys.AI_USER_AUTH_USER_ID] = log_record.attributes[_ENDUSER_ID_ATTRIBUTE]
153+
tags[ContextTagKeys.AI_USER_AUTH_USER_ID] = log_record.attributes[_ENDUSER_ID_ATTRIBUTE] # type: ignore
154154
if log_record.attributes and _ENDUSER_PSEUDO_ID_ATTRIBUTE in log_record.attributes:
155-
tags[ContextTagKeys.AI_USER_ID] = log_record.attributes[_ENDUSER_PSEUDO_ID_ATTRIBUTE]
155+
tags[ContextTagKeys.AI_USER_ID] = log_record.attributes[_ENDUSER_PSEUDO_ID_ATTRIBUTE] # type: ignore
156156

157157
tags[ContextTagKeys.AI_OPERATION_PARENT_ID] = "{:016x}".format( # type: ignore
158158
log_record.span_id or _DEFAULT_SPAN_ID
@@ -228,9 +228,10 @@ def _convert_log_to_envelope(readable_log_record: ReadableLogRecord) -> Telemetr
228228
severity_level=severity_level, # type: ignore
229229
properties=properties,
230230
)
231-
data.message = data.message.strip()
232-
if len(data.message) == 0:
233-
data.message = _DEFAULT_LOG_MESSAGE
231+
if hasattr(data, "message"):
232+
data.message = data.message.strip()
233+
if len(data.message) == 0:
234+
data.message = _DEFAULT_LOG_MESSAGE
234235
envelope.data = MonitorBase(base_data=data, base_type="MessageData")
235236

236237
return envelope

sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/export/logs/_processor.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
from typing import Optional, Dict, Any
55

6-
from opentelemetry.sdk._logs import ReadableLogRecord
7-
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor, LogExporter
6+
from opentelemetry.sdk._logs import ReadWriteLogRecord
7+
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor, LogRecordExporter
88
from opentelemetry.trace import get_current_span
99

1010

@@ -13,40 +13,40 @@ class _AzureBatchLogRecordProcessor(BatchLogRecordProcessor):
1313

1414
def __init__(
1515
self,
16-
log_exporter: LogExporter,
16+
log_record_exporter: LogRecordExporter,
1717
options: Optional[Dict[str, Any]] = None,
1818
):
1919
"""Initialize the Azure Monitor Log Record Processor.
2020
21-
:param exporter: The LogRecordExporter to use for exporting logs.
21+
:param log_record_exporter: The LogRecordExporter to use for exporting logs.
2222
:param options: Optional configuration dictionary. Supported options:
2323
- enable_trace_based_sampling_for_logs(bool): Enable trace-based sampling for logs.
2424
"""
25-
super().__init__(log_exporter)
25+
super().__init__(log_record_exporter)
2626
self._options = options or {}
2727
self._enable_trace_based_sampling_for_logs = self._options.get("enable_trace_based_sampling_for_logs")
2828

29-
def on_emit(self, readable_log_record: ReadableLogRecord) -> None: # pylint: disable=arguments-renamed
29+
def on_emit(self, log_record: ReadWriteLogRecord) -> None: # pylint: disable=arguments-renamed
3030
# cspell: disable
3131
"""Determines whether the logger should drop log records associated with unsampled traces.
32-
If `trace_based_sampling` is `true`, log records associated with unsampled traces are dropped by the `Logger`.
32+
If `enable_trace_based_sampling_for_logs` is `true`, log records associated with unsampled traces are
33+
dropped by the `Logger`.
3334
A log record is considered associated with an unsampled trace if it has a valid `SpanId` and its
3435
`TraceFlags` indicate that the trace is unsampled. A log record that isn't associated with a trace
3536
context is not affected by this parameter and therefore bypasses trace based sampling filtering.
3637
37-
:param readable_log_record: Contains the log record to be exported
38-
:type readable_log_record: ReadableLogRecord
38+
:param log_record: Contains the log record to be exported
39+
:type log_record: ReadWriteLogRecord
3940
"""
4041

4142
# cspell: enable
4243
if self._enable_trace_based_sampling_for_logs:
43-
if hasattr(readable_log_record, "log_record") and readable_log_record.log_record is not None:
44+
if hasattr(log_record, "log_record") and log_record.log_record is not None:
4445
if (
45-
hasattr(readable_log_record.log_record, "context")
46-
and readable_log_record.log_record.context is not None
46+
hasattr(log_record.log_record, "context") and log_record.log_record.context is not None
4747
): # pylint: disable=line-too-long
48-
span = get_current_span(readable_log_record.log_record.context)
48+
span = get_current_span(log_record.log_record.context)
4949
span_context = span.get_span_context()
5050
if span_context.is_valid and not span_context.trace_flags.sampled:
5151
return
52-
super().on_emit(readable_log_record)
52+
super().on_emit(log_record)

sdk/monitor/azure-monitor-opentelemetry-exporter/tests/performance_counters/test_performance_counters.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
)
1515
from opentelemetry.trace import SpanKind
1616
from opentelemetry.sdk.trace import ReadableSpan
17-
from opentelemetry.sdk._logs import ReadableLogRecord
17+
from opentelemetry.sdk._logs import ReadWriteLogRecord
1818
from opentelemetry.sdk.metrics import MeterProvider
1919
from opentelemetry.sdk.metrics.export import InMemoryMetricReader
2020

@@ -570,15 +570,15 @@ def test_record_log_record_with_exception(self, mock_get_meter_provider):
570570
mock_log_record = MagicMock()
571571
mock_log_record.attributes = {EXCEPTION_TYPE: "ValueError", EXCEPTION_MESSAGE: "Test exception"}
572572

573-
mock_readable_log_record = MagicMock(spec=ReadableLogRecord)
574-
mock_readable_log_record.log_record = mock_log_record
573+
mock_read_write_log_record = MagicMock(spec=ReadWriteLogRecord)
574+
mock_read_write_log_record.log_record = mock_log_record
575575

576576
# Import to access global counter
577577
import azure.monitor.opentelemetry.exporter._performance_counters._manager as manager_module
578578

579579
initial_exceptions = manager_module._EXCEPTIONS_COUNT
580580

581-
manager._record_log_record(mock_readable_log_record)
581+
manager._record_log_record(mock_read_write_log_record)
582582

583583
# Check that exception was counted
584584
self.assertEqual(manager_module._EXCEPTIONS_COUNT, initial_exceptions + 1)
@@ -591,15 +591,15 @@ def test_record_log_record_without_exception(self):
591591
mock_log_record = MagicMock()
592592
mock_log_record.attributes = {"normal": "attribute"}
593593

594-
mock_readable_log_record = MagicMock(spec=ReadableLogRecord)
595-
mock_readable_log_record.log_record = mock_log_record
594+
mock_read_write_log_record = MagicMock(spec=ReadWriteLogRecord)
595+
mock_read_write_log_record.log_record = mock_log_record
596596

597597
# Import to access global counter
598598
import azure.monitor.opentelemetry.exporter._performance_counters._manager as manager_module
599599

600600
initial_exceptions = manager_module._EXCEPTIONS_COUNT
601601

602-
manager._record_log_record(mock_readable_log_record)
602+
manager._record_log_record(mock_read_write_log_record)
603603

604604
# Exception count should not change
605605
self.assertEqual(manager_module._EXCEPTIONS_COUNT, initial_exceptions)

sdk/monitor/azure-monitor-opentelemetry-exporter/tests/performance_counters/test_processor.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from unittest import mock
66
from unittest.mock import MagicMock
77

8-
from opentelemetry.sdk._logs import ReadableLogRecord
8+
from opentelemetry.sdk._logs import ReadWriteLogRecord
99
from opentelemetry.sdk.trace import ReadableSpan
1010

1111
from azure.monitor.opentelemetry.exporter._performance_counters._processor import (
@@ -42,13 +42,13 @@ def test_on_emit_with_manager(self, mock_manager_class):
4242
processor = _PerformanceCountersLogRecordProcessor()
4343

4444
# Create mock log data
45-
mock_readable_log_record = MagicMock(spec=ReadableLogRecord)
45+
mock_read_write_log_record = MagicMock(spec=ReadWriteLogRecord)
4646

47-
processor.on_emit(mock_readable_log_record)
47+
processor.on_emit(mock_read_write_log_record)
4848

4949
# Verify manager was called
5050
mock_manager_class.assert_called_once()
51-
mock_manager._record_log_record.assert_called_once_with(mock_readable_log_record)
51+
mock_manager._record_log_record.assert_called_once_with(mock_read_write_log_record)
5252

5353
def test_emit_calls_on_emit(self):
5454
"""Test emit method calls on_emit."""
@@ -58,12 +58,12 @@ def test_emit_calls_on_emit(self):
5858
processor.on_emit = MagicMock()
5959

6060
# Create mock log data
61-
mock_readable_log_record = MagicMock(spec=ReadableLogRecord)
61+
mock_read_write_log_record = MagicMock(spec=ReadWriteLogRecord)
6262

63-
processor.emit(mock_readable_log_record)
63+
processor.emit(mock_read_write_log_record)
6464

6565
# Verify on_emit was called
66-
processor.on_emit.assert_called_once_with(mock_readable_log_record)
66+
processor.on_emit.assert_called_once_with(mock_read_write_log_record)
6767

6868
def test_shutdown(self):
6969
"""Test shutdown method."""
@@ -91,11 +91,11 @@ def test_exception_propagation_in_on_emit(self, mock_manager_class):
9191
processor = _PerformanceCountersLogRecordProcessor()
9292

9393
# Create mock log data
94-
mock_readable_log_record = MagicMock(spec=ReadableLogRecord)
94+
mock_read_write_log_record = MagicMock(spec=ReadWriteLogRecord)
9595

9696
# Exception should be propagated
9797
with self.assertRaises(Exception) as context:
98-
processor.on_emit(mock_readable_log_record)
98+
processor.on_emit(mock_read_write_log_record)
9999
self.assertEqual(str(context.exception), "Test error")
100100

101101

0 commit comments

Comments
 (0)