Skip to content

Commit bca9164

Browse files
committed
Updated PR
1 parent 4267957 commit bca9164

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_lambda_span_processor.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,31 @@
55
from typing_extensions import override
66

77
from amazon.opentelemetry.distro._aws_attribute_keys import AWS_TRACE_LAMBDA_FLAG_MULTIPLE_SERVER
8-
from opentelemetry.context import Context
8+
from opentelemetry.context import Context, get_value
99
from opentelemetry.sdk.trace import ReadableSpan, Span, SpanProcessor
1010
from opentelemetry.trace import SpanKind
11+
from opentelemetry.trace.propagation import _SPAN_KEY
1112

1213

1314
class AwsLambdaSpanProcessor(SpanProcessor):
1415
def __init__(self, instrumentation_names=None):
1516
self.instrumentation_names = set(instrumentation_names or ["opentelemetry.instrumentation.flask"])
16-
self.parent_lambda_span = None
1717

1818
@override
1919
def on_start(self, span: Span, parent_context: Optional[Context] = None) -> None:
20+
2021
scope = getattr(span, "instrumentation_scope", None)
21-
if span.kind == SpanKind.SERVER and scope.name == "opentelemetry.instrumentation.aws_lambda":
22-
self.parent_lambda_span = span
23-
24-
if (
25-
scope.name in self.instrumentation_names
26-
and self.parent_lambda_span.get_span_context().span_id == span.parent.span_id
27-
):
28-
if span.kind == SpanKind.INTERNAL:
22+
if scope.name in self.instrumentation_names:
23+
parent_span = get_value(_SPAN_KEY, context=parent_context)
24+
25+
if parent_span is None:
26+
return
27+
28+
parent_scope = getattr(parent_span, "instrumentation_scope", None)
29+
if parent_span.kind == SpanKind.SERVER and parent_scope.name == "opentelemetry.instrumentation.aws_lambda":
2930
span._kind = SpanKind.SERVER
30-
self.parent_lambda_span.set_attribute(AWS_TRACE_LAMBDA_FLAG_MULTIPLE_SERVER, True)
31+
parent_span.set_attribute(AWS_TRACE_LAMBDA_FLAG_MULTIPLE_SERVER, True)
32+
3133
return
3234

3335
@override

aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_lambda_span_processor.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55

66
from amazon.opentelemetry.distro._aws_attribute_keys import AWS_TRACE_LAMBDA_FLAG_MULTIPLE_SERVER
77
from amazon.opentelemetry.distro.aws_lambda_span_processor import AwsLambdaSpanProcessor
8+
from opentelemetry.context import Context, get_value, set_value
89
from opentelemetry.trace import Span, SpanContext, SpanKind
10+
from opentelemetry.trace.propagation import _SPAN_KEY
911

1012

1113
class TestAwsLambdaSpanProcessor(TestCase):
@@ -20,6 +22,8 @@ def setUp(self):
2022
self.lambda_span_context.trace_id = "ABC"
2123
self.lambda_span_context.span_id = "lambda_id"
2224

25+
self.lambda_context: Context = set_value(_SPAN_KEY, self.lambda_span)
26+
2327
self.lambda_span.get_span_context.return_value = self.lambda_span_context
2428
self.processor.on_start(self.lambda_span)
2529

@@ -35,7 +39,7 @@ def test_lambda_span_multiple_server_flag_internal_api(self, mock_span_class):
3539
flask_span.kind = SpanKind.INTERNAL
3640
flask_span.parent = self.lambda_span_context
3741

38-
self.processor.on_start(flask_span)
42+
self.processor.on_start(flask_span, self.lambda_context)
3943

4044
self.assertEqual(flask_span._kind, SpanKind.SERVER)
4145
self.assertIn(AWS_TRACE_LAMBDA_FLAG_MULTIPLE_SERVER, self.lambda_span.set_attribute.call_args_list[0][0][0])
@@ -53,7 +57,7 @@ def test_lambda_span_multiple_server_flag_server_api(self, mock_span_class):
5357
flask_span.kind = SpanKind.SERVER
5458
flask_span.parent = self.lambda_span_context
5559

56-
self.processor.on_start(flask_span)
60+
self.processor.on_start(flask_span, self.lambda_context)
5761

5862
self.assertEqual(flask_span.kind, SpanKind.SERVER)
5963
self.assertIn(AWS_TRACE_LAMBDA_FLAG_MULTIPLE_SERVER, self.lambda_span.set_attribute.call_args_list[0][0][0])
@@ -71,7 +75,7 @@ def test_lambda_span_single_server_span(self, mock_span_class):
7175
flask_span.kind = SpanKind.CLIENT
7276
flask_span.parent = self.lambda_span_context
7377

74-
self.processor.on_start(flask_span, self.lambda_span_context)
78+
self.processor.on_start(flask_span, self.lambda_context)
7579

7680
self.assertEqual(flask_span.kind, SpanKind.CLIENT)
7781
flask_span.set_attribute.assert_not_called()

0 commit comments

Comments
 (0)