Skip to content

Commit 3d29229

Browse files
authored
rpc (#20563)
1 parent 5c1cf92 commit 3d29229

File tree

2 files changed

+25
-8
lines changed
  • sdk/monitor/azure-monitor-opentelemetry-exporter

2 files changed

+25
-8
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ def _convert_span_to_envelope(span: Span) -> TelemetryItem:
108108
envelope.tags["ai.operation.id"] = "{:032x}".format(span.context.trace_id)
109109
if "enduser.id" in span.attributes:
110110
envelope.tags["ai.user.id"] = span.attributes["enduser.id"]
111-
if span.parent:
111+
if span.parent and span.parent.span_id:
112112
envelope.tags["ai.operation.parentId"] = "{:016x}".format(
113113
span.parent.span_id
114114
)
@@ -314,8 +314,7 @@ def _convert_span_to_envelope(span: Span) -> TelemetryItem:
314314
elif "rpc.system" in span.attributes: # Rpc
315315
data.type = "rpc.system"
316316
# TODO: data.data for rpc
317-
# rpc specific logic for target
318-
if "peer.service" not in span.attributes:
317+
if target is None:
319318
target = span.attributes["rpc.system"]
320319
else:
321320
# TODO: Azure specific types
@@ -325,7 +324,8 @@ def _convert_span_to_envelope(span: Span) -> TelemetryItem:
325324
# TODO: data.data for messaging
326325
# TODO: Special logic for data.target for messaging?
327326
else: # SpanKind.INTERNAL
328-
data.type = "InProc"
327+
if span.parent:
328+
data.type = "InProc"
329329
data.success = True
330330
# Apply truncation
331331
if data.result_code:

sdk/monitor/azure-monitor-opentelemetry-exporter/tests/trace/test_trace.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ def test_span_to_envelope_client_rpc(self):
401401
is_remote=False,
402402
),
403403
attributes={
404+
"peer.service": "service",
404405
"rpc.system": "rpc",
405406
"rpc.service": "Test service",
406407
},
@@ -422,7 +423,16 @@ def test_span_to_envelope_client_rpc(self):
422423

423424
self.assertEqual(envelope.data.base_type, "RemoteDependencyData")
424425
self.assertEqual(envelope.data.base_data.type, "rpc.system")
426+
self.assertEqual(envelope.data.base_data.target, "service")
427+
428+
# target
429+
span._attributes = {
430+
"rpc.system": "rpc",
431+
"rpc.service": "Test service",
432+
}
433+
envelope = exporter._span_to_envelope(span)
425434
self.assertEqual(envelope.data.base_data.target, "rpc")
435+
426436
# TODO: data.data
427437
# self.assertEqual(envelope.data.base_data.data, "SELECT")
428438
self.assertEqual(envelope.data.base_data.result_code, "1")
@@ -475,13 +485,15 @@ def test_span_to_envelope_internal(self):
475485
end_time = start_time + 1001000000
476486

477487
# SpanKind.INTERNAL
478-
span = trace._Span(
479-
name="test",
480-
context=SpanContext(
488+
context = SpanContext(
481489
trace_id=36873507687745823477771305566750195431,
482490
span_id=12030755672171557337,
483491
is_remote=False,
484-
),
492+
)
493+
span = trace._Span(
494+
name="test",
495+
context=context,
496+
parent=context,
485497
attributes={},
486498
kind=SpanKind.INTERNAL,
487499
)
@@ -503,6 +515,11 @@ def test_span_to_envelope_internal(self):
503515
self.assertEqual(envelope.data.base_data.type, "InProc")
504516
self.assertEqual(envelope.data.base_data.result_code, "1")
505517

518+
# type
519+
span._parent = None
520+
envelope = exporter._span_to_envelope(span)
521+
self.assertIsNone(envelope.data.base_data.type)
522+
506523
def test_span_envelope_server_http(self):
507524
exporter = self._exporter
508525
start_time = 1575494316027613500

0 commit comments

Comments
 (0)