Skip to content

Commit 315c38f

Browse files
authored
serverless: add http.route tag when available (#21086)
This allows serverless spans to get picked-up by API Catalog, that requires http.route to be present.
1 parent 95ef792 commit 315c38f

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

pkg/serverless/invocationlifecycle/lifecycle_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,7 @@ func TestTriggerTypesLifecycleEventForAPIGatewayRest(t *testing.T) {
396396
assert.Equal(t, map[string]string{
397397
"function_trigger.event_source_arn": "arn:aws:apigateway:us-east-1::/restapis/1234567890/stages/prod",
398398
"http.method": "POST",
399+
"http.route": "/{proxy+}",
399400
"http.url": "70ixmpl4fl.execute-api.us-east-2.amazonaws.com",
400401
"http.url_details.path": "/prod/path/to/resource",
401402
"http.useragent": "Custom User Agent String",
@@ -442,6 +443,7 @@ func TestTriggerTypesLifecycleEventForAPIGateway5xxResponse(t *testing.T) {
442443
"cold_start": "false",
443444
"function_trigger.event_source_arn": "arn:aws:apigateway:us-east-1::/restapis/1234567890/stages/prod",
444445
"http.method": "POST",
446+
"http.route": "/{proxy+}",
445447
"http.url": "70ixmpl4fl.execute-api.us-east-2.amazonaws.com",
446448
"http.url_details.path": "/prod/path/to/resource",
447449
"http.useragent": "Custom User Agent String",
@@ -487,6 +489,7 @@ func TestTriggerTypesLifecycleEventForAPIGatewayNonProxy(t *testing.T) {
487489
"cold_start": "false",
488490
"function_trigger.event_source_arn": "arn:aws:apigateway:us-east-1::/restapis/lgxbo6a518/stages/dev",
489491
"http.method": "GET",
492+
"http.route": "/http/get",
490493
"http.url": "lgxbo6a518.execute-api.sa-east-1.amazonaws.com",
491494
"http.url_details.path": "/dev/http/get",
492495
"http.useragent": "curl/7.64.1",
@@ -535,6 +538,7 @@ func TestTriggerTypesLifecycleEventForAPIGatewayNonProxy5xxResponse(t *testing.T
535538
"cold_start": "false",
536539
"function_trigger.event_source_arn": "arn:aws:apigateway:us-east-1::/restapis/lgxbo6a518/stages/dev",
537540
"http.method": "GET",
541+
"http.route": "/http/get",
538542
"http.url": "lgxbo6a518.execute-api.sa-east-1.amazonaws.com",
539543
"http.url_details.path": "/dev/http/get",
540544
"request_id": "test-request-id",

pkg/serverless/trigger/extractor.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ func GetTagsFromAPIGatewayEvent(event events.APIGatewayProxyRequest) map[string]
110110
}
111111
httpTags["http.url_details.path"] = event.RequestContext.Path
112112
httpTags["http.method"] = event.RequestContext.HTTPMethod
113+
if event.Resource != "" {
114+
httpTags["http.route"] = event.Resource
115+
}
113116
if event.Headers != nil {
114117
if event.Headers["Referer"] != "" {
115118
httpTags["http.referer"] = event.Headers["Referer"]
@@ -128,6 +131,9 @@ func GetTagsFromAPIGatewayV2HTTPRequest(event events.APIGatewayV2HTTPRequest) ma
128131
httpTags["http.url"] = event.RequestContext.DomainName
129132
httpTags["http.url_details.path"] = event.RequestContext.HTTP.Path
130133
httpTags["http.method"] = event.RequestContext.HTTP.Method
134+
if event.RouteKey != "" {
135+
httpTags["http.route"] = event.RouteKey
136+
}
131137
if event.Headers != nil {
132138
if event.Headers["Referer"] != "" {
133139
httpTags["http.referer"] = event.Headers["Referer"]
@@ -164,6 +170,9 @@ func GetTagsFromAPIGatewayCustomAuthorizerRequestTypeEvent(event events.APIGatew
164170
httpTags := make(map[string]string)
165171
httpTags["http.url_details.path"] = event.RequestContext.Path
166172
httpTags["http.method"] = event.HTTPMethod
173+
if event.Resource != "" {
174+
httpTags["http.route"] = event.Resource
175+
}
167176
if referer := event.Headers["Referer"]; referer != "" {
168177
httpTags["http.referer"] = referer
169178
}

pkg/serverless/trigger/extractor_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ func TestExtractFunctionURLEventARN(t *testing.T) {
238238
Path: "path",
239239
HTTPMethod: "http-method",
240240
},
241+
Resource: "/{route}",
241242
}
242243

243244
httpTags := GetTagsFromAPIGatewayEvent(event)
@@ -247,6 +248,7 @@ func TestExtractFunctionURLEventARN(t *testing.T) {
247248
"http.url_details.path": "path",
248249
"http.method": "http-method",
249250
"http.referer": "referer",
251+
"http.route": "/{route}",
250252
}, httpTags)
251253
}
252254

@@ -261,6 +263,7 @@ func TestGetTagsFromAPIGatewayEvent(t *testing.T) {
261263
Path: "path",
262264
HTTPMethod: "http-method",
263265
},
266+
Resource: "/{route}",
264267
}
265268

266269
httpTags := GetTagsFromAPIGatewayEvent(event)
@@ -270,6 +273,7 @@ func TestGetTagsFromAPIGatewayEvent(t *testing.T) {
270273
"http.url_details.path": "path",
271274
"http.method": "http-method",
272275
"http.referer": "referer",
276+
"http.route": "/{route}",
273277
}, httpTags)
274278
}
275279

@@ -285,6 +289,7 @@ func TestGetTagsFromAPIGatewayV2HTTPRequestNoReferer(t *testing.T) {
285289
Method: "http-method",
286290
},
287291
},
292+
RouteKey: "/{route}",
288293
}
289294

290295
httpTags := GetTagsFromAPIGatewayV2HTTPRequest(event)
@@ -293,6 +298,7 @@ func TestGetTagsFromAPIGatewayV2HTTPRequestNoReferer(t *testing.T) {
293298
"http.url": "domain-name",
294299
"http.url_details.path": "path",
295300
"http.method": "http-method",
301+
"http.route": "/{route}",
296302
}, httpTags)
297303
}
298304

@@ -315,13 +321,15 @@ func TestGetTagsFromAPIGatewayCustomAuthorizerRequestTypeEvent(t *testing.T) {
315321
RequestContext: events.APIGatewayCustomAuthorizerRequestTypeRequestContext{
316322
Path: "/path/to/resource",
317323
},
324+
Resource: "/{route}",
318325
}
319326

320327
httpTags := GetTagsFromAPIGatewayCustomAuthorizerRequestTypeEvent(event)
321328

322329
assert.Equal(t, map[string]string{
323330
"http.method": "GET",
324331
"http.url_details.path": "/path/to/resource",
332+
"http.route": "/{route}",
325333
}, httpTags)
326334
}
327335

0 commit comments

Comments
 (0)