Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Address review feedback
  • Loading branch information
Liudmila Molkova committed Oct 29, 2024
commit 2d62bba2ce3b61f53a07d1957ff57e5a7fa38820
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ def _convert_log_to_envelope(log_data: LogData) -> TelemetryItem:
_set_statsbeat_custom_events_feature()
envelope.name = 'Microsoft.ApplicationInsights.Event'
data = TelemetryEventData(
name=_body_to_string(log_record.body),
name=_map_body_to_message(log_record.body),
properties=properties,
)
envelope.data = MonitorBase(base_data=data, base_type="EventData")
Expand All @@ -155,7 +155,7 @@ def _convert_log_to_envelope(log_data: LogData) -> TelemetryItem:
exc_type = "Exception"
# Log body takes priority for message
if log_record.body:
message = _body_to_string(log_record.body)
message = _map_body_to_message(log_record.body)
elif exc_message:
message = exc_message # type: ignore
else:
Expand All @@ -178,7 +178,7 @@ def _convert_log_to_envelope(log_data: LogData) -> TelemetryItem:
# pylint: disable=line-too-long
# Severity number: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#field-severitynumber
data = MessageData( # type: ignore
message=_body_to_string(log_record.body),
message=_map_body_to_message(log_record.body),
severity_level=severity_level,
properties=properties,
)
Expand All @@ -201,17 +201,20 @@ def _get_severity_level(severity_number: Optional[SeverityNumber]):
return 0
return int((severity_number.value - 1) / 4 - 1)

def _body_to_string(log_body: Any) -> str:
def _map_body_to_message(log_body: Any) -> str:
if not log_body:
return "n/a"
return ""

if isinstance(log_body, str):
return log_body[:32768]

if isinstance(log_body, Exception):
return str(log_body)[:32768]

return json.dumps(log_body)[:32768]
try:
return json.dumps(log_body)[:32768]
except Exception:
return str(log_body)[:32768]

def _is_ignored_attribute(key: str) -> bool:
return key in _IGNORED_ATTRS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ def func(*_args, **_kwargs):

return func

class NotSerializeableClass:
def __str__(self) -> str:
"This class is not serializeable"


# pylint: disable=import-error
# pylint: disable=protected-access
Expand Down Expand Up @@ -128,6 +132,24 @@ def setUpClass(cls):
),
InstrumentationScope("test_name"),
)
cls._log_data_complex_body_not_serializeable = _logs.LogData(
_logs.LogRecord(
timestamp = 1646865018558419456,
trace_id = 125960616039069540489478540494783893221,
span_id = 2909973987304607650,
severity_text = "WARNING",
trace_flags = None,
severity_number = SeverityNumber.WARN,
body = NotSerializeableClass(),
resource = Resource.create(
attributes={"asd":"test_resource"}
),
attributes={
"test": "attribute"
},
),
InstrumentationScope("test_name"),
)
cls._log_data_event = _logs.LogData(
_logs.LogRecord(
timestamp = 1646865018558419456,
Expand Down Expand Up @@ -377,14 +399,14 @@ def test_log_to_envelope_log_none(self):
envelope = exporter._log_to_envelope(self._log_data_none)
self.assertEqual(envelope.name, 'Microsoft.ApplicationInsights.Message')
self.assertEqual(envelope.data.base_type, 'MessageData')
self.assertEqual(envelope.data.base_data.message, "n/a")
self.assertEqual(envelope.data.base_data.message, "")

def test_log_to_envelope_log_empty(self):
exporter = self._exporter
envelope = exporter._log_to_envelope(self._log_data_empty)
self.assertEqual(envelope.name, 'Microsoft.ApplicationInsights.Message')
self.assertEqual(envelope.data.base_type, 'MessageData')
self.assertEqual(envelope.data.base_data.message, "n/a")
self.assertEqual(envelope.data.base_data.message, "")

def test_log_to_envelope_log_complex_body(self):
exporter = self._exporter
Expand Down Expand Up @@ -473,6 +495,16 @@ def test_log_to_envelope_event_complex_body(self):
self.assertEqual(envelope.data.base_data.name, json.dumps(record.body))
self.assertEqual(envelope.data.base_data.properties["event_key"], "event_attribute")

def test_log_to_envelope_event_complex_body_not_serializeable(self):
exporter = self._exporter
envelope = exporter._log_to_envelope(self._log_data_complex_body_not_serializeable)
record = self._log_data_complex_body_not_serializeable.log_record
self.assertEqual(envelope.name, 'Microsoft.ApplicationInsights.Event')
self.assertEqual(envelope.time, ns_to_iso_str(record.timestamp))
self.assertEqual(envelope.data.base_type, 'EventData')
self.assertEqual(envelope.data.base_data.name, str(record.body))
self.assertEqual(envelope.data.base_data.properties["event_key"], "event_attribute")

def test_log_to_envelope_timestamp(self):
exporter = self._exporter
old_record = self._log_data.log_record
Expand Down