Skip to content

Commit e7569bd

Browse files
committed
- extract `APIGatewayProxyRequestEvent` headers for context propagation
1 parent 5b94674 commit e7569bd

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/build.gradle.kts

+6
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ muzzle {
77
group.set("com.amazonaws")
88
module.set("aws-lambda-java-core")
99
versions.set("[1.0.0,)")
10+
extraDependency("com.amazonaws:aws-lambda-java-events:2.2.1")
1011
extraDependency("com.amazonaws.serverless:aws-serverless-java-container-core:1.5.2")
1112
}
1213
}
@@ -17,6 +18,11 @@ dependencies {
1718
implementation(project(":instrumentation:aws-lambda:aws-lambda-core-1.0:library"))
1819

1920
library("com.amazonaws:aws-lambda-java-core:1.0.0")
21+
// First version to includes support for SQSEvent, currently the most popular message queue used
22+
// with lambda.
23+
// NB: 2.2.0 includes a class called SQSEvent but isn't usable due to it returning private classes
24+
// in public API.
25+
library("com.amazonaws:aws-lambda-java-events:2.2.1")
2026

2127
testImplementation(project(":instrumentation:aws-lambda:aws-lambda-core-1.0:testing"))
2228
}

instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@
1616
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1717

1818
import com.amazonaws.services.lambda.runtime.Context;
19+
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
1920
import io.opentelemetry.context.Scope;
2021
import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest;
22+
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.MapUtils;
2123
import io.opentelemetry.javaagent.bootstrap.OpenTelemetrySdkAccess;
2224
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2325
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2426
import java.util.Collections;
27+
import java.util.Map;
2528
import java.util.concurrent.TimeUnit;
2629
import net.bytebuddy.asm.Advice;
2730
import net.bytebuddy.description.type.TypeDescription;
@@ -66,7 +69,12 @@ public static void onEnter(
6669
@Advice.Local("otelInput") AwsLambdaRequest input,
6770
@Advice.Local("otelContext") io.opentelemetry.context.Context otelContext,
6871
@Advice.Local("otelScope") Scope otelScope) {
69-
input = AwsLambdaRequest.create(context, arg, Collections.emptyMap());
72+
Map<String, String> headers = Collections.emptyMap();
73+
if (arg instanceof APIGatewayProxyRequestEvent) {
74+
headers = MapUtils.lowercaseMap(((APIGatewayProxyRequestEvent) arg).getHeaders());
75+
}
76+
77+
input = AwsLambdaRequest.create(context, arg, headers);
7078
io.opentelemetry.context.Context parentContext = functionInstrumenter().extract(input);
7179

7280
if (!functionInstrumenter().shouldStart(parentContext, input)) {

instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaRequestHandlerInstrumentation.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,16 @@
1313
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1414

1515
import com.amazonaws.services.lambda.runtime.Context;
16+
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
1617
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
1718
import io.opentelemetry.context.Scope;
1819
import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest;
20+
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.MapUtils;
1921
import io.opentelemetry.javaagent.bootstrap.OpenTelemetrySdkAccess;
2022
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2123
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2224
import java.util.Collections;
25+
import java.util.Map;
2326
import java.util.concurrent.TimeUnit;
2427
import net.bytebuddy.asm.Advice;
2528
import net.bytebuddy.description.type.TypeDescription;
@@ -60,7 +63,11 @@ public static void onEnter(
6063
@Advice.Local("otelFunctionScope") Scope functionScope,
6164
@Advice.Local("otelMessageContext") io.opentelemetry.context.Context messageContext,
6265
@Advice.Local("otelMessageScope") Scope messageScope) {
63-
input = AwsLambdaRequest.create(context, arg, Collections.emptyMap());
66+
Map<String, String> headers = Collections.emptyMap();
67+
if (arg instanceof APIGatewayProxyRequestEvent) {
68+
headers = MapUtils.lowercaseMap(((APIGatewayProxyRequestEvent) arg).getHeaders());
69+
}
70+
input = AwsLambdaRequest.create(context, arg, headers);
6471
io.opentelemetry.context.Context parentContext =
6572
AwsLambdaInstrumentationHelper.functionInstrumenter().extract(input);
6673

0 commit comments

Comments
 (0)