@@ -32,6 +32,7 @@ use crate::{
32
32
#[ derive( Default ) ]
33
33
pub struct SpanInferrer {
34
34
service_mapping : HashMap < String , String > ,
35
+ aws_service_representation_enabled : bool ,
35
36
// Span inferred from the Lambda incoming request payload
36
37
pub inferred_span : Option < Span > ,
37
38
// Nested span inferred from the Lambda incoming request payload
@@ -50,9 +51,13 @@ pub struct SpanInferrer {
50
51
51
52
impl SpanInferrer {
52
53
#[ must_use]
53
- pub fn new ( service_mapping : HashMap < String , String > ) -> Self {
54
+ pub fn new (
55
+ service_mapping : HashMap < String , String > ,
56
+ aws_service_representation_enabled : bool ,
57
+ ) -> Self {
54
58
Self {
55
59
service_mapping,
60
+ aws_service_representation_enabled,
56
61
inferred_span : None ,
57
62
wrapped_inferred_span : None ,
58
63
is_async_span : false ,
@@ -87,19 +92,31 @@ impl SpanInferrer {
87
92
88
93
if APIGatewayHttpEvent :: is_match ( payload_value) {
89
94
if let Some ( t) = APIGatewayHttpEvent :: new ( payload_value. clone ( ) ) {
90
- t. enrich_span ( & mut inferred_span, & self . service_mapping ) ;
95
+ t. enrich_span (
96
+ & mut inferred_span,
97
+ & self . service_mapping ,
98
+ self . aws_service_representation_enabled ,
99
+ ) ;
91
100
92
101
trigger = Some ( Box :: new ( t) ) ;
93
102
}
94
103
} else if APIGatewayRestEvent :: is_match ( payload_value) {
95
104
if let Some ( t) = APIGatewayRestEvent :: new ( payload_value. clone ( ) ) {
96
- t. enrich_span ( & mut inferred_span, & self . service_mapping ) ;
105
+ t. enrich_span (
106
+ & mut inferred_span,
107
+ & self . service_mapping ,
108
+ self . aws_service_representation_enabled ,
109
+ ) ;
97
110
98
111
trigger = Some ( Box :: new ( t) ) ;
99
112
}
100
113
} else if APIGatewayWebSocketEvent :: is_match ( payload_value) {
101
114
if let Some ( t) = APIGatewayWebSocketEvent :: new ( payload_value. clone ( ) ) {
102
- t. enrich_span ( & mut inferred_span, & self . service_mapping ) ;
115
+ t. enrich_span (
116
+ & mut inferred_span,
117
+ & self . service_mapping ,
118
+ self . aws_service_representation_enabled ,
119
+ ) ;
103
120
104
121
trigger = Some ( Box :: new ( t) ) ;
105
122
}
@@ -110,19 +127,31 @@ impl SpanInferrer {
110
127
}
111
128
} else if LambdaFunctionUrlEvent :: is_match ( payload_value) {
112
129
if let Some ( t) = LambdaFunctionUrlEvent :: new ( payload_value. clone ( ) ) {
113
- t. enrich_span ( & mut inferred_span, & self . service_mapping ) ;
130
+ t. enrich_span (
131
+ & mut inferred_span,
132
+ & self . service_mapping ,
133
+ self . aws_service_representation_enabled ,
134
+ ) ;
114
135
115
136
trigger = Some ( Box :: new ( t) ) ;
116
137
}
117
138
} else if MSKEvent :: is_match ( payload_value) {
118
139
if let Some ( t) = MSKEvent :: new ( payload_value. clone ( ) ) {
119
- t. enrich_span ( & mut inferred_span, & self . service_mapping ) ;
140
+ t. enrich_span (
141
+ & mut inferred_span,
142
+ & self . service_mapping ,
143
+ self . aws_service_representation_enabled ,
144
+ ) ;
120
145
121
146
trigger = Some ( Box :: new ( t) ) ;
122
147
}
123
148
} else if SqsRecord :: is_match ( payload_value) {
124
149
if let Some ( t) = SqsRecord :: new ( payload_value. clone ( ) ) {
125
- t. enrich_span ( & mut inferred_span, & self . service_mapping ) ;
150
+ t. enrich_span (
151
+ & mut inferred_span,
152
+ & self . service_mapping ,
153
+ self . aws_service_representation_enabled ,
154
+ ) ;
126
155
127
156
self . generated_span_context = extract_trace_context_from_aws_trace_header (
128
157
t. attributes . aws_trace_header . clone ( ) ,
@@ -140,7 +169,11 @@ impl SpanInferrer {
140
169
sns : sns_entity,
141
170
event_subscription_arn : None ,
142
171
} ;
143
- wt. enrich_span ( & mut wrapped_inferred_span, & self . service_mapping ) ;
172
+ wt. enrich_span (
173
+ & mut wrapped_inferred_span,
174
+ & self . service_mapping ,
175
+ self . aws_service_representation_enabled ,
176
+ ) ;
144
177
inferred_span. meta . extend ( wt. get_tags ( ) ) ;
145
178
146
179
wrapped_inferred_span. duration =
@@ -155,8 +188,11 @@ impl SpanInferrer {
155
188
..Default :: default ( )
156
189
} ;
157
190
158
- event_bridge_entity
159
- . enrich_span ( & mut wrapped_inferred_span, & self . service_mapping ) ;
191
+ event_bridge_entity. enrich_span (
192
+ & mut wrapped_inferred_span,
193
+ & self . service_mapping ,
194
+ self . aws_service_representation_enabled ,
195
+ ) ;
160
196
inferred_span. meta . extend ( event_bridge_entity. get_tags ( ) ) ;
161
197
162
198
wrapped_inferred_span. duration =
@@ -169,7 +205,11 @@ impl SpanInferrer {
169
205
}
170
206
} else if SnsRecord :: is_match ( payload_value) {
171
207
if let Some ( t) = SnsRecord :: new ( payload_value. clone ( ) ) {
172
- t. enrich_span ( & mut inferred_span, & self . service_mapping ) ;
208
+ t. enrich_span (
209
+ & mut inferred_span,
210
+ & self . service_mapping ,
211
+ self . aws_service_representation_enabled ,
212
+ ) ;
173
213
174
214
if let Some ( message) = & t. sns . message {
175
215
if let Ok ( event_bridge_wrapper_message) =
@@ -180,8 +220,11 @@ impl SpanInferrer {
180
220
..Default :: default ( )
181
221
} ;
182
222
183
- event_bridge_wrapper_message
184
- . enrich_span ( & mut wrapped_inferred_span, & self . service_mapping ) ;
223
+ event_bridge_wrapper_message. enrich_span (
224
+ & mut wrapped_inferred_span,
225
+ & self . service_mapping ,
226
+ self . aws_service_representation_enabled ,
227
+ ) ;
185
228
inferred_span
186
229
. meta
187
230
. extend ( event_bridge_wrapper_message. get_tags ( ) ) ;
@@ -197,27 +240,43 @@ impl SpanInferrer {
197
240
}
198
241
} else if DynamoDbRecord :: is_match ( payload_value) {
199
242
if let Some ( t) = DynamoDbRecord :: new ( payload_value. clone ( ) ) {
200
- t. enrich_span ( & mut inferred_span, & self . service_mapping ) ;
243
+ t. enrich_span (
244
+ & mut inferred_span,
245
+ & self . service_mapping ,
246
+ self . aws_service_representation_enabled ,
247
+ ) ;
201
248
self . span_pointers = t. get_span_pointers ( ) ;
202
249
203
250
trigger = Some ( Box :: new ( t) ) ;
204
251
}
205
252
} else if S3Record :: is_match ( payload_value) {
206
253
if let Some ( t) = S3Record :: new ( payload_value. clone ( ) ) {
207
- t. enrich_span ( & mut inferred_span, & self . service_mapping ) ;
254
+ t. enrich_span (
255
+ & mut inferred_span,
256
+ & self . service_mapping ,
257
+ self . aws_service_representation_enabled ,
258
+ ) ;
208
259
self . span_pointers = t. get_span_pointers ( ) ;
209
260
210
261
trigger = Some ( Box :: new ( t) ) ;
211
262
}
212
263
} else if EventBridgeEvent :: is_match ( payload_value) {
213
264
if let Some ( t) = EventBridgeEvent :: new ( payload_value. clone ( ) ) {
214
- t. enrich_span ( & mut inferred_span, & self . service_mapping ) ;
265
+ t. enrich_span (
266
+ & mut inferred_span,
267
+ & self . service_mapping ,
268
+ self . aws_service_representation_enabled ,
269
+ ) ;
215
270
216
271
trigger = Some ( Box :: new ( t) ) ;
217
272
}
218
273
} else if KinesisRecord :: is_match ( payload_value) {
219
274
if let Some ( t) = KinesisRecord :: new ( payload_value. clone ( ) ) {
220
- t. enrich_span ( & mut inferred_span, & self . service_mapping ) ;
275
+ t. enrich_span (
276
+ & mut inferred_span,
277
+ & self . service_mapping ,
278
+ self . aws_service_representation_enabled ,
279
+ ) ;
221
280
222
281
trigger = Some ( Box :: new ( t) ) ;
223
282
}
@@ -282,6 +341,7 @@ impl SpanInferrer {
282
341
String :: from ( "peer.service" ) ,
283
342
invocation_span. service . clone ( ) ,
284
343
) ;
344
+ s. meta . insert ( "span.kind" . to_string ( ) , "server" . to_string ( ) ) ;
285
345
286
346
if let Some ( ws) = & mut self . wrapped_inferred_span {
287
347
ws. trace_id = invocation_span. trace_id ;
0 commit comments