From f236b2d4c9a0813b2dddf3d35928c79b21beb6d5 Mon Sep 17 00:00:00 2001 From: Anuraag Agrawal Date: Fri, 11 Feb 2022 10:27:22 +0900 Subject: [PATCH] Split lambda instrumentation into core and events (#5326) * Split out lambda core instrumentation * More * Remove request wrapper from core * Split events * Dedupe * More * More renames * Finish * Clean * README * Rename more * Finish * Fix README * Fix README * Fix * Comments --- .../v1_0/AwsLambdaInstrumentationHelper.java | 32 ------- .../v1_0/internal/HeadersFactory.java | 43 --------- instrumentation/aws-lambda/README.md | 11 +++ .../javaagent/build.gradle.kts | 21 ++++ .../v1_0/AwsLambdaInstrumentationHelper.java | 22 +++++ .../v1_0/AwsLambdaInstrumentationModule.java | 4 +- ...wsLambdaRequestHandlerInstrumentation.java | 88 +++++++++++++++++ .../awslambdacore}/v1_0/AwsLambdaTest.java | 4 +- .../aws-lambda-core-1.0/library/README.md | 95 +++++++++++++++++++ .../library/build.gradle.kts | 33 +++++++ .../awslambdacore}/v1_0/AwsLambdaRequest.java | 2 +- .../awslambdacore/v1_0/LambdaParameters.java | 29 ++++++ .../awslambdacore}/v1_0/LambdaUtils.java | 2 +- .../v1_0/TracingRequestHandler.java | 26 +++-- .../v1_0/TracingRequestStreamHandler.java | 8 +- .../v1_0/TracingRequestStreamWrapper.java | 4 +- .../v1_0/internal/ApiGatewayProxyRequest.java | 38 +++----- .../AwsLambdaFunctionAttributesExtractor.java | 10 +- .../AwsLambdaFunctionInstrumenter.java | 6 +- .../AwsLambdaFunctionInstrumenterFactory.java | 33 +++++++ .../v1_0/internal/HeadersFactory.java | 60 ++++++++++++ .../v1_0/internal/MapUtils.java | 12 ++- .../v1_0/internal/ParentContextExtractor.java | 12 ++- .../v1_0/internal}/WrappedLambda.java | 20 ++-- .../v1_0/internal}/WrapperConfiguration.java | 6 +- ...ambdaStreamWrapperHttpPropagationTest.java | 29 ++++-- .../v1_0/AwsLambdaStreamWrapperTest.java | 5 +- .../awslambdacore}/v1_0/AwsLambdaTest.java | 2 +- .../v1_0/LambdaParametersTest.java | 47 +++++++++ .../internal/ApiGatewayProxyRequestTest.java | 12 +-- .../v1_0/internal/HeadersFactoryTest.java | 4 +- .../internal/ParentContextExtractorTest.java | 2 +- .../testing/build.gradle.kts | 19 ++++ .../v1_0/AbstractAwsLambdaTest.java | 2 +- .../javaagent/build.gradle.kts | 10 +- .../v2_2/AwsLambdaInstrumentationHelper.java | 35 +++++++ .../v2_2/AwsLambdaInstrumentationModule.java | 37 ++++++++ ...wsLambdaRequestHandlerInstrumentation.java | 28 +++--- .../v2_2}/AwsLambdaSqsEventHandlerTest.java | 4 +- .../aws-lambda-events-2.2}/library/README.md | 9 +- .../library/build.gradle.kts | 16 ++-- .../v2_2}/CustomJodaModule.java | 2 +- .../v2_2}/LambdaParameters.java | 2 +- .../TracingRequestApiGatewayWrapper.java | 8 +- .../v2_2}/TracingRequestWrapper.java | 8 +- .../v2_2}/TracingRequestWrapperBase.java | 23 ++++- .../v2_2}/TracingSqsEventHandler.java | 9 +- .../v2_2}/TracingSqsEventWrapper.java | 4 +- .../v2_2}/TracingSqsMessageHandler.java | 4 +- .../ApiGatewayProxyAttributesExtractor.java | 8 +- .../AwsLambdaEventsInstrumenterFactory.java} | 10 +- .../AwsLambdaSqsInstrumenterFactory.java | 2 +- .../internal/SqsEventAttributesExtractor.java | 2 +- .../internal/SqsEventSpanLinksExtractor.java | 2 +- .../SqsMessageAttributesExtractor.java | 2 +- .../SqsMessageSpanLinksExtractor.java | 3 +- .../v2_2}/AwsLambdaApiGatewayWrapperTest.java | 13 +-- .../v2_2}/AwsLambdaSqsEventHandlerTest.java | 2 +- .../v2_2}/AwsLambdaSqsEventWrapperTest.java | 5 +- .../v2_2}/AwsLambdaSqsMessageHandlerTest.java | 2 +- .../v2_2}/AwsLambdaWrapperTest.java | 11 ++- .../v2_2}/LambdaParametersTest.java | 2 +- ...acingRequestWrapperStandardEventsTest.java | 3 +- .../testing/build.gradle.kts | 0 .../AbstractAwsLambdaSqsEventHandlerTest.java | 2 +- settings.gradle.kts | 9 +- 66 files changed, 774 insertions(+), 246 deletions(-) delete mode 100644 instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaInstrumentationHelper.java delete mode 100644 instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/HeadersFactory.java create mode 100644 instrumentation/aws-lambda/README.md create mode 100644 instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/build.gradle.kts create mode 100644 instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaInstrumentationHelper.java rename instrumentation/{aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore}/v1_0/AwsLambdaInstrumentationModule.java (87%) create mode 100644 instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java rename instrumentation/{aws-lambda-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore}/v1_0/AwsLambdaTest.java (88%) create mode 100644 instrumentation/aws-lambda/aws-lambda-core-1.0/library/README.md create mode 100644 instrumentation/aws-lambda/aws-lambda-core-1.0/library/build.gradle.kts rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/AwsLambdaRequest.java (90%) create mode 100644 instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/LambdaParameters.java rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/LambdaUtils.java (91%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/TracingRequestHandler.java (82%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/TracingRequestStreamHandler.java (93%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/TracingRequestStreamWrapper.java (88%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/internal/ApiGatewayProxyRequest.java (75%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/internal/AwsLambdaFunctionAttributesExtractor.java (88%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/internal/AwsLambdaFunctionInstrumenter.java (90%) create mode 100644 instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenterFactory.java create mode 100644 instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/HeadersFactory.java rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/internal/MapUtils.java (56%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/internal/ParentContextExtractor.java (85%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal}/WrappedLambda.java (91%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal}/WrapperConfiguration.java (81%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/AwsLambdaStreamWrapperHttpPropagationTest.java (87%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/AwsLambdaStreamWrapperTest.java (95%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/AwsLambdaTest.java (95%) create mode 100644 instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/LambdaParametersTest.java rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/internal/ApiGatewayProxyRequestTest.java (86%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/internal/HeadersFactoryTest.java (93%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/internal/ParentContextExtractorTest.java (98%) create mode 100644 instrumentation/aws-lambda/aws-lambda-core-1.0/testing/build.gradle.kts rename instrumentation/{aws-lambda-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambda => aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore}/v1_0/AbstractAwsLambdaTest.java (98%) rename instrumentation/{aws-lambda-1.0 => aws-lambda/aws-lambda-events-2.2}/javaagent/build.gradle.kts (57%) create mode 100644 instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaInstrumentationHelper.java create mode 100644 instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaInstrumentationModule.java rename instrumentation/{aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2}/AwsLambdaRequestHandlerInstrumentation.java (78%) rename instrumentation/{aws-lambda-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2}/AwsLambdaSqsEventHandlerTest.java (86%) rename instrumentation/{aws-lambda-1.0 => aws-lambda/aws-lambda-events-2.2}/library/README.md (86%) rename instrumentation/{aws-lambda-1.0 => aws-lambda/aws-lambda-events-2.2}/library/build.gradle.kts (66%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/CustomJodaModule.java (97%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/LambdaParameters.java (93%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/TracingRequestApiGatewayWrapper.java (84%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/TracingRequestWrapper.java (70%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/TracingRequestWrapperBase.java (69%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/TracingSqsEventHandler.java (86%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/TracingSqsEventWrapper.java (87%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/TracingSqsMessageHandler.java (95%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/internal/ApiGatewayProxyAttributesExtractor.java (90%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/AwsLambdaFunctionInstrumenterFactory.java => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java} (73%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/internal/AwsLambdaSqsInstrumenterFactory.java (96%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/internal/SqsEventAttributesExtractor.java (92%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/internal/SqsEventSpanLinksExtractor.java (91%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/internal/SqsMessageAttributesExtractor.java (94%) rename instrumentation/{aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/internal/SqsMessageSpanLinksExtractor.java (86%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/AwsLambdaApiGatewayWrapperTest.java (93%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/AwsLambdaSqsEventHandlerTest.java (95%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/AwsLambdaSqsEventWrapperTest.java (93%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/AwsLambdaSqsMessageHandlerTest.java (99%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/AwsLambdaWrapperTest.java (92%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/LambdaParametersTest.java (95%) rename instrumentation/{aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/TracingRequestWrapperStandardEventsTest.java (98%) rename instrumentation/{aws-lambda-1.0 => aws-lambda/aws-lambda-events-2.2}/testing/build.gradle.kts (100%) rename instrumentation/{aws-lambda-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0 => aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2}/AbstractAwsLambdaSqsEventHandlerTest.java (99%) diff --git a/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaInstrumentationHelper.java b/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaInstrumentationHelper.java deleted file mode 100644 index a6da8e96a2..0000000000 --- a/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaInstrumentationHelper.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.awslambda.v1_0; - -import com.amazonaws.services.lambda.runtime.events.SQSEvent; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.awslambda.v1_0.internal.AwsLambdaFunctionInstrumenter; -import io.opentelemetry.instrumentation.awslambda.v1_0.internal.AwsLambdaFunctionInstrumenterFactory; -import io.opentelemetry.instrumentation.awslambda.v1_0.internal.AwsLambdaSqsInstrumenterFactory; - -public final class AwsLambdaInstrumentationHelper { - - private static final AwsLambdaFunctionInstrumenter FUNCTION_INSTRUMENTER = - AwsLambdaFunctionInstrumenterFactory.createInstrumenter(GlobalOpenTelemetry.get()); - - public static AwsLambdaFunctionInstrumenter functionInstrumenter() { - return FUNCTION_INSTRUMENTER; - } - - private static final Instrumenter MESSAGE_TRACER = - AwsLambdaSqsInstrumenterFactory.forEvent(GlobalOpenTelemetry.get()); - - public static Instrumenter messageInstrumenter() { - return MESSAGE_TRACER; - } - - private AwsLambdaInstrumentationHelper() {} -} diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/HeadersFactory.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/HeadersFactory.java deleted file mode 100644 index 89957bba7b..0000000000 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/HeadersFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.awslambda.v1_0.internal; - -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.ObjectMapper; -import java.io.InputStream; -import java.util.Map; -import javax.annotation.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -final class HeadersFactory { - - private static final Logger logger = LoggerFactory.getLogger(HeadersFactory.class); - - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - - @Nullable - static Map ofStream(InputStream inputStream) { - try (JsonParser jParser = new JsonFactory().createParser(inputStream)) { - while (jParser.nextToken() != null) { - String name = jParser.getCurrentName(); - if ("headers".equalsIgnoreCase(name)) { - jParser.nextToken(); - @SuppressWarnings("unchecked") - Map map = - (Map) OBJECT_MAPPER.readValue(jParser, Map.class); - return map; - } - } - } catch (Exception e) { - logger.debug("Could not get headers from request, ", e); - } - return null; - } - - private HeadersFactory() {} -} diff --git a/instrumentation/aws-lambda/README.md b/instrumentation/aws-lambda/README.md new file mode 100644 index 0000000000..72fba2abab --- /dev/null +++ b/instrumentation/aws-lambda/README.md @@ -0,0 +1,11 @@ +# AWS Lambda Instrumentation + +We provide two packages for instrumenting AWS lambda functions. + +- [aws-lambda-core-1.0](./aws-lambda-core-1.0/library) provides lightweight instrumentation of the Lambda core library, supporting +all versions. Use this package if you only use `RequestStreamHandler` or know you don't use any event classes from +`aws-lambda-java-events`. This also includes when you are using `aws-serverless-java-container` to run e.g., a +Spring Boot application on Lambda. + +- [aws-lambda-events-2.2](./aws-lambda-events-2.2/library) provides full instrumentation of the Lambda library, including standard +and custom event types, from `aws-lambda-java-events` 2.2+. diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/build.gradle.kts b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/build.gradle.kts new file mode 100644 index 0000000000..25848b04b9 --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/build.gradle.kts @@ -0,0 +1,21 @@ +plugins { + id("otel.javaagent-instrumentation") +} + +muzzle { + pass { + group.set("com.amazonaws") + module.set("aws-lambda-java-core") + versions.set("[1.0.0,)") + extraDependency("com.amazonaws.serverless:aws-serverless-java-container-core:1.5.2") + } +} + +dependencies { + implementation(project(":instrumentation:aws-lambda:aws-lambda-core-1.0:library")) + + library("com.amazonaws:aws-lambda-java-core:1.0.0") + + testImplementation(project(":instrumentation:aws-lambda:aws-lambda-core-1.0:testing")) + testInstrumentation(project(":instrumentation:aws-lambda:aws-lambda-events-2.2:javaagent")) +} diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaInstrumentationHelper.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaInstrumentationHelper.java new file mode 100644 index 0000000000..48a8284637 --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaInstrumentationHelper.java @@ -0,0 +1,22 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0; + +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenter; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenterFactory; + +public final class AwsLambdaInstrumentationHelper { + + private static final AwsLambdaFunctionInstrumenter FUNCTION_INSTRUMENTER = + AwsLambdaFunctionInstrumenterFactory.createInstrumenter(GlobalOpenTelemetry.get()); + + public static AwsLambdaFunctionInstrumenter functionInstrumenter() { + return FUNCTION_INSTRUMENTER; + } + + private AwsLambdaInstrumentationHelper() {} +} diff --git a/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaInstrumentationModule.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaInstrumentationModule.java similarity index 87% rename from instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaInstrumentationModule.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaInstrumentationModule.java index 71fe858212..b55f724aca 100644 --- a/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaInstrumentationModule.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaInstrumentationModule.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.awslambda.v1_0; +package io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0; import static java.util.Collections.singletonList; @@ -15,7 +15,7 @@ import java.util.List; @AutoService(InstrumentationModule.class) public class AwsLambdaInstrumentationModule extends InstrumentationModule { public AwsLambdaInstrumentationModule() { - super("aws-lambda", "aws-lambda-1.0"); + super("aws-lambda", "aws-lambda-core-1.0"); } @Override diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java new file mode 100644 index 0000000000..b9a55274b6 --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java @@ -0,0 +1,88 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0; + +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; +import static io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0.AwsLambdaInstrumentationHelper.functionInstrumenter; +import static net.bytebuddy.matcher.ElementMatchers.isMethod; +import static net.bytebuddy.matcher.ElementMatchers.isPublic; +import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.takesArgument; + +import com.amazonaws.services.lambda.runtime.Context; +import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest; +import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import io.opentelemetry.javaagent.instrumentation.api.OpenTelemetrySdkAccess; +import java.util.Collections; +import java.util.concurrent.TimeUnit; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.implementation.bytecode.assign.Assigner.Typing; +import net.bytebuddy.matcher.ElementMatcher; + +public class AwsLambdaRequestHandlerInstrumentation implements TypeInstrumentation { + + @Override + public ElementMatcher classLoaderOptimization() { + return hasClassesNamed("com.amazonaws.services.lambda.runtime.RequestHandler"); + } + + @Override + public ElementMatcher typeMatcher() { + return implementsInterface(named("com.amazonaws.services.lambda.runtime.RequestHandler")); + } + + @Override + public void transform(TypeTransformer transformer) { + transformer.applyAdviceToMethod( + isMethod() + .and(isPublic()) + .and(named("handleRequest")) + .and(takesArgument(1, named("com.amazonaws.services.lambda.runtime.Context"))), + AwsLambdaRequestHandlerInstrumentation.class.getName() + "$HandleRequestAdvice"); + } + + @SuppressWarnings("unused") + public static class HandleRequestAdvice { + + @Advice.OnMethodEnter(suppress = Throwable.class) + public static void onEnter( + @Advice.Argument(value = 0, typing = Typing.DYNAMIC) Object arg, + @Advice.Argument(1) Context context, + @Advice.Local("otelInput") AwsLambdaRequest input, + @Advice.Local("otelContext") io.opentelemetry.context.Context otelContext, + @Advice.Local("otelScope") Scope otelScope) { + input = AwsLambdaRequest.create(context, arg, Collections.emptyMap()); + io.opentelemetry.context.Context parentContext = functionInstrumenter().extract(input); + + if (!functionInstrumenter().shouldStart(parentContext, input)) { + return; + } + + otelContext = functionInstrumenter().start(parentContext, input); + otelScope = otelContext.makeCurrent(); + } + + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) + public static void stopSpan( + @Advice.Argument(value = 0, typing = Typing.DYNAMIC) Object arg, + @Advice.Thrown Throwable throwable, + @Advice.Local("otelInput") AwsLambdaRequest input, + @Advice.Local("otelContext") io.opentelemetry.context.Context functionContext, + @Advice.Local("otelScope") Scope functionScope) { + + if (functionScope != null) { + functionScope.close(); + functionInstrumenter().end(functionContext, input, null, throwable); + } + + OpenTelemetrySdkAccess.forceFlush(1, TimeUnit.SECONDS); + } + } +} diff --git a/instrumentation/aws-lambda-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java similarity index 88% rename from instrumentation/aws-lambda-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaTest.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java index cf9d30e7a3..af939fcb6d 100644 --- a/instrumentation/aws-lambda-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaTest.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.awslambda.v1_0; +package io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0; import static org.assertj.core.api.Assertions.assertThat; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import io.opentelemetry.instrumentation.awslambda.v1_0.AbstractAwsLambdaTest; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.AbstractAwsLambdaTest; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import org.junit.jupiter.api.AfterEach; diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/README.md b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/README.md new file mode 100644 index 0000000000..f5ea7bf3e1 --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/README.md @@ -0,0 +1,95 @@ +# AWS Lambda Instrumentation + +This package contains libraries to help instrument AWS lambda functions in your code. + +## Using wrappers +To use the instrumentation, configure `OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER` env property to your lambda handler method in following format `package.ClassName::methodName` +and use one of wrappers as your lambda `Handler`. + +In order to configure a span flush timeout (default is set to 1 second), please configure `OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT` env property. The value is in seconds. + +Available wrappers: +- `io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestStreamWrapper` - for wrapping streaming handlers (implementing `RequestStreamHandler`), enabling HTTP context propagation for HTTP requests + +When using known Lambda event types as parameters, use [aws-lambda-events-2.2](../../aws-lambda-events-2.2/library). + +## Using handlers +To use the instrumentation, replace your function classes that implement `RequestHandler` (or `RequestStreamHandler`) with those +that extend `TracingRequestHandler` (or `TracingRequestStreamHandler`). You will need to change the method name to `doHandleRequest` +and pass an initialized `OpenTelemetrySdk` to the base class. + +```java +public class MyRequestHandler extends TracingRequestHandler { + + private static final OpenTelemetrySdk SDK = OpenTelemetrySdk.builder() + .addSpanProcessor(spanProcessor) + .buildAndRegisterGlobal(); + + public MyRequestHandler() { + super(SDK); + } + + // Note the method is named doHandleRequest instead of handleRequest. + @Override + protected String doHandleRequest(String input, Context context) { + if (input.equals("hello")) { + return "world"; + } + return "goodbye"; + } +} +``` + +A `SERVER` span will be created with the name you specify for the function when deploying it. + +In addition, it is recommended to set up X-Ray trace propagation to be able to +link to tracing information provided by Lambda itself. To do so, add a dependency on +`opentelemetry-extension-tracepropagators`. Make sure the version matches the version of the SDK +you use. + +Gradle: +```kotlin +dependencies { + implementation("io.opentelemetry:opentelemetry-extension-trace-propagators:0.8.0") +} +``` + +Maven: +```xml + + + io.opentelemetry + opentelemetry-extension-trace-propagators + 0.8.0 + + +``` + + +## Trace propagation + +Context propagation for this instrumentation can be done either with X-Ray propagation or regular HTTP propagation. If X-Ray is enabled for instrumented lambda, it will be preferred. If X-Ray is disabled, HTTP propagation will be tried (that is HTTP headers will be read to check for a valid trace context). + + +### X-Ray propagation +This instrumentation supports propagating traces using the `X-Amzn-Trace-Id` format for both normal +requests and SQS requests. X-Ray propagation is always enabled, there is no need to configure it explicitely. + +### HTTP headers based propagation +For API Gateway (HTTP) requests instrumented by using one of following methods: +- extending `TracingRequestStreamHandler` or `TracingRequestHandler` +- wrapping with `TracingRequestStreamWrapper` or `TracingRequestApiGatewayWrapper` +traces can be propagated with supported HTTP headers (see https://github.com/open-telemetry/opentelemetry-java/tree/main/extensions/trace_propagators). + +In order to enable requested propagation for a handler, configure it on the SDK you build. + +```java + static { + OpenTelemetrySdk.builder() + ... + .setPropagators(ContextPropagators.create(B3Propagator.injectingSingleHeader())) + .buildAndRegisterGlobal(); + } +``` + +If using the wrappers, set the `OTEL_PROPAGATORS` environment variable as descibed [here](https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure/README.md#propagator). diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/build.gradle.kts b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/build.gradle.kts new file mode 100644 index 0000000000..9c32122da0 --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/build.gradle.kts @@ -0,0 +1,33 @@ +plugins { + id("otel.library-instrumentation") +} + +dependencies { + compileOnly("io.opentelemetry:opentelemetry-sdk") + compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + + compileOnly("com.google.auto.value:auto-value-annotations") + annotationProcessor("com.google.auto.value:auto-value") + + library("com.amazonaws:aws-lambda-java-core:1.0.0") + + implementation("io.opentelemetry:opentelemetry-extension-aws") + + // We do lightweight parsing of JSON to extract HTTP headers from requests for propagation. + // This will be commonly needed even for users that don't use events, but luckily it's not too big. + // Note that Lambda itself uses Jackson, but does not expose it to the function so we need to include + // it here. + implementation("com.fasterxml.jackson.core:jackson-core") + + // allows to get the function ARN + testLibrary("com.amazonaws:aws-lambda-java-core:1.2.1") + + testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + testImplementation("io.opentelemetry:opentelemetry-extension-trace-propagators") + testImplementation("com.google.guava:guava") + + testImplementation(project(":instrumentation:aws-lambda:aws-lambda-core-1.0:testing")) + testImplementation("org.mockito:mockito-core") + testImplementation("org.assertj:assertj-core") + testImplementation("uk.org.webcompere:system-stubs-jupiter") +} diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaRequest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaRequest.java similarity index 90% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaRequest.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaRequest.java index 4519d690d4..578cbe598d 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaRequest.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaRequest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdacore.v1_0; import com.amazonaws.services.lambda.runtime.Context; import com.google.auto.value.AutoValue; diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/LambdaParameters.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/LambdaParameters.java new file mode 100644 index 0000000000..db1dc1a002 --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/LambdaParameters.java @@ -0,0 +1,29 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awslambdacore.v1_0; + +import com.amazonaws.services.lambda.runtime.Context; +import java.lang.reflect.Method; + +final class LambdaParameters { + + static Object[] toArray(Method targetMethod, T input, Context context) { + Class[] parameterTypes = targetMethod.getParameterTypes(); + Object[] parameters = new Object[parameterTypes.length]; + for (int i = 0; i < parameterTypes.length; i++) { + Class clazz = parameterTypes[i]; + boolean isContext = clazz.equals(Context.class); + if (isContext) { + parameters[i] = context; + } else if (i == 0) { + parameters[0] = input; + } + } + return parameters; + } + + private LambdaParameters() {} +} diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaUtils.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/LambdaUtils.java similarity index 91% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaUtils.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/LambdaUtils.java index ca94ffa18e..5a3bfcb50d 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaUtils.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/LambdaUtils.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdacore.v1_0; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.common.CompletableResultCode; diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestHandler.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/TracingRequestHandler.java similarity index 82% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestHandler.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/TracingRequestHandler.java index ece1709d1d..873040f66e 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestHandler.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/TracingRequestHandler.java @@ -3,14 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdacore.v1_0; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.awslambda.v1_0.internal.AwsLambdaFunctionInstrumenter; -import io.opentelemetry.instrumentation.awslambda.v1_0.internal.AwsLambdaFunctionInstrumenterFactory; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenter; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenterFactory; import io.opentelemetry.sdk.OpenTelemetrySdk; import java.time.Duration; import java.util.Collections; @@ -64,18 +63,9 @@ public abstract class TracingRequestHandler implements RequestHandler getHeaders(I input) { - Map result = null; - if (input instanceof APIGatewayProxyRequestEvent) { - APIGatewayProxyRequestEvent event = (APIGatewayProxyRequestEvent) input; - result = event.getHeaders(); - } - return result == null ? Collections.emptyMap() : result; - } - @Override public final O handleRequest(I input, Context context) { - AwsLambdaRequest request = AwsLambdaRequest.create(context, input, getHeaders(input)); + AwsLambdaRequest request = AwsLambdaRequest.create(context, input, extractHttpHeaders(input)); io.opentelemetry.context.Context parentContext = instrumenter.extract(request); if (!instrumenter.shouldStart(parentContext, request)) { @@ -98,4 +88,12 @@ public abstract class TracingRequestHandler implements RequestHandler extractHttpHeaders(I input) { + return Collections.emptyMap(); + } } diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestStreamHandler.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/TracingRequestStreamHandler.java similarity index 93% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestStreamHandler.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/TracingRequestStreamHandler.java index e3fbd9897c..fced56818f 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestStreamHandler.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/TracingRequestStreamHandler.java @@ -3,14 +3,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdacore.v1_0; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.awslambda.v1_0.internal.ApiGatewayProxyRequest; -import io.opentelemetry.instrumentation.awslambda.v1_0.internal.AwsLambdaFunctionInstrumenter; -import io.opentelemetry.instrumentation.awslambda.v1_0.internal.AwsLambdaFunctionInstrumenterFactory; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.ApiGatewayProxyRequest; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenter; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenterFactory; import io.opentelemetry.sdk.OpenTelemetrySdk; import java.io.IOException; import java.io.InputStream; diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestStreamWrapper.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/TracingRequestStreamWrapper.java similarity index 88% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestStreamWrapper.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/TracingRequestStreamWrapper.java index dcbc3bb557..18ceb38cbf 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestStreamWrapper.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/TracingRequestStreamWrapper.java @@ -3,10 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdacore.v1_0; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrapperConfiguration; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import java.io.IOException; diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ApiGatewayProxyRequest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ApiGatewayProxyRequest.java similarity index 75% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ApiGatewayProxyRequest.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ApiGatewayProxyRequest.java index 60db1d6932..f5c924b02b 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ApiGatewayProxyRequest.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ApiGatewayProxyRequest.java @@ -3,19 +3,19 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0.internal; +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; -import static io.opentelemetry.instrumentation.awslambda.v1_0.internal.HeadersFactory.ofStream; +import static io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.HeadersFactory.ofStream; import io.opentelemetry.api.GlobalOpenTelemetry; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Collection; import java.util.Collections; import java.util.Map; import javax.annotation.Nullable; -import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * This class is internal and is hence not for public use. Its APIs are unstable and can change at @@ -23,6 +23,8 @@ import org.apache.commons.io.IOUtils; */ public abstract class ApiGatewayProxyRequest { + private static final Logger logger = LoggerFactory.getLogger(ApiGatewayProxyRequest.class); + // TODO(anuraaga): We should create a RequestFactory type of class instead of evaluating this // for every request. private static boolean noHttpPropagationNeeded() { @@ -38,8 +40,7 @@ public abstract class ApiGatewayProxyRequest { fields.iterator().next()); } - public static ApiGatewayProxyRequest forStream(InputStream source) throws IOException { - + public static ApiGatewayProxyRequest forStream(InputStream source) { if (noHttpPropagationNeeded()) { return new NoopRequest(source); } @@ -47,8 +48,14 @@ public abstract class ApiGatewayProxyRequest { if (source.markSupported()) { return new MarkableApiGatewayProxyRequest(source); } - // fallback - return new CopiedApiGatewayProxyRequest(source); + // It is known that the Lambda runtime passes ByteArrayInputStream's to functions, so gracefully + // handle this without propagating and revisit if getting user reports that expectations + // changed. + logger.warn( + "HTTP propagation enabled but could not extract HTTP headers. " + + "This is a bug in the OpenTelemetry AWS Lambda instrumentation. Type of request stream {}", + source.getClass()); + return new NoopRequest(source); } @Nullable @@ -89,24 +96,9 @@ public abstract class ApiGatewayProxyRequest { @Override public InputStream freshStream() throws IOException { - inputStream.reset(); inputStream.mark(Integer.MAX_VALUE); return inputStream; } } - - private static class CopiedApiGatewayProxyRequest extends ApiGatewayProxyRequest { - - private final byte[] data; - - private CopiedApiGatewayProxyRequest(InputStream inputStream) throws IOException { - data = IOUtils.toByteArray(inputStream); - } - - @Override - public InputStream freshStream() { - return new ByteArrayInputStream(data); - } - } } diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/AwsLambdaFunctionAttributesExtractor.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionAttributesExtractor.java similarity index 88% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/AwsLambdaFunctionAttributesExtractor.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionAttributesExtractor.java index 845ade40f0..04e1859e29 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/AwsLambdaFunctionAttributesExtractor.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionAttributesExtractor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0.internal; +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; import static io.opentelemetry.semconv.resource.attributes.ResourceAttributes.CLOUD_ACCOUNT_ID; import static io.opentelemetry.semconv.resource.attributes.ResourceAttributes.FAAS_ID; @@ -12,13 +12,17 @@ import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.FAAS_ import com.amazonaws.services.lambda.runtime.Context; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaRequest; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import javax.annotation.Nullable; -class AwsLambdaFunctionAttributesExtractor +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class AwsLambdaFunctionAttributesExtractor implements AttributesExtractor { @Nullable private static final MethodHandle GET_FUNCTION_ARN; diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/AwsLambdaFunctionInstrumenter.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenter.java similarity index 90% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/AwsLambdaFunctionInstrumenter.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenter.java index cf2e8791e0..dbbcb1c99d 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/AwsLambdaFunctionInstrumenter.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenter.java @@ -3,14 +3,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0.internal; +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.TextMapGetter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.internal.ContextPropagationDebug; -import io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaRequest; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest; import java.util.Map; import javax.annotation.Nullable; @@ -23,7 +23,7 @@ public class AwsLambdaFunctionInstrumenter { private final OpenTelemetry openTelemetry; final Instrumenter instrumenter; - AwsLambdaFunctionInstrumenter( + public AwsLambdaFunctionInstrumenter( OpenTelemetry openTelemetry, Instrumenter instrumenter) { this.openTelemetry = openTelemetry; this.instrumenter = instrumenter; diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenterFactory.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenterFactory.java new file mode 100644 index 0000000000..3a81435de3 --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenterFactory.java @@ -0,0 +1,33 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public class AwsLambdaFunctionInstrumenterFactory { + + public static AwsLambdaFunctionInstrumenter createInstrumenter(OpenTelemetry openTelemetry) { + return new AwsLambdaFunctionInstrumenter( + openTelemetry, + Instrumenter.builder( + openTelemetry, + "io.opentelemetry.aws-lambda-core-1.0", + AwsLambdaFunctionInstrumenterFactory::spanName) + .addAttributesExtractors(new AwsLambdaFunctionAttributesExtractor()) + .newInstrumenter(SpanKindExtractor.alwaysServer())); + } + + private static String spanName(AwsLambdaRequest input) { + return input.getAwsContext().getFunctionName(); + } +} diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/HeadersFactory.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/HeadersFactory.java new file mode 100644 index 0000000000..f78637a8f1 --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/HeadersFactory.java @@ -0,0 +1,60 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; + +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; +import java.io.InputStream; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +final class HeadersFactory { + + private static final Logger logger = LoggerFactory.getLogger(HeadersFactory.class); + + private static final JsonFactory JSON_FACTORY = new JsonFactory(); + + static Map ofStream(InputStream inputStream) { + try (JsonParser parser = JSON_FACTORY.createParser(inputStream)) { + parser.nextToken(); + + if (!parser.isExpectedStartObjectToken()) { + logger.debug("Not a JSON object"); + return Collections.emptyMap(); + } + while (parser.nextToken() != JsonToken.END_OBJECT) { + parser.nextToken(); + if (!parser.getCurrentName().equals("headers")) { + parser.skipChildren(); + continue; + } + + if (!parser.isExpectedStartObjectToken()) { + logger.debug("Invalid JSON for HTTP headers"); + return Collections.emptyMap(); + } + + Map headers = new HashMap<>(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String value = parser.nextTextValue(); + if (value != null) { + headers.put(parser.getCurrentName(), value); + } + } + return headers; + } + } catch (Exception e) { + logger.debug("Could not get headers from request, ", e); + } + return Collections.emptyMap(); + } + + private HeadersFactory() {} +} diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/MapUtils.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/MapUtils.java similarity index 56% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/MapUtils.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/MapUtils.java index 3258d92142..3ba63e6784 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/MapUtils.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/MapUtils.java @@ -3,21 +3,25 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0.internal; +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; import java.util.Collections; import java.util.Locale; import java.util.Map; import java.util.stream.Collectors; -final class MapUtils { - static Map lowercaseMap(Map source) { +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class MapUtils { + public static Map lowercaseMap(Map source) { return emptyIfNull(source).entrySet().stream() .filter(e -> e.getKey() != null) .collect(Collectors.toMap(e -> e.getKey().toLowerCase(Locale.ROOT), Map.Entry::getValue)); } - static Map emptyIfNull(Map map) { + public static Map emptyIfNull(Map map) { return map == null ? Collections.emptyMap() : map; } diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ParentContextExtractor.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractor.java similarity index 85% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ParentContextExtractor.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractor.java index a905c46e03..1ce52c4982 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ParentContextExtractor.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractor.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0.internal; +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; -import static io.opentelemetry.instrumentation.awslambda.v1_0.internal.MapUtils.lowercaseMap; +import static io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.MapUtils.lowercaseMap; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanContext; @@ -16,7 +16,11 @@ import java.util.Collections; import java.util.Locale; import java.util.Map; -final class ParentContextExtractor { +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class ParentContextExtractor { private static final String AWS_TRACE_HEADER_ENV_KEY = "_X_AMZN_TRACE_ID"; @@ -50,7 +54,7 @@ final class ParentContextExtractor { // lower-case map getter used for extraction static final String AWS_TRACE_HEADER_PROPAGATOR_KEY = "x-amzn-trace-id"; - static Context fromXrayHeader(String parentHeader) { + public static Context fromXrayHeader(String parentHeader) { return AwsXrayPropagator.getInstance() .extract( // see BaseTracer#extract() on why we're using root() here diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrappedLambda.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/WrappedLambda.java similarity index 91% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrappedLambda.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/WrappedLambda.java index 6be352e5b2..92d1752dff 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrappedLambda.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/WrappedLambda.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; import com.amazonaws.services.lambda.runtime.Context; import java.lang.reflect.Constructor; @@ -14,8 +14,11 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; -/** Model for wrapped lambda function (object, class, method). */ -class WrappedLambda { +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class WrappedLambda { public static final String OTEL_LAMBDA_HANDLER_ENV_KEY = "OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER"; @@ -28,7 +31,7 @@ class WrappedLambda { * Creates new lambda wrapper out of configuration. Supported env properties: - {@value * OTEL_LAMBDA_HANDLER_ENV_KEY} - lambda handler in format: package.ClassName::methodName */ - static WrappedLambda fromConfiguration() { + public static WrappedLambda fromConfiguration() { String lambdaHandler = System.getenv(OTEL_LAMBDA_HANDLER_ENV_KEY); if (lambdaHandler == null || lambdaHandler.isEmpty()) { @@ -53,7 +56,8 @@ class WrappedLambda { return new WrappedLambda(targetClass, targetMethodName); } - WrappedLambda(Class targetClass, String targetMethodName) { + // Visible for testing + public WrappedLambda(Class targetClass, String targetMethodName) { this.targetClass = targetClass; this.targetMethodName = targetMethodName; this.targetObject = instantiateTargetClass(); @@ -86,7 +90,7 @@ class WrappedLambda { return parameters[parameters.length - 1].getType().equals(Context.class); } - Method getRequestTargetMethod() { + public Method getRequestTargetMethod() { List methods = Arrays.asList(targetClass.getMethods()); Optional firstOptional = @@ -150,11 +154,11 @@ class WrappedLambda { return 0; } - Object getTargetObject() { + public Object getTargetObject() { return targetObject; } - Class getTargetClass() { + public Class getTargetClass() { return targetClass; } } diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrapperConfiguration.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/WrapperConfiguration.java similarity index 81% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrapperConfiguration.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/WrapperConfiguration.java index c176ad30c2..c43a3f8cb2 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrapperConfiguration.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/WrapperConfiguration.java @@ -3,10 +3,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; import java.time.Duration; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ public final class WrapperConfiguration { private WrapperConfiguration() {} diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaStreamWrapperHttpPropagationTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaStreamWrapperHttpPropagationTest.java similarity index 87% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaStreamWrapperHttpPropagationTest.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaStreamWrapperHttpPropagationTest.java index da8188600e..b732e17892 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaStreamWrapperHttpPropagationTest.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaStreamWrapperHttpPropagationTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdacore.v1_0; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -12,9 +12,11 @@ import static org.mockito.Mockito.when; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; @@ -42,11 +44,9 @@ import org.mockito.junit.jupiter.MockitoExtension; @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaStreamWrapperHttpPropagationTest$TestRequestHandler::handleRequest") + "io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaStreamWrapperHttpPropagationTest$TestRequestHandler::handleRequest") public class AwsLambdaStreamWrapperHttpPropagationTest { - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - @RegisterExtension public static final InstrumentationExtension testing = LibraryInstrumentationExtension.create(); @@ -143,11 +143,24 @@ public class AwsLambdaStreamWrapperHttpPropagationTest { public static final class TestRequestHandler implements RequestStreamHandler { + private static final JsonFactory JSON_FACTORY = new JsonFactory(); + @Override public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException { - JsonNode root = OBJECT_MAPPER.readTree(input); - String body = root.get("body").asText(); + String body = ""; + try (JsonParser parser = JSON_FACTORY.createParser(input)) { + parser.nextToken(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + parser.nextToken(); + if (!parser.getCurrentName().equals("body")) { + parser.skipChildren(); + continue; + } + body = parser.getText(); + break; + } + } BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8)); if (body.equals("hello")) { diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaStreamWrapperTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaStreamWrapperTest.java similarity index 95% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaStreamWrapperTest.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaStreamWrapperTest.java index a5cfa9cd9a..51061f9751 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaStreamWrapperTest.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaStreamWrapperTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdacore.v1_0; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -13,6 +13,7 @@ import static org.mockito.Mockito.when; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; @@ -42,7 +43,7 @@ import org.mockito.junit.jupiter.MockitoExtension; @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaStreamWrapperTest$TestRequestHandler::handleRequest") + "io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaStreamWrapperTest$TestRequestHandler::handleRequest") public class AwsLambdaStreamWrapperTest { @RegisterExtension diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java similarity index 95% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaTest.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java index a008a11944..1c64cb02bc 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaTest.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdacore.v1_0; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/LambdaParametersTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/LambdaParametersTest.java new file mode 100644 index 0000000000..34a45947c2 --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/LambdaParametersTest.java @@ -0,0 +1,47 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awslambdacore.v1_0; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +import com.amazonaws.services.lambda.runtime.Context; +import java.lang.reflect.Method; +import org.junit.jupiter.api.Test; + +class LambdaParametersTest { + + public void onlyContext(Context context) {} + + public void contextOnThird(String one, String two, Context context) {} + + @Test + void shouldSetContextOnFirstPosition() throws NoSuchMethodException { + // given + Context context = mock(Context.class); + Method method = getClass().getMethod("onlyContext", Context.class); + // when + Object[] params = LambdaParameters.toArray(method, "", context); + // then + assertThat(params).hasSize(1); + assertThat(params[0]).isEqualTo(context); + } + + @Test + void shouldSetContextOnTheLastPosition() throws NoSuchMethodException { + // given + Context context = mock(Context.class); + Method method = + getClass().getMethod("contextOnThird", String.class, String.class, Context.class); + // when + Object[] params = LambdaParameters.toArray(method, "", context); + // then + assertThat(params).hasSize(3); + assertThat(params[0]).isEqualTo(""); + assertThat(params[1]).isNull(); + assertThat(params[2]).isEqualTo(context); + } +} diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ApiGatewayProxyRequestTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ApiGatewayProxyRequestTest.java similarity index 86% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ApiGatewayProxyRequestTest.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ApiGatewayProxyRequestTest.java index ddb403dce4..a59b08d54a 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ApiGatewayProxyRequestTest.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ApiGatewayProxyRequestTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0.internal; +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -11,14 +11,12 @@ import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.extension.aws.AwsXrayPropagator; import io.opentelemetry.extension.trace.propagation.B3Propagator; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import org.junit.jupiter.api.BeforeEach; @@ -72,7 +70,7 @@ class ApiGatewayProxyRequestTest { } @Test - public void shouldUseCopyIfMarkingNotAvailableAndHttpPropagatorsSet() throws IOException { + public void shouldUseNoopIfMarkingNotAvailableAndHttpPropagatorsSet() throws IOException { // given InputStream mock = mock(InputStream.class); given(mock.markSupported()).willReturn(false); @@ -82,9 +80,7 @@ class ApiGatewayProxyRequestTest { // when ApiGatewayProxyRequest created = ApiGatewayProxyRequest.forStream(mock); // then - assertThat(created.freshStream()).isInstanceOf(ByteArrayInputStream.class); - then(mock).should(never()).mark(any(Integer.class)); - then(mock).should(never()).reset(); - then(mock).should().read(any()); + assertThat(created.freshStream()).isEqualTo(mock); + assertThat(created.getHeaders()).isEmpty(); } } diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/HeadersFactoryTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/HeadersFactoryTest.java similarity index 93% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/HeadersFactoryTest.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/HeadersFactoryTest.java index 28a66357ac..b2998fc7b2 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/HeadersFactoryTest.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/HeadersFactoryTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0.internal; +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.data.MapEntry.entry; @@ -46,6 +46,6 @@ class HeadersFactoryTest { InputStream inputStream = new ByteArrayInputStream(json.getBytes(Charset.defaultCharset())); // when Map headers = HeadersFactory.ofStream(inputStream); // then - assertThat(headers).isNull(); + assertThat(headers).isEmpty(); } } diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ParentContextExtractorTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java similarity index 98% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ParentContextExtractorTest.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java index 0928b5b064..1fa0b6e536 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/internal/ParentContextExtractorTest.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0.internal; +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; import static org.assertj.core.api.Assertions.assertThat; diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/build.gradle.kts b/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/build.gradle.kts new file mode 100644 index 0000000000..38bb55402c --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + id("otel.java-conventions") +} + +dependencies { + api(project(":testing-common")) + + api("com.amazonaws:aws-lambda-java-core:1.0.0") + + api("org.junit-pioneer:junit-pioneer") + api("org.mockito:mockito-junit-jupiter") + + implementation("com.google.guava:guava") + + implementation("org.codehaus.groovy:groovy-all") + implementation("io.opentelemetry:opentelemetry-api") + implementation("org.spockframework:spock-core") + implementation("com.github.stefanbirkner:system-lambda") +} diff --git a/instrumentation/aws-lambda-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AbstractAwsLambdaTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java similarity index 98% rename from instrumentation/aws-lambda-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AbstractAwsLambdaTest.java rename to instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java index 4b3ae206a7..4b994e737d 100644 --- a/instrumentation/aws-lambda-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AbstractAwsLambdaTest.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdacore.v1_0; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; diff --git a/instrumentation/aws-lambda-1.0/javaagent/build.gradle.kts b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/build.gradle.kts similarity index 57% rename from instrumentation/aws-lambda-1.0/javaagent/build.gradle.kts rename to instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/build.gradle.kts index 8cf9e621dd..3e04108dc9 100644 --- a/instrumentation/aws-lambda-1.0/javaagent/build.gradle.kts +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/build.gradle.kts @@ -13,7 +13,12 @@ muzzle { } dependencies { - implementation(project(":instrumentation:aws-lambda-1.0:library")) + implementation(project(":instrumentation:aws-lambda:aws-lambda-core-1.0:library")) + + implementation(project(":instrumentation:aws-lambda:aws-lambda-events-2.2:library")) { + // Only needed by wrappers, not the javaagent. Muzzle will catch if we accidentally change this. + exclude("com.fasterxml.jackson.core", "jackson-databind") + } library("com.amazonaws:aws-lambda-java-core:1.0.0") // First version to includes support for SQSEvent, currently the most popular message queue used @@ -22,5 +27,6 @@ dependencies { // in public API. library("com.amazonaws:aws-lambda-java-events:2.2.1") - testImplementation(project(":instrumentation:aws-lambda-1.0:testing")) + testImplementation(project(":instrumentation:aws-lambda:aws-lambda-events-2.2:testing")) + testInstrumentation(project(":instrumentation:aws-lambda:aws-lambda-core-1.0:javaagent")) } diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaInstrumentationHelper.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaInstrumentationHelper.java new file mode 100644 index 0000000000..c02754661a --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaInstrumentationHelper.java @@ -0,0 +1,35 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.awslambdaevents.v2_2; + +import com.amazonaws.services.lambda.runtime.events.SQSEvent; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.awslambdaevents.v2_2.internal.AwsLambdaEventsInstrumenterFactory; +import io.opentelemetry.instrumentation.awslambdaevents.v2_2.internal.AwsLambdaSqsInstrumenterFactory; + +public final class AwsLambdaInstrumentationHelper { + + private static final io.opentelemetry.instrumentation.awslambdacore.v1_0.internal + .AwsLambdaFunctionInstrumenter + FUNCTION_INSTRUMENTER = + AwsLambdaEventsInstrumenterFactory.createInstrumenter(GlobalOpenTelemetry.get()); + + public static io.opentelemetry.instrumentation.awslambdacore.v1_0.internal + .AwsLambdaFunctionInstrumenter + functionInstrumenter() { + return FUNCTION_INSTRUMENTER; + } + + private static final Instrumenter MESSAGE_TRACER = + AwsLambdaSqsInstrumenterFactory.forEvent(GlobalOpenTelemetry.get()); + + public static Instrumenter messageInstrumenter() { + return MESSAGE_TRACER; + } + + private AwsLambdaInstrumentationHelper() {} +} diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaInstrumentationModule.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaInstrumentationModule.java new file mode 100644 index 0000000000..e0ef09c61b --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaInstrumentationModule.java @@ -0,0 +1,37 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.awslambdaevents.v2_2; + +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; +import static java.util.Collections.singletonList; + +import com.google.auto.service.AutoService; +import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; +import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import java.util.List; +import net.bytebuddy.matcher.ElementMatcher; + +@AutoService(InstrumentationModule.class) +public class AwsLambdaInstrumentationModule extends InstrumentationModule { + public AwsLambdaInstrumentationModule() { + super("aws-lambda", "aws-lambda-events-2.2"); + } + + @Override + public ElementMatcher.Junction classLoaderMatcher() { + return hasClassesNamed("com.amazonaws.services.lambda.runtime.events.SQSEvent"); + } + + @Override + public boolean isHelperClass(String className) { + return className.startsWith("io.opentelemetry.extension.aws."); + } + + @Override + public List typeInstrumentations() { + return singletonList(new AwsLambdaRequestHandlerInstrumentation()); + } +} diff --git a/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaRequestHandlerInstrumentation.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaRequestHandlerInstrumentation.java similarity index 78% rename from instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaRequestHandlerInstrumentation.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaRequestHandlerInstrumentation.java index b7096070a2..d5bfeec032 100644 --- a/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaRequestHandlerInstrumentation.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaRequestHandlerInstrumentation.java @@ -3,12 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.awslambda.v1_0; +package io.opentelemetry.javaagent.instrumentation.awslambdaevents.v2_2; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; -import static io.opentelemetry.javaagent.instrumentation.awslambda.v1_0.AwsLambdaInstrumentationHelper.functionInstrumenter; -import static io.opentelemetry.javaagent.instrumentation.awslambda.v1_0.AwsLambdaInstrumentationHelper.messageInstrumenter; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -17,7 +15,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.events.SQSEvent; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaRequest; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.instrumentation.api.OpenTelemetrySdkAccess; @@ -63,18 +61,24 @@ public class AwsLambdaRequestHandlerInstrumentation implements TypeInstrumentati @Advice.Local("otelMessageContext") io.opentelemetry.context.Context messageContext, @Advice.Local("otelMessageScope") Scope messageScope) { input = AwsLambdaRequest.create(context, arg, Collections.emptyMap()); - io.opentelemetry.context.Context parentContext = functionInstrumenter().extract(input); + io.opentelemetry.context.Context parentContext = + AwsLambdaInstrumentationHelper.functionInstrumenter().extract(input); - if (!functionInstrumenter().shouldStart(parentContext, input)) { + if (!AwsLambdaInstrumentationHelper.functionInstrumenter() + .shouldStart(parentContext, input)) { return; } - functionContext = functionInstrumenter().start(parentContext, input); + functionContext = + AwsLambdaInstrumentationHelper.functionInstrumenter().start(parentContext, input); functionScope = functionContext.makeCurrent(); if (arg instanceof SQSEvent) { - if (messageInstrumenter().shouldStart(functionContext, (SQSEvent) arg)) { - messageContext = messageInstrumenter().start(functionContext, (SQSEvent) arg); + if (AwsLambdaInstrumentationHelper.messageInstrumenter() + .shouldStart(functionContext, (SQSEvent) arg)) { + messageContext = + AwsLambdaInstrumentationHelper.messageInstrumenter() + .start(functionContext, (SQSEvent) arg); messageScope = messageContext.makeCurrent(); } } @@ -92,12 +96,14 @@ public class AwsLambdaRequestHandlerInstrumentation implements TypeInstrumentati if (messageScope != null) { messageScope.close(); - messageInstrumenter().end(messageContext, (SQSEvent) arg, null, throwable); + AwsLambdaInstrumentationHelper.messageInstrumenter() + .end(messageContext, (SQSEvent) arg, null, throwable); } if (functionScope != null) { functionScope.close(); - functionInstrumenter().end(functionContext, input, null, throwable); + AwsLambdaInstrumentationHelper.functionInstrumenter() + .end(functionContext, input, null, throwable); } OpenTelemetrySdkAccess.forceFlush(1, TimeUnit.SECONDS); diff --git a/instrumentation/aws-lambda-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaSqsEventHandlerTest.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsEventHandlerTest.java similarity index 86% rename from instrumentation/aws-lambda-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaSqsEventHandlerTest.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsEventHandlerTest.java index 649b246fb3..dd643f023f 100644 --- a/instrumentation/aws-lambda-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaSqsEventHandlerTest.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsEventHandlerTest.java @@ -3,12 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.awslambda.v1_0; +package io.opentelemetry.javaagent.instrumentation.awslambdaevents.v2_2; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SQSEvent; -import io.opentelemetry.instrumentation.awslambda.v1_0.AbstractAwsLambdaSqsEventHandlerTest; +import io.opentelemetry.instrumentation.awslambdaevents.v2_2.AbstractAwsLambdaSqsEventHandlerTest; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import org.junit.jupiter.api.extension.RegisterExtension; diff --git a/instrumentation/aws-lambda-1.0/library/README.md b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/README.md similarity index 86% rename from instrumentation/aws-lambda-1.0/library/README.md rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/README.md index a8b42866cb..6c81f3a5a0 100644 --- a/instrumentation/aws-lambda-1.0/library/README.md +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/README.md @@ -9,9 +9,12 @@ and use one of wrappers as your lambda `Handler`. In order to configure a span flush timeout (default is set to 1 second), please configure `OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT` env property. The value is in seconds. Available wrappers: -- `io.opentelemetry.instrumentation.awslambda.v1_0.TracingRequestWrapper` - for wrapping regular handlers (implementing `RequestHandler`) -- `io.opentelemetry.instrumentation.awslambda.v1_0.TracingRequestApiGatewayWrapper` - for wrapping regular handlers (implementing `RequestHandler`) proxied through API Gateway, enabling HTTP context propagation -- `io.opentelemetry.instrumentation.awslambda.v1_0.TracingRequestStreamWrapper` - for wrapping streaming handlers (implementing `RequestStreamHandler`), enabling HTTP context propagation for HTTP requests +- `io.opentelemetry.instrumentation.awslambdaevents.v2_2.TracingRequestWrapper` - for wrapping regular handlers (implementing `RequestHandler`) +- `io.opentelemetry.instrumentation.awslambdaevents.v2_2.TracingRequestApiGatewayWrapper` - for wrapping regular handlers (implementing `RequestHandler`) proxied through API Gateway, enabling HTTP context propagation +- `io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestStreamWrapper` - for wrapping streaming handlers (implementing `RequestStreamHandler`), enabling HTTP context propagation for HTTP requests + +If you are only using `TracingRequestStreamWrapper`, consider using [aws-lambda-core-1.0](../../aws-lambda-core-1.0/library) instead to reduce the size of +your compiled function. ## Using handlers To use the instrumentation, replace your function classes that implement `RequestHandler` (or `RequestStreamHandler`) with those diff --git a/instrumentation/aws-lambda-1.0/library/build.gradle.kts b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/build.gradle.kts similarity index 66% rename from instrumentation/aws-lambda-1.0/library/build.gradle.kts rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/build.gradle.kts index 4b41dafaea..d6ea9a270f 100644 --- a/instrumentation/aws-lambda-1.0/library/build.gradle.kts +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/build.gradle.kts @@ -3,6 +3,8 @@ plugins { } dependencies { + api(project(":instrumentation:aws-lambda:aws-lambda-core-1.0:library")) + compileOnly("io.opentelemetry:opentelemetry-sdk") compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") @@ -16,10 +18,11 @@ dependencies { // in public API. library("com.amazonaws:aws-lambda-java-events:2.2.1") - compileOnly("com.fasterxml.jackson.core:jackson-databind") - compileOnly("commons-io:commons-io:2.2") - compileOnly("org.slf4j:slf4j-api") - + // We need Jackson for wrappers to reproduce the serialization does when Lambda invokes a RequestHandler with event + // since Lambda will only be able to invoke the wrapper itself with a generic Object. + // Note that Lambda itself uses Jackson, but does not expose it to the function so we need to include it here. + // TODO(anuraaga): Switch to aws-lambda-java-serialization to more robustly follow Lambda's serialization logic. + implementation("com.fasterxml.jackson.core:jackson-databind") implementation("io.opentelemetry:opentelemetry-extension-aws") // allows to get the function ARN @@ -27,14 +30,11 @@ dependencies { // allows to get the default events testLibrary("com.amazonaws:aws-lambda-java-events:3.10.0") - testImplementation("com.fasterxml.jackson.core:jackson-databind") - testImplementation("commons-io:commons-io:2.2") - testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") testImplementation("io.opentelemetry:opentelemetry-extension-trace-propagators") testImplementation("com.google.guava:guava") - testImplementation(project(":instrumentation:aws-lambda-1.0:testing")) + testImplementation(project(":instrumentation:aws-lambda:aws-lambda-events-2.2:testing")) testImplementation("org.mockito:mockito-core") testImplementation("org.assertj:assertj-core") testImplementation("uk.org.webcompere:system-stubs-jupiter") diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/CustomJodaModule.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/CustomJodaModule.java similarity index 97% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/CustomJodaModule.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/CustomJodaModule.java index 723203c805..f983fb3ab2 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/CustomJodaModule.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/CustomJodaModule.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaParameters.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/LambdaParameters.java similarity index 93% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaParameters.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/LambdaParameters.java index ce95939703..ecc3a33d70 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaParameters.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/LambdaParameters.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import com.amazonaws.services.lambda.runtime.Context; import java.lang.reflect.Method; diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestApiGatewayWrapper.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestApiGatewayWrapper.java similarity index 84% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestApiGatewayWrapper.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestApiGatewayWrapper.java index 2dc543b680..00eb6e88e5 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestApiGatewayWrapper.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestApiGatewayWrapper.java @@ -3,18 +3,20 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; import com.fasterxml.jackson.core.JsonProcessingException; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; import io.opentelemetry.sdk.OpenTelemetrySdk; import java.util.function.BiFunction; /** - * Wrapper for {@link TracingRequestHandler}. Allows for wrapping a lambda proxied through API - * Gateway, enabling single span tracing and HTTP context propagation. + * Wrapper for {@link io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler}. + * Allows for wrapping a lambda proxied through API Gateway, enabling single span tracing and HTTP + * context propagation. */ public class TracingRequestApiGatewayWrapper extends TracingRequestWrapperBase { diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapper.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapper.java similarity index 70% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapper.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapper.java index 89030321c7..5cbeec41cf 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapper.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapper.java @@ -3,14 +3,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; import io.opentelemetry.sdk.OpenTelemetrySdk; import java.util.function.BiFunction; /** - * Wrapper for {@link TracingRequestHandler}. Allows for wrapping a regular lambda, not proxied - * through API Gateway. Therefore, HTTP headers propagation is not supported. + * Wrapper for {@link io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler}. + * Allows for wrapping a regular lambda, not proxied through API Gateway. Therefore, HTTP headers + * propagation is not supported. */ public class TracingRequestWrapper extends TracingRequestWrapperBase { public TracingRequestWrapper() { diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapperBase.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperBase.java similarity index 69% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapperBase.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperBase.java index 2b8ccb02be..058432f50f 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapperBase.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperBase.java @@ -3,15 +3,23 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.MapUtils; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrapperConfiguration; +import io.opentelemetry.instrumentation.awslambdaevents.v2_2.internal.AwsLambdaEventsInstrumenterFactory; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Collections; +import java.util.Map; import java.util.function.BiFunction; /** @@ -40,7 +48,10 @@ abstract class TracingRequestWrapperBase extends TracingRequestHandler, Object> parameterMapper) { - super(openTelemetrySdk, WrapperConfiguration.flushTimeout()); + super( + openTelemetrySdk, + WrapperConfiguration.flushTimeout(), + AwsLambdaEventsInstrumenterFactory.createInstrumenter(openTelemetrySdk)); this.wrappedLambda = wrappedLambda; this.targetMethod = wrappedLambda.getRequestTargetMethod(); this.parameterMapper = parameterMapper; @@ -62,4 +73,12 @@ abstract class TracingRequestWrapperBase extends TracingRequestHandler extractHttpHeaders(I input) { + if (input instanceof APIGatewayProxyRequestEvent) { + return MapUtils.emptyIfNull(((APIGatewayProxyRequestEvent) input).getHeaders()); + } + return Collections.emptyMap(); + } } diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingSqsEventHandler.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingSqsEventHandler.java similarity index 86% rename from instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingSqsEventHandler.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingSqsEventHandler.java index dc14b66f45..1ca7835c01 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingSqsEventHandler.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingSqsEventHandler.java @@ -3,14 +3,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.events.SQSEvent; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.awslambda.v1_0.internal.AwsLambdaFunctionInstrumenter; -import io.opentelemetry.instrumentation.awslambda.v1_0.internal.AwsLambdaSqsInstrumenterFactory; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler; +import io.opentelemetry.instrumentation.awslambdaevents.v2_2.internal.AwsLambdaSqsInstrumenterFactory; import io.opentelemetry.sdk.OpenTelemetrySdk; import java.time.Duration; @@ -39,7 +39,8 @@ public abstract class TracingSqsEventHandler extends TracingRequestHandler { private static final String AWS_TRACE_HEADER_SQS_ATTRIBUTE_KEY = "AWSTraceHeader"; diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaApiGatewayWrapperTest.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaApiGatewayWrapperTest.java similarity index 93% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaApiGatewayWrapperTest.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaApiGatewayWrapperTest.java index 26ab0b3c5c..157b681f18 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaApiGatewayWrapperTest.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaApiGatewayWrapperTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; @@ -14,6 +14,7 @@ import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; @@ -58,7 +59,7 @@ public class AwsLambdaApiGatewayWrapperTest { @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaApiGatewayWrapperTest$TestRequestHandlerApiGateway::handleRequest") + "io.opentelemetry.instrumentation.awslambdaevents.v2_2.AwsLambdaApiGatewayWrapperTest$TestRequestHandlerApiGateway::handleRequest") void tracedWithHttpPropagation() { TracingRequestApiGatewayWrapper wrapper = new TracingRequestApiGatewayWrapper( @@ -117,7 +118,7 @@ public class AwsLambdaApiGatewayWrapperTest { @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaApiGatewayWrapperTest$TestRequestHandlerApiGateway::handleRequest") + "io.opentelemetry.instrumentation.awslambdaevents.v2_2.AwsLambdaApiGatewayWrapperTest$TestRequestHandlerApiGateway::handleRequest") void handlerTraced_empty() { TracingRequestApiGatewayWrapper wrapper = new TracingRequestApiGatewayWrapper( @@ -151,7 +152,7 @@ public class AwsLambdaApiGatewayWrapperTest { @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaApiGatewayWrapperTest$TestRequestHandlerString::handleRequest") + "io.opentelemetry.instrumentation.awslambdaevents.v2_2.AwsLambdaApiGatewayWrapperTest$TestRequestHandlerString::handleRequest") void handlerTraced_string() { TracingRequestApiGatewayWrapper wrapper = new TracingRequestApiGatewayWrapper( @@ -185,7 +186,7 @@ public class AwsLambdaApiGatewayWrapperTest { @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaApiGatewayWrapperTest$TestRequestHandlerInteger::handleRequest") + "io.opentelemetry.instrumentation.awslambdaevents.v2_2.AwsLambdaApiGatewayWrapperTest$TestRequestHandlerInteger::handleRequest") void handlerTraced_integer() { TracingRequestApiGatewayWrapper wrapper = new TracingRequestApiGatewayWrapper( @@ -219,7 +220,7 @@ public class AwsLambdaApiGatewayWrapperTest { @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaApiGatewayWrapperTest$TestRequestHandlerCustomType::handleRequest") + "io.opentelemetry.instrumentation.awslambdaevents.v2_2.AwsLambdaApiGatewayWrapperTest$TestRequestHandlerCustomType::handleRequest") void handlerTraced_customType() { TracingRequestApiGatewayWrapper wrapper = new TracingRequestApiGatewayWrapper( diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaSqsEventHandlerTest.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsEventHandlerTest.java similarity index 95% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaSqsEventHandlerTest.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsEventHandlerTest.java index c5b4980cfa..8a6ccfa584 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaSqsEventHandlerTest.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsEventHandlerTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaSqsEventWrapperTest.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsEventWrapperTest.java similarity index 93% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaSqsEventWrapperTest.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsEventWrapperTest.java index 82ae6bc8b7..4ace5a0416 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaSqsEventWrapperTest.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsEventWrapperTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static org.assertj.core.api.Assertions.entry; @@ -13,6 +13,7 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SQSEvent; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; @@ -32,7 +33,7 @@ import org.mockito.junit.jupiter.MockitoExtension; @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaSqsEventWrapperTest$TestRequestHandler::handleRequest") + "io.opentelemetry.instrumentation.awslambdaevents.v2_2.AwsLambdaSqsEventWrapperTest$TestRequestHandler::handleRequest") public class AwsLambdaSqsEventWrapperTest { @RegisterExtension diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaSqsMessageHandlerTest.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMessageHandlerTest.java similarity index 99% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaSqsMessageHandlerTest.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMessageHandlerTest.java index 8be0e32ca1..8b6bc1a775 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaSqsMessageHandlerTest.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMessageHandlerTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static org.assertj.core.api.Assertions.entry; diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaWrapperTest.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaWrapperTest.java similarity index 92% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaWrapperTest.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaWrapperTest.java index 1f25568596..521ea23bf9 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaWrapperTest.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaWrapperTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -13,6 +13,7 @@ import static org.mockito.Mockito.when; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; @@ -53,7 +54,7 @@ public class AwsLambdaWrapperTest { @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaWrapperTest$TestRequestHandlerString::handleRequest") + "io.opentelemetry.instrumentation.awslambdaevents.v2_2.AwsLambdaWrapperTest$TestRequestHandlerString::handleRequest") void handlerTraced() { TracingRequestWrapper wrapper = new TracingRequestWrapper( @@ -84,7 +85,7 @@ public class AwsLambdaWrapperTest { @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaWrapperTest$TestRequestHandlerString::handleRequest") + "io.opentelemetry.instrumentation.awslambdaevents.v2_2.AwsLambdaWrapperTest$TestRequestHandlerString::handleRequest") void handlerTracedWithException() { TracingRequestWrapper wrapper = new TracingRequestWrapper( @@ -117,7 +118,7 @@ public class AwsLambdaWrapperTest { @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaWrapperTest$TestRequestHandlerInteger::handleRequest") + "io.opentelemetry.instrumentation.awslambdaevents.v2_2.AwsLambdaWrapperTest$TestRequestHandlerInteger::handleRequest") void handlerTraced_integer() { TracingRequestWrapper wrapper = new TracingRequestWrapper( @@ -148,7 +149,7 @@ public class AwsLambdaWrapperTest { @SetEnvironmentVariable( key = WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, value = - "io.opentelemetry.instrumentation.awslambda.v1_0.AwsLambdaWrapperTest$TestRequestHandlerCustomType::handleRequest") + "io.opentelemetry.instrumentation.awslambdaevents.v2_2.AwsLambdaWrapperTest$TestRequestHandlerCustomType::handleRequest") void handlerTraced_custom() { TracingRequestWrapper wrapper = new TracingRequestWrapper( diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaParametersTest.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/LambdaParametersTest.java similarity index 95% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaParametersTest.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/LambdaParametersTest.java index ab12e2caf7..2bf8357f43 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaParametersTest.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/LambdaParametersTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; diff --git a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapperStandardEventsTest.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperStandardEventsTest.java similarity index 98% rename from instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapperStandardEventsTest.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperStandardEventsTest.java index 2eee8771da..620d084a1b 100644 --- a/instrumentation/aws-lambda-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapperStandardEventsTest.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperStandardEventsTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; @@ -17,6 +17,7 @@ import com.amazonaws.services.lambda.runtime.events.SQSEvent; import com.amazonaws.services.lambda.runtime.events.ScheduledEvent; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; import io.opentelemetry.sdk.OpenTelemetrySdk; import java.util.HashMap; import java.util.Map; diff --git a/instrumentation/aws-lambda-1.0/testing/build.gradle.kts b/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/build.gradle.kts similarity index 100% rename from instrumentation/aws-lambda-1.0/testing/build.gradle.kts rename to instrumentation/aws-lambda/aws-lambda-events-2.2/testing/build.gradle.kts diff --git a/instrumentation/aws-lambda-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AbstractAwsLambdaSqsEventHandlerTest.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AbstractAwsLambdaSqsEventHandlerTest.java similarity index 99% rename from instrumentation/aws-lambda-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AbstractAwsLambdaSqsEventHandlerTest.java rename to instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AbstractAwsLambdaSqsEventHandlerTest.java index ac01c763b7..4811c5672c 100644 --- a/instrumentation/aws-lambda-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AbstractAwsLambdaSqsEventHandlerTest.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AbstractAwsLambdaSqsEventHandlerTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.awslambda.v1_0; +package io.opentelemetry.instrumentation.awslambdaevents.v2_2; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static org.assertj.core.api.Assertions.entry; diff --git a/settings.gradle.kts b/settings.gradle.kts index 6966ce8671..049eb47fd8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -135,9 +135,12 @@ include(":instrumentation:armeria-1.3:library") include(":instrumentation:armeria-1.3:testing") include(":instrumentation:async-http-client:async-http-client-1.9:javaagent") include(":instrumentation:async-http-client:async-http-client-2.0:javaagent") -include(":instrumentation:aws-lambda-1.0:javaagent") -include(":instrumentation:aws-lambda-1.0:library") -include(":instrumentation:aws-lambda-1.0:testing") +include(":instrumentation:aws-lambda:aws-lambda-core-1.0:javaagent") +include(":instrumentation:aws-lambda:aws-lambda-core-1.0:library") +include(":instrumentation:aws-lambda:aws-lambda-core-1.0:testing") +include(":instrumentation:aws-lambda:aws-lambda-events-2.2:javaagent") +include(":instrumentation:aws-lambda:aws-lambda-events-2.2:library") +include(":instrumentation:aws-lambda:aws-lambda-events-2.2:testing") include(":instrumentation:aws-sdk:aws-sdk-1.11:javaagent") include(":instrumentation:aws-sdk:aws-sdk-1.11:javaagent-unit-tests") include(":instrumentation:aws-sdk:aws-sdk-1.11:library")