Skip to content

Commit 230ab94

Browse files
authored
Implement from_log_record for Trace type data in live metrics (#39922)
1 parent 44a3017 commit 230ab94

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed

sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313

1414
### Bugs Fixed
1515

16+
- Implement `from_log_record` for `Trace` data types in live metrics
17+
([#39922](https://github.com/Azure/azure-sdk-for-python/pull/39922))
18+
1619
### Other Changes
1720

1821
## 1.0.0b34 (2025-02-26)

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

+8
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,14 @@ def _TraceData(log_record: LogRecord):
197197
custom_dimensions=log_record.attributes,
198198
)
199199

200+
@staticmethod
201+
@no_type_check
202+
def _from_log_record(log_record: LogRecord):
203+
return _TraceData(
204+
message=str(log_record.body),
205+
custom_dimensions=log_record.attributes,
206+
)
207+
200208

201209
def _get_field_names(data_type: type):
202210
field_map = {}

sdk/monitor/azure-monitor-opentelemetry-exporter/tests/quickpulse/test_types.py

+58
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,67 @@
2020
_DependencyData,
2121
_ExceptionData,
2222
_RequestData,
23+
_TelemetryData,
2324
)
2425

2526

27+
28+
class TestTelemetryData(unittest.TestCase):
29+
30+
@patch("azure.monitor.opentelemetry.exporter._quickpulse._types._RequestData")
31+
def test_from_span_server_kind_server(self, fn_mock):
32+
span = Mock()
33+
span.kind = SpanKind.SERVER
34+
data_mock = Mock()
35+
fn_mock._from_span.return_value = data_mock
36+
result = _TelemetryData._from_span(span)
37+
self.assertEqual(result, data_mock)
38+
fn_mock._from_span.assert_called_once_with(span)
39+
40+
@patch("azure.monitor.opentelemetry.exporter._quickpulse._types._RequestData")
41+
def test_from_span_consumer_kind_(self, fn_mock):
42+
span = Mock()
43+
span.kind = SpanKind.CONSUMER
44+
data_mock = Mock()
45+
fn_mock._from_span.return_value = data_mock
46+
result = _TelemetryData._from_span(span)
47+
self.assertEqual(result, data_mock)
48+
fn_mock._from_span.assert_called_once_with(span)
49+
50+
@patch("azure.monitor.opentelemetry.exporter._quickpulse._types._DependencyData")
51+
def test_from_span_dependency_kind(self, fn_mock):
52+
span = Mock()
53+
span.kind = SpanKind.CLIENT
54+
data_mock = Mock()
55+
fn_mock._from_span.return_value = data_mock
56+
result = _TelemetryData._from_span(span)
57+
self.assertEqual(result, data_mock)
58+
fn_mock._from_span.assert_called_once_with(span)
59+
60+
@patch("azure.monitor.opentelemetry.exporter._quickpulse._types._ExceptionData")
61+
def test_from_log_record_with_exception(self, fn_mock):
62+
log_record = Mock()
63+
log_record.attributes = {
64+
SpanAttributes.EXCEPTION_TYPE: "SomeException",
65+
SpanAttributes.EXCEPTION_MESSAGE: "An error occurred"
66+
}
67+
data_mock = Mock()
68+
fn_mock._from_log_record.return_value = data_mock
69+
result = _TelemetryData._from_log_record(log_record)
70+
self.assertEqual(result, data_mock)
71+
fn_mock._from_log_record.assert_called_once_with(log_record)
72+
73+
@patch("azure.monitor.opentelemetry.exporter._quickpulse._types._TraceData")
74+
def test_from_log_record_without_exception(self, fn_mock):
75+
log_record = Mock()
76+
log_record.attributes = {}
77+
data_mock = Mock()
78+
fn_mock._from_log_record.return_value = data_mock
79+
result = _TelemetryData._from_log_record(log_record)
80+
self.assertEqual(result, data_mock)
81+
fn_mock._from_log_record.assert_called_once_with(log_record)
82+
83+
2684
class TestRequestData(unittest.TestCase):
2785

2886
@patch("azure.monitor.opentelemetry.exporter.export.trace._utils._get_url_for_http_request")

0 commit comments

Comments
 (0)