From 65675397d93570b485b6b7e6e8e82af1e468c607 Mon Sep 17 00:00:00 2001 From: Pankaj Agrawal Date: Tue, 3 Nov 2020 09:54:51 +0100 Subject: [PATCH 1/5] Rename annotations and helpers for tracing module --- docs/content/core/tracing.mdx | 26 +++++++++---------- .../src/main/java/helloworld/App.java | 18 ++++++------- .../{PowertoolsTracing.java => Tracing.java} | 18 ++++++------- .../{PowerTracer.java => TracingUtils.java} | 8 +++--- .../tracing/internal/LambdaTracingAspect.java | 22 ++++++++-------- ...rTracerTest.java => TracingUtilsTest.java} | 17 ++++++------ .../handlers/PowerTracerToolEnabled.java | 4 +-- .../PowerTracerToolEnabledForStream.java | 4 +-- ...cerToolEnabledForStreamWithNoMetaData.java | 4 +-- .../PowerTracerToolEnabledWithException.java | 4 +-- .../PowerTracerToolEnabledWithNoMetaData.java | 4 +-- 11 files changed, 64 insertions(+), 65 deletions(-) rename powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/{PowertoolsTracing.java => Tracing.java} (67%) rename powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/{PowerTracer.java => TracingUtils.java} (97%) rename powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/{PowerTracerTest.java => TracingUtilsTest.java} (92%) diff --git a/docs/content/core/tracing.mdx b/docs/content/core/tracing.mdx index a8a108e77..0e17bbc16 100644 --- a/docs/content/core/tracing.mdx +++ b/docs/content/core/tracing.mdx @@ -36,25 +36,25 @@ Resources: The Powertools service name is used as the X-Ray namespace. This can be set using the environment variable `POWERTOOLS_SERVICE_NAME` -To enable Powertools tracing to your function add the @PowertoolsTracing annotation to your handleRequest method or on +To enable Powertools tracing to your function add the @Tracing annotation to your handleRequest method or on any method will capture the method as a separate subsegment automatically. ```java:title=LambdaHandler.java public class App implements RequestHandler { - @PowertoolsTracing + @Tracing public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { businessLogic1(); businessLogic2(); } - @PowertoolsTracing + @Tracing public void businessLogic1(){ } - @PowertoolsTracing + @Tracing public void businessLogic2(){ } @@ -72,7 +72,7 @@ By default this annotation will automatically record method responses and except ```java:title=HandlerWithoutCapturingResponseOrError.java public class App implements RequestHandler { - @PowertoolsTracing(captureError = false, captureResponse = false) + @Tracing(captureError = false, captureResponse = false) public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { ... } @@ -82,14 +82,14 @@ public class App implements RequestHandler { - @PowertoolsTracing + @Tracing public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { - PowerTracer.putAnnotation("annotation", "value"); + TracingUtils.putAnnotation("annotation", "value"); } } ``` @@ -98,14 +98,14 @@ public class App implements RequestHandler { - @PowertoolsTracing + @Tracing public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { - PowerTracer.putMetadata("content", "value"); + TracingUtils.putMetadata("content", "value"); } } ``` @@ -119,11 +119,11 @@ under a subsegment, or you are doing multithreaded programming. Refer examples b public class App implements RequestHandler { public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { - PowerTracer.withSubsegment("loggingResponse", subsegment -> { + TracingUtils.withSubsegment("loggingResponse", subsegment -> { // Some business logic }); - PowerTracer.withSubsegment("localNamespace", "loggingResponse", subsegment -> { + TracingUtils.withSubsegment("localNamespace", "loggingResponse", subsegment -> { // Some business logic }); } diff --git a/example/HelloWorldFunction/src/main/java/helloworld/App.java b/example/HelloWorldFunction/src/main/java/helloworld/App.java index 2444a0cb6..d2fcee86d 100644 --- a/example/HelloWorldFunction/src/main/java/helloworld/App.java +++ b/example/HelloWorldFunction/src/main/java/helloworld/App.java @@ -21,13 +21,13 @@ import software.amazon.lambda.powertools.logging.PowertoolsLogger; import software.amazon.lambda.powertools.logging.PowertoolsLogging; import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; -import software.amazon.lambda.powertools.tracing.PowerTracer; -import software.amazon.lambda.powertools.tracing.PowertoolsTracing; +import software.amazon.lambda.powertools.tracing.TracingUtils; +import software.amazon.lambda.powertools.tracing.Tracing; import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.metricsLogger; import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.withSingleMetric; -import static software.amazon.lambda.powertools.tracing.PowerTracer.putMetadata; -import static software.amazon.lambda.powertools.tracing.PowerTracer.withEntitySubsegment; +import static software.amazon.lambda.powertools.tracing.TracingUtils.putMetadata; +import static software.amazon.lambda.powertools.tracing.TracingUtils.withEntitySubsegment; /** * Handler for requests to Lambda function. @@ -37,7 +37,7 @@ public class App implements RequestHandler headers = new HashMap<>(); @@ -59,10 +59,10 @@ public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEv try { final String pageContents = this.getPageContents("https://checkip.amazonaws.com"); log.info(pageContents); - PowerTracer.putAnnotation("Test", "New"); + TracingUtils.putAnnotation("Test", "New"); String output = String.format("{ \"message\": \"hello world\", \"location\": \"%s\" }", pageContents); - PowerTracer.withSubsegment("loggingResponse", subsegment -> { + TracingUtils.withSubsegment("loggingResponse", subsegment -> { String sampled = "log something out"; log.info(sampled); log.info(output); @@ -103,13 +103,13 @@ private void threadOption2() throws InterruptedException { anotherThread.join(); } - @PowertoolsTracing + @Tracing private void log() { log.info("inside threaded logging for function"); } - @PowertoolsTracing(namespace = "getPageContents", captureResponse = false, captureError = false) + @Tracing(namespace = "getPageContents", captureResponse = false, captureError = false) private String getPageContents(String address) throws IOException { URL url = new URL(address); putMetadata("getPageContents", address); diff --git a/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/PowertoolsTracing.java b/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/Tracing.java similarity index 67% rename from powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/PowertoolsTracing.java rename to powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/Tracing.java index 82b6169e7..d5817e638 100644 --- a/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/PowertoolsTracing.java +++ b/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/Tracing.java @@ -19,34 +19,34 @@ import java.lang.annotation.Target; /** - * {@code PowertoolsTracing} is used to signal that the annotated method should + * {@code Tracing} is used to signal that the annotated method should * be extended with the Powertools tracing functionality. * - *

{@code PowertoolsTracing} provides functionality to reduce the overhead + *

{@code Tracing} provides functionality to reduce the overhead * of performing common tracing tasks.

* - *

{@code PowertoolsTracing} should be used with the handleRequest method of a class + *

{@code Tracing} should be used with the handleRequest method of a class * which implements either * {@code com.amazonaws.services.lambda.runtime.RequestHandler} or * {@code com.amazonaws.services.lambda.runtime.RequestStreamHandler}.

* - *

By default {@code PowertoolsTracing} will capture responses and add them + *

By default {@code Tracing} will capture responses and add them * to a sub segment named after the method.

* - *

To disable this functionality you can specify {@code @PowertoolsTracing( captureResponse = false)}

+ *

To disable this functionality you can specify {@code @Tracing( captureResponse = false)}

* - *

By default {@code PowertoolsTracing} will capture errors and add them + *

By default {@code Tracing} will capture errors and add them * to a sub segment named after the method.

* - *

To disable this functionality you can specify {@code @PowertoolsTracing( captureError = false)}

+ *

To disable this functionality you can specify {@code @Tracing( captureError = false)}

*e - *

All traces have a namespace set. If {@code @PowertoolsTracing( namespace = "ExampleService")} is set + *

All traces have a namespace set. If {@code @Tracing( namespace = "ExampleService")} is set * this takes precedent over any value set in the environment variable {@code POWER_TOOLS_SERVICE_NAME}. * If both are undefined then the value will default to {@code service_undefined}

*/ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) -public @interface PowertoolsTracing { +public @interface Tracing { String namespace() default ""; boolean captureResponse() default true; boolean captureError() default true; diff --git a/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/PowerTracer.java b/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/TracingUtils.java similarity index 97% rename from powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/PowerTracer.java rename to powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/TracingUtils.java index 24f593ccc..51bcddce1 100644 --- a/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/PowerTracer.java +++ b/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/TracingUtils.java @@ -26,7 +26,7 @@ * of use. * */ -public final class PowerTracer { +public final class TracingUtils { /** * Put an annotation to the current subsegment. @@ -44,7 +44,7 @@ public static void putAnnotation(String key, String value) { * * The namespace used will be the namespace of the current subsegment if it * is set else it will follow the namespace process as described in - * {@link PowertoolsTracing} + * {@link Tracing} * * @param key the key of the metadata * @param value the value of the metadata @@ -72,7 +72,7 @@ public static void putMetadata(String namespace, String key, Object value) { * Adds a new subsegment around the passed consumer. This also provides access to * the newly created subsegment. * - * The namespace used follows the flow as described in {@link PowertoolsTracing} + * The namespace used follows the flow as described in {@link Tracing} * * This method is intended for use with multi-threaded programming where the * context is lost between threads. @@ -107,7 +107,7 @@ public static void withEntitySubsegment(String namespace, String name, Entity en * Adds a new subsegment around the passed consumer. This also provides access to * the newly created subsegment. * - * The namespace used follows the flow as described in {@link PowertoolsTracing} + * The namespace used follows the flow as described in {@link Tracing} * * @param name the name of the subsegment * @param subsegment the x-ray subsegment for the wrapped consumer diff --git a/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/internal/LambdaTracingAspect.java b/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/internal/LambdaTracingAspect.java index 54ef9a824..9aafa0a94 100644 --- a/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/internal/LambdaTracingAspect.java +++ b/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/internal/LambdaTracingAspect.java @@ -19,7 +19,7 @@ import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; -import software.amazon.lambda.powertools.tracing.PowertoolsTracing; +import software.amazon.lambda.powertools.tracing.Tracing; import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.coldStartDone; import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.isColdStart; @@ -32,17 +32,17 @@ public final class LambdaTracingAspect { @SuppressWarnings({"EmptyMethod"}) - @Pointcut("@annotation(powerToolsTracing)") - public void callAt(PowertoolsTracing powerToolsTracing) { + @Pointcut("@annotation(tracing)") + public void callAt(Tracing tracing) { } - @Around(value = "callAt(powerToolsTracing) && execution(@PowertoolsTracing * *.*(..))", argNames = "pjp,powerToolsTracing") + @Around(value = "callAt(tracing) && execution(@Tracing * *.*(..))", argNames = "pjp,tracing") public Object around(ProceedingJoinPoint pjp, - PowertoolsTracing powerToolsTracing) throws Throwable { + Tracing tracing) throws Throwable { Object[] proceedArgs = pjp.getArgs(); Subsegment segment = AWSXRay.beginSubsegment("## " + pjp.getSignature().getName()); - segment.setNamespace(namespace(powerToolsTracing)); + segment.setNamespace(namespace(tracing)); if (placedOnHandlerMethod(pjp)) { segment.putAnnotation("ColdStart", isColdStart()); @@ -50,15 +50,15 @@ public Object around(ProceedingJoinPoint pjp, try { Object methodReturn = pjp.proceed(proceedArgs); - if (powerToolsTracing.captureResponse()) { - segment.putMetadata(namespace(powerToolsTracing), pjp.getSignature().getName() + " response", methodReturn); + if (tracing.captureResponse()) { + segment.putMetadata(namespace(tracing), pjp.getSignature().getName() + " response", methodReturn); } coldStartDone(); return methodReturn; } catch (Exception e) { - if (powerToolsTracing.captureError()) { - segment.putMetadata(namespace(powerToolsTracing), pjp.getSignature().getName() + " error", e); + if (tracing.captureError()) { + segment.putMetadata(namespace(tracing), pjp.getSignature().getName() + " error", e); } throw e; } finally { @@ -66,7 +66,7 @@ public Object around(ProceedingJoinPoint pjp, } } - private String namespace(PowertoolsTracing powerToolsTracing) { + private String namespace(Tracing powerToolsTracing) { return powerToolsTracing.namespace().isEmpty() ? serviceName() : powerToolsTracing.namespace(); } diff --git a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/PowerTracerTest.java b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/TracingUtilsTest.java similarity index 92% rename from powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/PowerTracerTest.java rename to powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/TracingUtilsTest.java index 1386b0a1d..2c65c90f1 100644 --- a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/PowerTracerTest.java +++ b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/TracingUtilsTest.java @@ -19,14 +19,13 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import software.amazon.lambda.powertools.tracing.PowerTracer; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static software.amazon.lambda.powertools.tracing.PowerTracer.withEntitySubsegment; +import static software.amazon.lambda.powertools.tracing.TracingUtils.withEntitySubsegment; -class PowerTracerTest { +class TracingUtilsTest { @BeforeEach void setUp() { @@ -46,7 +45,7 @@ void tearDown() { void shouldSetAnnotationOnCurrentSubSegment() { AWSXRay.beginSubsegment("subSegment"); - PowerTracer.putAnnotation("key", "val"); + TracingUtils.putAnnotation("key", "val"); assertThat(AWSXRay.getTraceEntity().getAnnotations()) .hasSize(1) @@ -55,7 +54,7 @@ void shouldSetAnnotationOnCurrentSubSegment() { @Test void shouldNotSetAnnotationIfNoCurrentSubSegment() { - PowerTracer.putAnnotation("key", "val"); + TracingUtils.putAnnotation("key", "val"); assertThat(AWSXRay.getTraceEntity().getAnnotations()) .isEmpty(); @@ -65,7 +64,7 @@ void shouldNotSetAnnotationIfNoCurrentSubSegment() { void shouldSetMetadataOnCurrentSubSegment() { AWSXRay.beginSubsegment("subSegment"); - PowerTracer.putMetadata("key", "val"); + TracingUtils.putMetadata("key", "val"); assertThat(AWSXRay.getTraceEntity().getMetadata()) .hasSize(1) @@ -78,7 +77,7 @@ void shouldSetMetadataOnCurrentSubSegment() { @Test void shouldNotSetMetaDataIfNoCurrentSubSegment() { - PowerTracer.putMetadata("key", "val"); + TracingUtils.putMetadata("key", "val"); assertThat(AWSXRay.getTraceEntity().getAnnotations()) .isEmpty(); @@ -88,7 +87,7 @@ void shouldNotSetMetaDataIfNoCurrentSubSegment() { void shouldInvokeCodeBlockWrappedWithinSubsegment() { Context test = mock(Context.class); - PowerTracer.withSubsegment("testSubSegment", subsegment -> { + TracingUtils.withSubsegment("testSubSegment", subsegment -> { subsegment.putAnnotation("key", "val"); subsegment.putMetadata("key", "val"); test.getFunctionName(); @@ -118,7 +117,7 @@ void shouldInvokeCodeBlockWrappedWithinSubsegment() { void shouldInvokeCodeBlockWrappedWithinNamespacedSubsegment() { Context test = mock(Context.class); - PowerTracer.withSubsegment("testNamespace", "testSubSegment", subsegment -> { + TracingUtils.withSubsegment("testNamespace", "testSubSegment", subsegment -> { subsegment.putAnnotation("key", "val"); subsegment.putMetadata("key", "val"); test.getFunctionName(); diff --git a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabled.java b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabled.java index 3c2b58820..3be79fb76 100644 --- a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabled.java +++ b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabled.java @@ -15,12 +15,12 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import software.amazon.lambda.powertools.tracing.PowertoolsTracing; +import software.amazon.lambda.powertools.tracing.Tracing; public class PowerTracerToolEnabled implements RequestHandler { @Override - @PowertoolsTracing(namespace = "lambdaHandler") + @Tracing(namespace = "lambdaHandler") public Object handleRequest(Object input, Context context) { return null; } diff --git a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledForStream.java b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledForStream.java index 3fc12485e..e316ffe7d 100644 --- a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledForStream.java +++ b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledForStream.java @@ -15,7 +15,7 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; -import software.amazon.lambda.powertools.tracing.PowertoolsTracing; +import software.amazon.lambda.powertools.tracing.Tracing; import java.io.InputStream; import java.io.OutputStream; @@ -23,7 +23,7 @@ public class PowerTracerToolEnabledForStream implements RequestStreamHandler { @Override - @PowertoolsTracing(namespace = "streamHandler") + @Tracing(namespace = "streamHandler") public void handleRequest(InputStream input, OutputStream output, Context context) { } diff --git a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledForStreamWithNoMetaData.java b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledForStreamWithNoMetaData.java index 802268a35..86fe22c6f 100644 --- a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledForStreamWithNoMetaData.java +++ b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledForStreamWithNoMetaData.java @@ -15,7 +15,7 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; -import software.amazon.lambda.powertools.tracing.PowertoolsTracing; +import software.amazon.lambda.powertools.tracing.Tracing; import java.io.InputStream; import java.io.OutputStream; @@ -23,7 +23,7 @@ public class PowerTracerToolEnabledForStreamWithNoMetaData implements RequestStreamHandler { @Override - @PowertoolsTracing(captureResponse = false, captureError = false) + @Tracing(captureResponse = false, captureError = false) public void handleRequest(InputStream input, OutputStream output, Context context) { } diff --git a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledWithException.java b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledWithException.java index 1b34e8bdc..cc184d020 100644 --- a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledWithException.java +++ b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledWithException.java @@ -15,12 +15,12 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import software.amazon.lambda.powertools.tracing.PowertoolsTracing; +import software.amazon.lambda.powertools.tracing.Tracing; public class PowerTracerToolEnabledWithException implements RequestHandler { @Override - @PowertoolsTracing(namespace = "lambdaHandler") + @Tracing(namespace = "lambdaHandler") public Object handleRequest(Object input, Context context) { throw new RuntimeException("I am failing!"); } diff --git a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledWithNoMetaData.java b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledWithNoMetaData.java index 925fb0e30..5751b4843 100644 --- a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledWithNoMetaData.java +++ b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/handlers/PowerTracerToolEnabledWithNoMetaData.java @@ -15,12 +15,12 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import software.amazon.lambda.powertools.tracing.PowertoolsTracing; +import software.amazon.lambda.powertools.tracing.Tracing; public class PowerTracerToolEnabledWithNoMetaData implements RequestHandler { @Override - @PowertoolsTracing(captureResponse = false, captureError = false) + @Tracing(captureResponse = false, captureError = false) public Object handleRequest(Object input, Context context) { return null; } From d63afa7a3bf2577212087d635461f4537335e00b Mon Sep 17 00:00:00 2001 From: Pankaj Agrawal Date: Tue, 3 Nov 2020 14:09:03 +0100 Subject: [PATCH 2/5] Rename annotations and helpers for metrics module --- docs/content/core/metrics.mdx | 28 ++++++------- .../src/main/java/helloworld/App.java | 8 ++-- .../src/main/java/helloworld/AppStream.java | 4 +- .../emf/model/MetricsLoggerHelper.java | 2 +- .../{PowertoolsMetrics.java => Metrics.java} | 22 +++++----- ...lsMetricsLogger.java => MetricsUtils.java} | 12 +++--- .../metrics/internal/LambdaMetricsAspect.java | 42 +++++++++---------- ...LoggerTest.java => MetricsLoggerTest.java} | 5 +-- ...ertoolsMetricsColdStartEnabledHandler.java | 6 +-- .../PowertoolsMetricsEnabledHandler.java | 6 +-- ...PowertoolsMetricsEnabledStreamHandler.java | 7 ++-- ...sMetricsExceptionWhenNoMetricsHandler.java | 6 +-- .../PowertoolsMetricsNoDimensionsHandler.java | 11 ++--- ...etricsNoExceptionWhenNoMetricsHandler.java | 6 +-- ...rtoolsMetricsTooManyDimensionsHandler.java | 8 ++-- 15 files changed, 82 insertions(+), 91 deletions(-) rename powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/{PowertoolsMetrics.java => Metrics.java} (71%) rename powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/{PowertoolsMetricsLogger.java => MetricsUtils.java} (86%) rename powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/{PowertoolsMetricsLoggerTest.java => MetricsLoggerTest.java} (93%) diff --git a/docs/content/core/metrics.mdx b/docs/content/core/metrics.mdx index f9f33078a..e0ad09e56 100644 --- a/docs/content/core/metrics.mdx +++ b/docs/content/core/metrics.mdx @@ -44,15 +44,15 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger; import software.amazon.cloudwatchlogs.emf.model.Unit; -import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; -import software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger; +import software.amazon.lambda.powertools.metrics.Metrics; +import software.amazon.lambda.powertools.metrics.MetricsUtils; -public class PowertoolsMetricsEnabledHandler implements RequestHandler { +public class MetricsEnabledHandler implements RequestHandler { - MetricsLogger metricsLogger = PowertoolsMetricsLogger.metricsLogger(); + MetricsLogger metricsLogger = MetricsUtils.metricsLogger(); @Override - @PowertoolsMetrics(namespace = "ExampleApplication", service = "booking") + @Metrics(namespace = "ExampleApplication", service = "booking") public Object handleRequest(Object input, Context context) { ... } @@ -66,12 +66,12 @@ You can initialize Metrics anywhere in your code as many times as you need - It' You can create metrics using `putMetric`, and manually create dimensions for all your aggregate metrics using `add_dimension`. ```java:title=Handler.java -public class PowertoolsMetricsEnabledHandler implements RequestHandler { +public class MetricsEnabledHandler implements RequestHandler { - MetricsLogger metricsLogger = PowertoolsMetricsLogger.metricsLogger(); + MetricsLogger metricsLogger = MetricsUtils.metricsLogger(); @Override - @PowertoolsMetrics(namespace = "ExampleApplication", service = "booking") + @Metrics(namespace = "ExampleApplication", service = "booking") public Object handleRequest(Object input, Context context) { // highlight-start metricsLogger.putDimensions(DimensionSet.of("environment", "prod")); @@ -111,7 +111,7 @@ You can use `putMetadata` for advanced use cases, where you want to metadata as
```java:title=Handler.java -@PowertoolsMetrics(namespace = "ServerlessAirline", service = "payment") +@Metrics(namespace = "ServerlessAirline", service = "payment") public APIGatewayProxyResponseEvent handleRequest(Object input, Context context) { metricsLogger().putMetric("CustomMetric1", 1, Unit.COUNT); metricsLogger().putMetadata("booking_id", "1234567890"); // highlight-line @@ -121,17 +121,17 @@ public APIGatewayProxyResponseEvent handleRequest(Object input, Context context) This will be available in CloudWatch Logs to ease operations on high cardinal data. -The `@PowertoolsMetrics` annotation **validates**, **serializes**, and **flushes** all your metrics. During metrics validation, if no metrics are provided no exception will be raised. +The `@Metrics` annotation **validates**, **serializes**, and **flushes** all your metrics. During metrics validation, if no metrics are provided no exception will be raised. If metrics are provided, and any of the following criteria are not met, `ValidationException` exception will be raised: * Minimum of 1 dimension * Maximum of 9 dimensions -If you want to ensure that at least one metric is emitted, you can pass `raiseOnEmptyMetrics = true` to the **@PowertoolsMetrics** annotation: +If you want to ensure that at least one metric is emitted, you can pass `raiseOnEmptyMetrics = true` to the **@Metrics** annotation: ```java:title=Handler.java -@PowertoolsMetrics(raiseOnEmptyMetrics = true) +@Metrics(raiseOnEmptyMetrics = true) public Object handleRequest(Object input, Context context) { ... } @@ -139,10 +139,10 @@ public Object handleRequest(Object input, Context context) { ## Capturing cold start metric -You can capture cold start metrics automatically with `@PowertoolsMetrics` via the `captureColdStart` variable. +You can capture cold start metrics automatically with `@Metrics` via the `captureColdStart` variable. ```java:title=Handler.java -@PowertoolsMetrics(captureColdStart = true) +@Metrics(captureColdStart = true) public Object handleRequest(Object input, Context context) { ... } diff --git a/example/HelloWorldFunction/src/main/java/helloworld/App.java b/example/HelloWorldFunction/src/main/java/helloworld/App.java index d2fcee86d..94ddde69b 100644 --- a/example/HelloWorldFunction/src/main/java/helloworld/App.java +++ b/example/HelloWorldFunction/src/main/java/helloworld/App.java @@ -20,12 +20,12 @@ import software.amazon.cloudwatchlogs.emf.model.Unit; import software.amazon.lambda.powertools.logging.PowertoolsLogger; import software.amazon.lambda.powertools.logging.PowertoolsLogging; -import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; +import software.amazon.lambda.powertools.metrics.Metrics; import software.amazon.lambda.powertools.tracing.TracingUtils; import software.amazon.lambda.powertools.tracing.Tracing; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.metricsLogger; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.withSingleMetric; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.withSingleMetric; import static software.amazon.lambda.powertools.tracing.TracingUtils.putMetadata; import static software.amazon.lambda.powertools.tracing.TracingUtils.withEntitySubsegment; @@ -38,7 +38,7 @@ public class App implements RequestHandler headers = new HashMap<>(); diff --git a/example/HelloWorldFunction/src/main/java/helloworld/AppStream.java b/example/HelloWorldFunction/src/main/java/helloworld/AppStream.java index 993da1e6d..87a747520 100644 --- a/example/HelloWorldFunction/src/main/java/helloworld/AppStream.java +++ b/example/HelloWorldFunction/src/main/java/helloworld/AppStream.java @@ -9,14 +9,14 @@ import com.amazonaws.services.lambda.runtime.RequestStreamHandler; import com.fasterxml.jackson.databind.ObjectMapper; import software.amazon.lambda.powertools.logging.PowertoolsLogging; -import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; +import software.amazon.lambda.powertools.metrics.Metrics; public class AppStream implements RequestStreamHandler { private static final ObjectMapper mapper = new ObjectMapper(); @Override @PowertoolsLogging(logEvent = true) - @PowertoolsMetrics(namespace = "ServerlessAirline", service = "payment", captureColdStart = true) + @Metrics(namespace = "ServerlessAirline", service = "payment", captureColdStart = true) public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException { Map map = mapper.readValue(input, Map.class); diff --git a/powertools-metrics/src/main/java/software/amazon/cloudwatchlogs/emf/model/MetricsLoggerHelper.java b/powertools-metrics/src/main/java/software/amazon/cloudwatchlogs/emf/model/MetricsLoggerHelper.java index 4c94b50f8..348f489da 100644 --- a/powertools-metrics/src/main/java/software/amazon/cloudwatchlogs/emf/model/MetricsLoggerHelper.java +++ b/powertools-metrics/src/main/java/software/amazon/cloudwatchlogs/emf/model/MetricsLoggerHelper.java @@ -2,7 +2,7 @@ import java.lang.reflect.Field; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.metricsLogger; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger; public final class MetricsLoggerHelper { private MetricsLoggerHelper() { diff --git a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/PowertoolsMetrics.java b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/Metrics.java similarity index 71% rename from powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/PowertoolsMetrics.java rename to powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/Metrics.java index fa3cd9256..2a4f4d472 100644 --- a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/PowertoolsMetrics.java +++ b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/Metrics.java @@ -6,43 +6,43 @@ import java.lang.annotation.Target; /** - * {@code PowertoolsMetrics} is used to signal that the annotated method should be - * extended with PowertoolsMetrics functionality. + * {@code Metrics} is used to signal that the annotated method should be + * extended with Metrics functionality. * - *

{@code PowertoolsMetrics} allows users to asynchronously create Amazon + *

{@code Metrics} allows users to asynchronously create Amazon * CloudWatch metrics by using the CloudWatch Embedded Metrics Format. - * {@code PowertoolsMetrics} manages the life-cycle of the MetricsLogger class, + * {@code Metrics} manages the life-cycle of the MetricsLogger class, * to simplify the user experience when used with AWS Lambda. * - *

{@code PowertoolsMetrics} should be used with the handleRequest method of a class + *

{@code Metrics} should be used with the handleRequest method of a class * which implements either * {@code com.amazonaws.services.lambda.runtime.RequestHandler} or * {@code com.amazonaws.services.lambda.runtime.RequestStreamHandler}.

* - *

{@code PowertoolsMetrics} creates Amazon CloudWatch custom metrics. You can find + *

{@code Metrics} creates Amazon CloudWatch custom metrics. You can find * pricing information on the CloudWatch pricing documentation page.

* - *

To enable creation of custom metrics for cold starts you can add {@code @PowertoolsMetrics(captureColdStart = true)}. + *

To enable creation of custom metrics for cold starts you can add {@code @Metrics(captureColdStart = true)}. *
This will create a metric with the key {@code "ColdStart"} and the unit type {@code COUNT}. *

* - *

To raise exception if no metrics are emitted, use {@code @PowertoolsMetrics(raiseOnEmptyMetrics = true)}. + *

To raise exception if no metrics are emitted, use {@code @Metrics(raiseOnEmptyMetrics = true)}. *
This will create a create a exception of type {@link ValidationException}. By default its value is set to false. *

* *

By default the service name associated with metrics created will be * "service_undefined". This can be overridden with the environment variable {@code POWERTOOLS_SERVICE_NAME} - * or the annotation variable {@code @PowertoolsMetrics(service = "Service Name")}. + * or the annotation variable {@code @Metrics(service = "Service Name")}. * If both are specified then the value of the annotation variable will be used.

* *

By default the namespace associated with metrics created will be "aws-embedded-metrics". * This can be overridden with the environment variable {@code POWERTOOLS_METRICS_NAMESPACE} - * or the annotation variable {@code @PowertoolsMetrics(namespace = "Namespace")}. + * or the annotation variable {@code @Metrics(namespace = "Namespace")}. * If both are specified then the value of the annotation variable will be used.

*/ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) -public @interface PowertoolsMetrics { +public @interface Metrics { String namespace() default ""; String service() default ""; boolean captureColdStart() default false; diff --git a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/PowertoolsMetricsLogger.java b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsUtils.java similarity index 86% rename from powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/PowertoolsMetricsLogger.java rename to powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsUtils.java index 8430e83f2..e787ff588 100644 --- a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/PowertoolsMetricsLogger.java +++ b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsUtils.java @@ -7,20 +7,20 @@ /** * A class used to retrieve the instance of the {@code MetricsLogger} used by - * {@code PowertoolsMetrics}. + * {@code Metrics}. * - * {@see PowertoolsMetrics} + * {@see Metrics} */ -public final class PowertoolsMetricsLogger { +public final class MetricsUtils { private static final MetricsLogger metricsLogger = new MetricsLogger(); - private PowertoolsMetricsLogger() { + private MetricsUtils() { } /** - * The instance of the {@code MetricsLogger} used by {@code PowertoolsMetrics}. + * The instance of the {@code MetricsLogger} used by {@code Metrics}. * - * @return The instance of the MetricsLogger used by PowertoolsMetrics. + * @return The instance of the MetricsLogger used by Metrics. */ public static MetricsLogger metricsLogger() { return metricsLogger; diff --git a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspect.java b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspect.java index df9af97c9..8e1443d54 100644 --- a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspect.java +++ b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspect.java @@ -12,7 +12,7 @@ import software.amazon.cloudwatchlogs.emf.model.DimensionSet; import software.amazon.cloudwatchlogs.emf.model.MetricsContext; import software.amazon.cloudwatchlogs.emf.model.Unit; -import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; +import software.amazon.lambda.powertools.metrics.Metrics; import software.amazon.lambda.powertools.metrics.ValidationException; import static software.amazon.cloudwatchlogs.emf.model.MetricsLoggerHelper.dimensionsCount; @@ -24,21 +24,21 @@ import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.placedOnRequestHandler; import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.placedOnStreamHandler; import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.serviceName; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.metricsLogger; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.withSingleMetric; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.withSingleMetric; @Aspect public class LambdaMetricsAspect { private static final String NAMESPACE = System.getenv("POWERTOOLS_METRICS_NAMESPACE"); @SuppressWarnings({"EmptyMethod"}) - @Pointcut("@annotation(powertoolsMetrics)") - public void callAt(PowertoolsMetrics powertoolsMetrics) { + @Pointcut("@annotation(metrics)") + public void callAt(Metrics metrics) { } - @Around(value = "callAt(powertoolsMetrics) && execution(@PowertoolsMetrics * *.*(..))", argNames = "pjp,powertoolsMetrics") + @Around(value = "callAt(metrics) && execution(@Metrics * *.*(..))", argNames = "pjp,metrics") public Object around(ProceedingJoinPoint pjp, - PowertoolsMetrics powertoolsMetrics) throws Throwable { + Metrics metrics) throws Throwable { Object[] proceedArgs = pjp.getArgs(); if (isHandlerMethod(pjp) @@ -47,17 +47,17 @@ public Object around(ProceedingJoinPoint pjp, MetricsLogger logger = metricsLogger(); - logger.setNamespace(namespace(powertoolsMetrics)) - .putDimensions(DimensionSet.of("Service", service(powertoolsMetrics))); + logger.setNamespace(namespace(metrics)) + .putDimensions(DimensionSet.of("Service", service(metrics))); - coldStartSingleMetricIfApplicable(pjp, powertoolsMetrics); + coldStartSingleMetricIfApplicable(pjp, metrics); try { Object proceed = pjp.proceed(proceedArgs); coldStartDone(); - validateBeforeFlushingMetrics(powertoolsMetrics); + validateBeforeFlushingMetrics(metrics); logger.flush(); return proceed; @@ -71,8 +71,8 @@ public Object around(ProceedingJoinPoint pjp, } private void coldStartSingleMetricIfApplicable(final ProceedingJoinPoint pjp, - final PowertoolsMetrics powertoolsMetrics) { - if (powertoolsMetrics.captureColdStart() + final Metrics metrics) { + if (metrics.captureColdStart() && isColdStart()) { Optional contextOptional = extractContext(pjp); @@ -80,14 +80,14 @@ && isColdStart()) { if (contextOptional.isPresent()) { Context context = contextOptional.orElseThrow(() -> new IllegalStateException("Context not found")); - withSingleMetric("ColdStart", 1, Unit.COUNT, namespace(powertoolsMetrics), (logger) -> - logger.setDimensions(DimensionSet.of("Service", service(powertoolsMetrics), "FunctionName", context.getFunctionName()))); + withSingleMetric("ColdStart", 1, Unit.COUNT, namespace(metrics), (logger) -> + logger.setDimensions(DimensionSet.of("Service", service(metrics), "FunctionName", context.getFunctionName()))); } } } - private void validateBeforeFlushingMetrics(PowertoolsMetrics powertoolsMetrics) { - if (powertoolsMetrics.raiseOnEmptyMetrics() && hasNoMetrics()) { + private void validateBeforeFlushingMetrics(Metrics metrics) { + if (metrics.raiseOnEmptyMetrics() && hasNoMetrics()) { throw new ValidationException("No metrics captured, at least one metrics must be emitted"); } @@ -97,12 +97,12 @@ private void validateBeforeFlushingMetrics(PowertoolsMetrics powertoolsMetrics) } } - private String namespace(PowertoolsMetrics powertoolsMetrics) { - return !"".equals(powertoolsMetrics.namespace()) ? powertoolsMetrics.namespace() : NAMESPACE; + private String namespace(Metrics metrics) { + return !"".equals(metrics.namespace()) ? metrics.namespace() : NAMESPACE; } - private String service(PowertoolsMetrics powertoolsMetrics) { - return !"".equals(powertoolsMetrics.service()) ? powertoolsMetrics.service() : serviceName(); + private String service(Metrics metrics) { + return !"".equals(metrics.service()) ? metrics.service() : serviceName(); } // This can be simplified after this issues https://github.com/awslabs/aws-embedded-metrics-java/issues/35 is fixed diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/PowertoolsMetricsLoggerTest.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsLoggerTest.java similarity index 93% rename from powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/PowertoolsMetricsLoggerTest.java rename to powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsLoggerTest.java index 78ab99eca..55fecb09e 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/PowertoolsMetricsLoggerTest.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsLoggerTest.java @@ -2,7 +2,6 @@ import java.io.ByteArrayOutputStream; import java.io.PrintStream; -import java.util.Collections; import java.util.Map; import com.fasterxml.jackson.core.JsonProcessingException; @@ -20,7 +19,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mockStatic; -class PowertoolsMetricsLoggerTest { +class MetricsLoggerTest { private final ByteArrayOutputStream out = new ByteArrayOutputStream(); private final PrintStream originalOut = System.out; @@ -48,7 +47,7 @@ void singleMetricsCaptureUtility() { try (MockedStatic mocked = mockStatic(SystemWrapper.class)) { mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda"); - PowertoolsMetricsLogger.withSingleMetric("Metric1", 1, Unit.COUNT, "test", + MetricsUtils.withSingleMetric("Metric1", 1, Unit.COUNT, "test", metricsLogger -> metricsLogger.setDimensions(DimensionSet.of("Dimension1", "Value1"))); assertThat(out.toString()) diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsColdStartEnabledHandler.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsColdStartEnabledHandler.java index 793f0c68e..a722bd689 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsColdStartEnabledHandler.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsColdStartEnabledHandler.java @@ -4,14 +4,14 @@ import com.amazonaws.services.lambda.runtime.RequestHandler; import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger; import software.amazon.cloudwatchlogs.emf.model.Unit; -import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; +import software.amazon.lambda.powertools.metrics.Metrics; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.metricsLogger; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger; public class PowertoolsMetricsColdStartEnabledHandler implements RequestHandler { @Override - @PowertoolsMetrics(namespace = "ExampleApplication", service = "booking", captureColdStart = true) + @Metrics(namespace = "ExampleApplication", service = "booking", captureColdStart = true) public Object handleRequest(Object input, Context context) { MetricsLogger metricsLogger = metricsLogger(); metricsLogger.putMetric("Metric1", 1, Unit.BYTES); diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledHandler.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledHandler.java index adace6102..7bccb3f48 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledHandler.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledHandler.java @@ -4,14 +4,14 @@ import com.amazonaws.services.lambda.runtime.RequestHandler; import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger; import software.amazon.cloudwatchlogs.emf.model.Unit; -import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; +import software.amazon.lambda.powertools.metrics.Metrics; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.metricsLogger; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger; public class PowertoolsMetricsEnabledHandler implements RequestHandler { @Override - @PowertoolsMetrics(namespace = "ExampleApplication", service = "booking") + @Metrics(namespace = "ExampleApplication", service = "booking") public Object handleRequest(Object input, Context context) { MetricsLogger metricsLogger = metricsLogger(); metricsLogger.putMetric("Metric1", 1, Unit.BYTES); diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledStreamHandler.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledStreamHandler.java index 942869c39..2eb877dc3 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledStreamHandler.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledStreamHandler.java @@ -1,6 +1,5 @@ package software.amazon.lambda.powertools.metrics.handlers; -import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -8,14 +7,14 @@ import com.amazonaws.services.lambda.runtime.RequestStreamHandler; import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger; import software.amazon.cloudwatchlogs.emf.model.Unit; -import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; +import software.amazon.lambda.powertools.metrics.Metrics; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.metricsLogger; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger; public class PowertoolsMetricsEnabledStreamHandler implements RequestStreamHandler { @Override - @PowertoolsMetrics(namespace = "ExampleApplication", service = "booking") + @Metrics(namespace = "ExampleApplication", service = "booking") public void handleRequest(InputStream input, OutputStream output, Context context) { MetricsLogger metricsLogger = metricsLogger(); metricsLogger.putMetric("Metric1", 1, Unit.BYTES); diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsExceptionWhenNoMetricsHandler.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsExceptionWhenNoMetricsHandler.java index 47e882c0e..8ada044ee 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsExceptionWhenNoMetricsHandler.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsExceptionWhenNoMetricsHandler.java @@ -3,14 +3,14 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger; -import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; +import software.amazon.lambda.powertools.metrics.Metrics; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.metricsLogger; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger; public class PowertoolsMetricsExceptionWhenNoMetricsHandler implements RequestHandler { @Override - @PowertoolsMetrics(namespace = "ExampleApplication", service = "booking", raiseOnEmptyMetrics = true) + @Metrics(namespace = "ExampleApplication", service = "booking", raiseOnEmptyMetrics = true) public Object handleRequest(Object input, Context context) { MetricsLogger metricsLogger = metricsLogger(); metricsLogger.putMetadata("MetaData", "MetaDataValue"); diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsNoDimensionsHandler.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsNoDimensionsHandler.java index 50a331708..52fccb155 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsNoDimensionsHandler.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsNoDimensionsHandler.java @@ -1,21 +1,16 @@ package software.amazon.lambda.powertools.metrics.handlers; -import java.util.function.IntConsumer; -import java.util.stream.IntStream; - import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger; -import software.amazon.cloudwatchlogs.emf.model.DimensionSet; -import software.amazon.cloudwatchlogs.emf.model.Unit; -import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; +import software.amazon.lambda.powertools.metrics.Metrics; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.metricsLogger; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger; public class PowertoolsMetricsNoDimensionsHandler implements RequestHandler { @Override - @PowertoolsMetrics(namespace = "ExampleApplication", service = "booking", captureColdStart = true) + @Metrics(namespace = "ExampleApplication", service = "booking", captureColdStart = true) public Object handleRequest(Object input, Context context) { MetricsLogger metricsLogger = metricsLogger(); metricsLogger.setDimensions(); diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsNoExceptionWhenNoMetricsHandler.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsNoExceptionWhenNoMetricsHandler.java index 0ca6c422e..3639542f8 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsNoExceptionWhenNoMetricsHandler.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsNoExceptionWhenNoMetricsHandler.java @@ -3,14 +3,14 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger; -import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; +import software.amazon.lambda.powertools.metrics.Metrics; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.metricsLogger; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger; public class PowertoolsMetricsNoExceptionWhenNoMetricsHandler implements RequestHandler { @Override - @PowertoolsMetrics(namespace = "ExampleApplication", service = "booking") + @Metrics(namespace = "ExampleApplication", service = "booking") public Object handleRequest(Object input, Context context) { MetricsLogger metricsLogger = metricsLogger(); metricsLogger.putMetadata("MetaData", "MetaDataValue"); diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsTooManyDimensionsHandler.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsTooManyDimensionsHandler.java index 40d94d3d7..ccec863f9 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsTooManyDimensionsHandler.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsTooManyDimensionsHandler.java @@ -1,21 +1,19 @@ package software.amazon.lambda.powertools.metrics.handlers; -import java.util.List; -import java.util.stream.Collectors; import java.util.stream.IntStream; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger; import software.amazon.cloudwatchlogs.emf.model.DimensionSet; -import software.amazon.lambda.powertools.metrics.PowertoolsMetrics; +import software.amazon.lambda.powertools.metrics.Metrics; -import static software.amazon.lambda.powertools.metrics.PowertoolsMetricsLogger.metricsLogger; +import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger; public class PowertoolsMetricsTooManyDimensionsHandler implements RequestHandler { @Override - @PowertoolsMetrics + @Metrics public Object handleRequest(Object input, Context context) { MetricsLogger metricsLogger = metricsLogger(); From 9ce66cacd892616b8e413d666045b1eb73731edd Mon Sep 17 00:00:00 2001 From: Pankaj Agrawal Date: Tue, 3 Nov 2020 14:13:38 +0100 Subject: [PATCH 3/5] Rename annotations and helpers for logging module --- docs/content/core/logging.mdx | 28 +++++++++---------- .../src/main/java/helloworld/App.java | 8 +++--- .../src/main/java/helloworld/AppSqsEvent.java | 4 +-- .../src/main/java/helloworld/AppStream.java | 4 +-- .../{PowertoolsLogging.java => Logging.java} | 24 ++++++++-------- ...owertoolsLogger.java => LoggingUtils.java} | 8 +++--- .../logging/internal/LambdaLoggingAspect.java | 26 ++++++++--------- ...sLoggerTest.java => LoggingUtilsTest.java} | 6 ++-- .../logging/handlers/PowerLogToolEnabled.java | 6 ++-- .../PowerLogToolEnabledForStream.java | 4 +-- .../handlers/PowerLogToolSamplingEnabled.java | 4 +-- .../handlers/PowerToolLogEventEnabled.java | 4 +-- .../PowerToolLogEventEnabledForStream.java | 4 +-- 13 files changed, 65 insertions(+), 65 deletions(-) rename powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/{PowertoolsLogging.java => Logging.java} (68%) rename powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/{PowertoolsLogger.java => LoggingUtils.java} (92%) rename powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/{PowertoolsLoggerTest.java => LoggingUtilsTest.java} (92%) diff --git a/docs/content/core/logging.mdx b/docs/content/core/logging.mdx index 05cd172e4..6d6591f9d 100644 --- a/docs/content/core/logging.mdx +++ b/docs/content/core/logging.mdx @@ -81,8 +81,8 @@ package helloworld; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import software.amazon.lambda.logging.PowertoolsLogger; -import software.amazon.lambda.logging.PowertoolsLogging; +import software.amazon.lambda.logging.LoggingUtils; +import software.amazon.lambda.logging.Logging; ... /** @@ -92,7 +92,7 @@ public class App implements RequestHandler { @Override @SqsBatchProcessor(SampleMessageHandler.class) - @PowertoolsLogging(logEvent = true) + @Logging(logEvent = true) public String handleRequest(SQSEvent input, Context context) { return "{\"statusCode\": 200}"; } diff --git a/example/HelloWorldFunction/src/main/java/helloworld/AppStream.java b/example/HelloWorldFunction/src/main/java/helloworld/AppStream.java index 87a747520..aed048eef 100644 --- a/example/HelloWorldFunction/src/main/java/helloworld/AppStream.java +++ b/example/HelloWorldFunction/src/main/java/helloworld/AppStream.java @@ -8,14 +8,14 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; import com.fasterxml.jackson.databind.ObjectMapper; -import software.amazon.lambda.powertools.logging.PowertoolsLogging; +import software.amazon.lambda.powertools.logging.Logging; import software.amazon.lambda.powertools.metrics.Metrics; public class AppStream implements RequestStreamHandler { private static final ObjectMapper mapper = new ObjectMapper(); @Override - @PowertoolsLogging(logEvent = true) + @Logging(logEvent = true) @Metrics(namespace = "ServerlessAirline", service = "payment", captureColdStart = true) public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException { Map map = mapper.readValue(input, Map.class); diff --git a/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/PowertoolsLogging.java b/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/Logging.java similarity index 68% rename from powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/PowertoolsLogging.java rename to powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/Logging.java index eb62a4ece..97ce74617 100644 --- a/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/PowertoolsLogging.java +++ b/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/Logging.java @@ -19,17 +19,17 @@ import java.lang.annotation.Target; /** - * {@code PowertoolsLogging} is used to signal that the annotated method should be - * extended with PowertoolsLogging functionality. + * {@code Logging} is used to signal that the annotated method should be + * extended with Logging functionality. * - *

{@code PowertoolsLogging} provides an opinionated logger with output structured as JSON.

+ *

{@code Logging} provides an opinionated logger with output structured as JSON.

* - *

{@code PowertoolsLogging} should be used with the handleRequest method of a class + *

{@code Logging} should be used with the handleRequest method of a class * which implements either * {@code com.amazonaws.services.lambda.runtime.RequestHandler} or * {@code com.amazonaws.services.lambda.runtime.RequestStreamHandler}.

* - *

By default {@code PowertoolsLogging} will load the following keys and values from the Lambda + *

By default {@code Logging} will load the following keys and values from the Lambda * {@code com.amazonaws.services.lambda.runtime.Context}

* *
    @@ -39,7 +39,7 @@ *
  • MemoryLimitInMB
  • *
* - *

By default {@code PowertoolsLogging} will also create keys for:

+ *

By default {@code Logging} will also create keys for:

* *
    *
  • coldStart - True if this is the first invocation of this Lambda execution environment; else False
  • @@ -52,17 +52,17 @@ * *

    The data and time of the log event will be written using {@link java.time.format.DateTimeFormatter#ISO_ZONED_DATE_TIME}

    * - *

    By default {@code PowertoolsLogging} will not log the event which has trigger the invoke of the Lambda function. - * This can be enabled using {@code @PowertoolsLogging(logEvent = true)}.

    + *

    By default {@code Logging} will not log the event which has trigger the invoke of the Lambda function. + * This can be enabled using {@code @Logging(logEvent = true)}.

    * - *

    By default {@code PowertoolsLogging} all debug logs will follow log4j2 configuration unless configured via - * POWERTOOLS_LOGGER_SAMPLE_RATE environment variable {@code @PowertoolsLogging(samplingRate = <0.0-1.0>)}.

    + *

    By default {@code Logging} all debug logs will follow log4j2 configuration unless configured via + * POWERTOOLS_LOGGER_SAMPLE_RATE environment variable {@code @Logging(samplingRate = <0.0-1.0>)}.

    * - *

    To append additional keys to each log entry you can use {@link PowertoolsLogger#appendKey(String, String)}

    + *

    To append additional keys to each log entry you can use {@link LoggingUtils#appendKey(String, String)}

    */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) -public @interface PowertoolsLogging { +public @interface Logging { boolean logEvent() default false; diff --git a/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/PowertoolsLogger.java b/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/LoggingUtils.java similarity index 92% rename from powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/PowertoolsLogger.java rename to powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/LoggingUtils.java index 5748263a0..6270c7049 100644 --- a/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/PowertoolsLogger.java +++ b/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/LoggingUtils.java @@ -18,13 +18,13 @@ import org.apache.logging.log4j.ThreadContext; /** - * A class of helper functions to add additional functionality to PowertoolsLogging. + * A class of helper functions to add additional functionality to Logging. * - * {@see PowertoolsLogging} + * {@see Logging} */ -public final class PowertoolsLogger { +public final class LoggingUtils { - private PowertoolsLogger() { + private LoggingUtils() { } /** diff --git a/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/internal/LambdaLoggingAspect.java b/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/internal/LambdaLoggingAspect.java index 8414d5307..421462e0c 100644 --- a/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/internal/LambdaLoggingAspect.java +++ b/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/internal/LambdaLoggingAspect.java @@ -35,7 +35,7 @@ import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; -import software.amazon.lambda.powertools.logging.PowertoolsLogging; +import software.amazon.lambda.powertools.logging.Logging; import static java.util.Optional.empty; import static java.util.Optional.of; @@ -47,8 +47,8 @@ import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.placedOnRequestHandler; import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.placedOnStreamHandler; import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.serviceName; -import static software.amazon.lambda.powertools.logging.PowertoolsLogger.appendKey; -import static software.amazon.lambda.powertools.logging.PowertoolsLogger.appendKeys; +import static software.amazon.lambda.powertools.logging.LoggingUtils.appendKey; +import static software.amazon.lambda.powertools.logging.LoggingUtils.appendKeys; import static software.amazon.lambda.powertools.logging.internal.SystemWrapper.getenv; @Aspect @@ -71,16 +71,16 @@ public final class LambdaLoggingAspect { } @SuppressWarnings({"EmptyMethod"}) - @Pointcut("@annotation(powertoolsLogging)") - public void callAt(PowertoolsLogging powertoolsLogging) { + @Pointcut("@annotation(logging)") + public void callAt(Logging logging) { } - @Around(value = "callAt(powertoolsLogging) && execution(@PowertoolsLogging * *.*(..))", argNames = "pjp,powertoolsLogging") + @Around(value = "callAt(logging) && execution(@Logging * *.*(..))", argNames = "pjp,logging") public Object around(ProceedingJoinPoint pjp, - PowertoolsLogging powertoolsLogging) throws Throwable { + Logging logging) throws Throwable { Object[] proceedArgs = pjp.getArgs(); - setLogLevelBasedOnSamplingRate(pjp, powertoolsLogging); + setLogLevelBasedOnSamplingRate(pjp, logging); extractContext(pjp) .ifPresent(context -> { @@ -91,7 +91,7 @@ public Object around(ProceedingJoinPoint pjp, getXrayTraceId().ifPresent(xRayTraceId -> appendKey("xray_trace_id", xRayTraceId)); - if (powertoolsLogging.logEvent()) { + if (logging.logEvent()) { proceedArgs = logEvent(pjp); } @@ -108,10 +108,10 @@ private static void resetLogLevels(Level logLevel) { } private void setLogLevelBasedOnSamplingRate(final ProceedingJoinPoint pjp, - final PowertoolsLogging powertoolsLogging) { + final Logging logging) { if (isHandlerMethod(pjp)) { float sample = SAMPLER.nextFloat(); - double samplingRate = samplingRate(powertoolsLogging); + double samplingRate = samplingRate(logging); if (samplingRate < 0 || samplingRate > 1) { LOG.debug("Skipping sampling rate configuration because of invalid value. Sampling rate: {}", samplingRate); @@ -131,7 +131,7 @@ private void setLogLevelBasedOnSamplingRate(final ProceedingJoinPoint pjp, } } - private double samplingRate(final PowertoolsLogging powertoolsLogging) { + private double samplingRate(final Logging logging) { if (null != SAMPLING_RATE) { try { return Double.parseDouble(SAMPLING_RATE); @@ -140,7 +140,7 @@ private double samplingRate(final PowertoolsLogging powertoolsLogging) { "value. Sampling rate: {}", SAMPLING_RATE); } } - return powertoolsLogging.samplingRate(); + return logging.samplingRate(); } private Object[] logEvent(final ProceedingJoinPoint pjp) { diff --git a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/PowertoolsLoggerTest.java b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/LoggingUtilsTest.java similarity index 92% rename from powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/PowertoolsLoggerTest.java rename to powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/LoggingUtilsTest.java index 7f2035255..25e0303c7 100644 --- a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/PowertoolsLoggerTest.java +++ b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/LoggingUtilsTest.java @@ -23,7 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat; -class PowertoolsLoggerTest { +class LoggingUtilsTest { @BeforeEach void setUp() { @@ -32,7 +32,7 @@ void setUp() { @Test void shouldSetCustomKeyOnThreadContext() { - PowertoolsLogger.appendKey("test", "value"); + LoggingUtils.appendKey("test", "value"); assertThat(ThreadContext.getImmutableContext()) .hasSize(1) @@ -45,7 +45,7 @@ void shouldSetCustomKeyAsMapOnThreadContext() { customKeys.put("test", "value"); customKeys.put("test1", "value1"); - PowertoolsLogger.appendKeys(customKeys); + LoggingUtils.appendKeys(customKeys); assertThat(ThreadContext.getImmutableContext()) .hasSize(2) diff --git a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolEnabled.java b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolEnabled.java index 097d26756..e154bbcf3 100644 --- a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolEnabled.java +++ b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolEnabled.java @@ -17,20 +17,20 @@ import com.amazonaws.services.lambda.runtime.RequestHandler; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import software.amazon.lambda.powertools.logging.PowertoolsLogging; +import software.amazon.lambda.powertools.logging.Logging; public class PowerLogToolEnabled implements RequestHandler { private final Logger LOG = LogManager.getLogger(PowerLogToolEnabled.class); @Override - @PowertoolsLogging + @Logging public Object handleRequest(Object input, Context context) { LOG.info("Test event"); LOG.debug("Test debug event"); return null; } - @PowertoolsLogging + @Logging public void anotherMethod() { System.out.println("test"); } diff --git a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolEnabledForStream.java b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolEnabledForStream.java index 6d8f3197c..e2c2d66d0 100644 --- a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolEnabledForStream.java +++ b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolEnabledForStream.java @@ -15,14 +15,14 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; -import software.amazon.lambda.powertools.logging.PowertoolsLogging; +import software.amazon.lambda.powertools.logging.Logging; import java.io.InputStream; import java.io.OutputStream; public class PowerLogToolEnabledForStream implements RequestStreamHandler { - @PowertoolsLogging + @Logging @Override public void handleRequest(InputStream input, OutputStream output, Context context) { diff --git a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolSamplingEnabled.java b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolSamplingEnabled.java index 5d4d5f6d3..9d3d68e2e 100644 --- a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolSamplingEnabled.java +++ b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolSamplingEnabled.java @@ -17,13 +17,13 @@ import com.amazonaws.services.lambda.runtime.RequestHandler; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import software.amazon.lambda.powertools.logging.PowertoolsLogging; +import software.amazon.lambda.powertools.logging.Logging; public class PowerLogToolSamplingEnabled implements RequestHandler { private final Logger LOG = LogManager.getLogger(PowerLogToolSamplingEnabled.class); @Override - @PowertoolsLogging(samplingRate = 1.0) + @Logging(samplingRate = 1.0) public Object handleRequest(Object input, Context context) { LOG.info("Test event"); LOG.debug("Test debug event"); diff --git a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerToolLogEventEnabled.java b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerToolLogEventEnabled.java index eedc5496d..152eb284d 100644 --- a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerToolLogEventEnabled.java +++ b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerToolLogEventEnabled.java @@ -15,11 +15,11 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import software.amazon.lambda.powertools.logging.PowertoolsLogging; +import software.amazon.lambda.powertools.logging.Logging; public class PowerToolLogEventEnabled implements RequestHandler { - @PowertoolsLogging(logEvent = true) + @Logging(logEvent = true) @Override public Object handleRequest(Object input, Context context) { return null; diff --git a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerToolLogEventEnabledForStream.java b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerToolLogEventEnabledForStream.java index f2a19abb6..473042e6c 100644 --- a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerToolLogEventEnabledForStream.java +++ b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerToolLogEventEnabledForStream.java @@ -16,7 +16,7 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; import com.fasterxml.jackson.databind.ObjectMapper; -import software.amazon.lambda.powertools.logging.PowertoolsLogging; +import software.amazon.lambda.powertools.logging.Logging; import java.io.IOException; import java.io.InputStream; @@ -25,7 +25,7 @@ public class PowerToolLogEventEnabledForStream implements RequestStreamHandler { - @PowertoolsLogging(logEvent = true) + @Logging(logEvent = true) @Override public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException { ObjectMapper mapper = new ObjectMapper(); From e421ba57144b814a4022044b115f26ebc7a5216e Mon Sep 17 00:00:00 2001 From: Pankaj Agrawal Date: Tue, 3 Nov 2020 14:19:28 +0100 Subject: [PATCH 4/5] Rename annotations and helpers for sqs module --- docs/content/utilities/batch.mdx | 32 +++++++++---------- .../utilities/sqs_large_message_handling.mdx | 16 +++++----- .../src/main/java/helloworld/AppSqsEvent.java | 4 +-- .../main/java/helloworld/AppSqsEventUtil.java | 4 +-- .../sqs/SQSBatchProcessingException.java | 10 +++--- .../{SqsBatchProcessor.java => SqsBatch.java} | 8 ++--- ...ssageHandler.java => SqsLargeMessage.java} | 16 +++++----- .../powertools/sqs/SqsMessageHandler.java | 10 +++--- .../sqs/{PowertoolsSqs.java => SqsUtils.java} | 18 +++++------ .../sqs/internal/SqsLargeMessageAspect.java | 12 +++---- .../SqsMessageBatchProcessorAspect.java | 14 ++++---- ...t.java => SqsUtilsBatchProcessorTest.java} | 6 ++-- ...est.java => SqsUtilsLargeMessageTest.java} | 12 +++---- .../sqs/handlers/LambdaHandlerApiGateway.java | 8 ++--- .../PartialBatchFailureSuppressedHandler.java | 4 +-- .../PartialBatchPartialFailureHandler.java | 4 +-- .../handlers/PartialBatchSuccessHandler.java | 4 +-- .../sqs/handlers/SqsMessageHandler.java | 4 +-- .../handlers/SqsNoDeleteMessageHandler.java | 4 +-- .../SqsMessageBatchProcessorAspectTest.java | 2 +- 20 files changed, 96 insertions(+), 96 deletions(-) rename powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/{SqsBatchProcessor.java => SqsBatch.java} (87%) rename powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/{LargeMessageHandler.java => SqsLargeMessage.java} (77%) rename powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/{PowertoolsSqs.java => SqsUtils.java} (96%) rename powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/{PowertoolsSqsBatchProcessorTest.java => SqsUtilsBatchProcessorTest.java} (97%) rename powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/{PowertoolsSqsLargeMessageTest.java => SqsUtilsLargeMessageTest.java} (91%) diff --git a/docs/content/utilities/batch.mdx b/docs/content/utilities/batch.mdx index b24eac0ad..23fcf25f7 100644 --- a/docs/content/utilities/batch.mdx +++ b/docs/content/utilities/batch.mdx @@ -85,7 +85,7 @@ This utility requires additional permissions to work as expected. Lambda functio ## Processing messages from SQS -You can use either **[SqsBatchProcessor annotation](#SqsBatchProcessor annotation)**, or **[PowertoolsSqs Utility API](#PowertoolsSqs Utility API)** as a fluent API. +You can use either **[SqsBatch annotation](#SqsBatch annotation)**, or **[SqsUtils Utility API](#SqsUtils Utility API)** as a fluent API. Both have nearly the same behaviour when it comes to processing messages from the batch: @@ -94,18 +94,18 @@ Both have nearly the same behaviour when it comes to processing messages from th - **1)** Delete successfully processed messages from the queue by directly calling `sqs:DeleteMessageBatch` - **2)** Raise `SQSBatchProcessingException` to ensure failed messages return to your SQS queue -The only difference is that **PowertoolsSqs Utility API** will give you access to return from the processed messages if you need. Exception `SQSBatchProcessingException` thrown from the +The only difference is that **SqsUtils Utility API** will give you access to return from the processed messages if you need. Exception `SQSBatchProcessingException` thrown from the utility will have access to both successful and failed messaged along with failure exceptions. ## Functional Interface SqsMessageHandler -Both [annotation](#SqsBatchProcessor annotation) and [PowertoolsSqs Utility API](#PowertoolsSqs Utility API) requires an implementation of functional interface `SqsMessageHandler`. +Both [annotation](#SqsBatch annotation) and [SqsUtils Utility API](#SqsUtils Utility API) requires an implementation of functional interface `SqsMessageHandler`. This implementation is responsible for processing each individual message from the batch, and to raise an exception if unable to process any of the messages sent. **Any non-exception/successful return from your record handler function** will instruct utility to queue up each individual message for deletion. -### SqsBatchProcessor annotation +### SqsBatch annotation When using this annotation, you need provide a class implementation of `SqsMessageHandler` that will process individual messages from the batch - It should raise an exception if it is unable to process the record. @@ -122,7 +122,7 @@ All records in the batch will be passed to this handler for processing, even if ```java:title=App.java public class AppSqsEvent implements RequestHandler { @Override - @SqsBatchProcessor(SampleMessageHandler.class) // highlight-line + @SqsBatch(SampleMessageHandler.class) // highlight-line public String handleRequest(SQSEvent input, Context context) { return "{\"statusCode\": 200}"; } @@ -140,17 +140,17 @@ public class AppSqsEvent implements RequestHandler { } ``` -### PowertoolsSqs Utility API +### SqsUtils Utility API If you require access to the result of processed messages, you can use this utility. -The result from calling PowertoolsSqs#batchProcessor() on the context manager will be a list of all the return values from your SqsMessageHandler#process() function. +The result from calling SqsUtils#batchProcessor() on the context manager will be a list of all the return values from your SqsMessageHandler#process() function. ```java:title=App.java public class AppSqsEvent implements RequestHandler> { @Override public List handleRequest(SQSEvent input, Context context) { - List returnValues = PowertoolsSqs.batchProcessor(input, SampleMessageHandler.class); // highlight-line + List returnValues = SqsUtils.batchProcessor(input, SampleMessageHandler.class); // highlight-line return returnValues; } @@ -176,7 +176,7 @@ public class AppSqsEvent implements RequestHandler> { @Override public List handleRequest(SQSEvent input, Context context) { // highlight-start - List returnValues = PowertoolsSqs.batchProcessor(input, (message) -> { + List returnValues = SqsUtils.batchProcessor(input, (message) -> { // This will be called for each individual message from a batch // It should raise an exception if the message was not processed successfully String returnVal = doSomething(message.getBody()); @@ -192,21 +192,21 @@ public class AppSqsEvent implements RequestHandler> { ## Passing custom SqsClient If you need to pass custom SqsClient such as region to the SDK, you can pass your own `SqsClient` to be used by utility either for -**[SqsBatchProcessor annotation](#SqsBatchProcessor annotation)**, or **[PowertoolsSqs Utility API](#PowertoolsSqs Utility API)**. +**[SqsBatch annotation](#SqsBatch annotation)**, or **[SqsUtils Utility API](#SqsUtils Utility API)**. ```java:title=App.java public class AppSqsEvent implements RequestHandler> { // highlight-start static { - PowertoolsSqs.overrideSqsClient(SqsClient.builder() + SqsUtils.overrideSqsClient(SqsClient.builder() .build()); } // highlight-end @Override public List handleRequest(SQSEvent input, Context context) { - List returnValues = PowertoolsSqs.batchProcessor(input, SampleMessageHandler.class); + List returnValues = SqsUtils.batchProcessor(input, SampleMessageHandler.class); return returnValues; } @@ -229,23 +229,23 @@ public class AppSqsEvent implements RequestHandler> { If you want to disable the default behavior where `SQSBatchProcessingException` is raised if there are any exception, you can pass the `suppressException` boolean argument. -**Within SqsBatchProcessor annotation** +**Within SqsBatch annotation** ```java:title=App.java ... @Override - @SqsBatchProcessor(value = SampleMessageHandler.class, suppressException = true) // highlight-line + @SqsBatch(value = SampleMessageHandler.class, suppressException = true) // highlight-line public String handleRequest(SQSEvent input, Context context) { return "{\"statusCode\": 200}"; } ``` -**Within PowertoolsSqs Utility API** +**Within SqsUtils Utility API** ```java:title=App.java @Override public List handleRequest(SQSEvent input, Context context) { - List returnValues = PowertoolsSqs.batchProcessor(input, true, SampleMessageHandler.class); // highlight-line + List returnValues = SqsUtils.batchProcessor(input, true, SampleMessageHandler.class); // highlight-line return returnValues; } diff --git a/docs/content/utilities/sqs_large_message_handling.mdx b/docs/content/utilities/sqs_large_message_handling.mdx index 7e7961e7e..ce8523493 100644 --- a/docs/content/utilities/sqs_large_message_handling.mdx +++ b/docs/content/utilities/sqs_large_message_handling.mdx @@ -72,7 +72,7 @@ section. ``` -The annotation `@LargeMessageHandler` should be used with the handleRequest method of a class +The annotation `@SqsLargeMessage` should be used with the handleRequest method of a class which implements `com.amazonaws.services.lambda.runtime.RequestHandler` with `com.amazonaws.services.lambda.runtime.events.SQSEvent` as the first parameter. @@ -80,7 +80,7 @@ which implements `com.amazonaws.services.lambda.runtime.RequestHandler` with public class SqsMessageHandler implements RequestHandler { @Override - @LargeMessageHandler + @SqsLargeMessage public String handleRequest(SQSEvent sqsEvent, Context context) { // process messages @@ -89,7 +89,7 @@ public class SqsMessageHandler implements RequestHandler { } ``` -`@LargeMessageHandler` creates a default S3 Client `AmazonS3 amazonS3 = AmazonS3ClientBuilder.defaultClient()`. +`@SqsLargeMessage` creates a default S3 Client `AmazonS3 amazonS3 = AmazonS3ClientBuilder.defaultClient()`. When the Lambda function is invoked with an event from SQS, each record received in the SQSEvent will be checked to see if it's body contains a payload which has been offloaded to S3. If it does then `getObject(bucket, key)` will be called, @@ -102,7 +102,7 @@ deleted from S3 using `deleteObject(bucket, key)` To disable deletion of payloads setting the following annotation parameter: ```java -@LargeMessageHandler(deletePayloads=false) +@SqsLargeMessage(deletePayloads=false) public class SqsMessageHandler implements RequestHandler { } @@ -112,7 +112,7 @@ public class SqsMessageHandler implements RequestHandler { If you want to avoid using annotation and have control over error that can happen during payload enrichment. -`PowertoolsSqs.enrichedMessageFromS3()` provides you access with list of `SQSMessage` object enriched from S3 payload. +`SqsUtils.enrichedMessageFromS3()` provides you access with list of `SQSMessage` object enriched from S3 payload. Original `SQSEvent` object is never mutated. You can also control if the S3 payload should be deleted after successful processing. You can enrich messages from S3 with below code: @@ -122,7 +122,7 @@ public class SqsMessageHandler implements RequestHandler { @Override public String handleRequest(SQSEvent sqsEvent, Context context) { - Map sqsMessage = PowertoolsSqs.enrichedMessageFromS3(sqsEvent, sqsMessages -> { + Map sqsMessage = SqsUtils.enrichedMessageFromS3(sqsEvent, sqsMessages -> { // Some business logic Map someBusinessLogic = new HashMap<>(); someBusinessLogic.put("Message", sqsMessages.get(0).getBody()); @@ -130,7 +130,7 @@ public class SqsMessageHandler implements RequestHandler { }); // Do not delete payload after processing. - Map sqsMessage = PowertoolsSqs.enrichedMessageFromS3(sqsEvent, false, sqsMessages -> { + Map sqsMessage = SqsUtils.enrichedMessageFromS3(sqsEvent, false, sqsMessages -> { // Some business logic Map someBusinessLogic = new HashMap<>(); someBusinessLogic.put("Message", sqsMessages.get(0).getBody()); @@ -140,7 +140,7 @@ public class SqsMessageHandler implements RequestHandler { // Better control over exception during enrichment try { // Do not delete payload after processing. - PowertoolsSqs.enrichedMessageFromS3(sqsEvent, false, sqsMessages -> { + SqsUtils.enrichedMessageFromS3(sqsEvent, false, sqsMessages -> { // Some business logic }); } catch (FailedProcessingLargePayloadException e) { diff --git a/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEvent.java b/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEvent.java index b8d18995a..d2a347856 100644 --- a/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEvent.java +++ b/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEvent.java @@ -6,7 +6,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import software.amazon.lambda.powertools.logging.Logging; -import software.amazon.lambda.powertools.sqs.SqsBatchProcessor; +import software.amazon.lambda.powertools.sqs.SqsBatch; import software.amazon.lambda.powertools.sqs.SqsMessageHandler; import static com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; @@ -15,7 +15,7 @@ public class AppSqsEvent implements RequestHandler { private static final Logger LOG = LogManager.getLogger(AppSqsEvent.class); @Override - @SqsBatchProcessor(SampleMessageHandler.class) + @SqsBatch(SampleMessageHandler.class) @Logging(logEvent = true) public String handleRequest(SQSEvent input, Context context) { return "{\"statusCode\": 200}"; diff --git a/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEventUtil.java b/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEventUtil.java index a1300defc..bed5fae76 100644 --- a/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEventUtil.java +++ b/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEventUtil.java @@ -7,7 +7,7 @@ import com.amazonaws.services.lambda.runtime.events.SQSEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import software.amazon.lambda.powertools.sqs.PowertoolsSqs; +import software.amazon.lambda.powertools.sqs.SqsUtils; import software.amazon.lambda.powertools.sqs.SQSBatchProcessingException; import static java.util.Collections.emptyList; @@ -19,7 +19,7 @@ public class AppSqsEventUtil implements RequestHandler> { public List handleRequest(SQSEvent input, Context context) { try { - return PowertoolsSqs.batchProcessor(input, (message) -> { + return SqsUtils.batchProcessor(input, (message) -> { if ("19dd0b57-b21e-4ac1-bd88-01bbb068cb99".equals(message.getMessageId())) { throw new RuntimeException(message.getMessageId()); } diff --git a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SQSBatchProcessingException.java b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SQSBatchProcessingException.java index 38a9c943d..bc1c61a9c 100644 --- a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SQSBatchProcessingException.java +++ b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SQSBatchProcessingException.java @@ -17,11 +17,11 @@ *

    * This exception can be thrown form: *

      - *
    • {@link SqsBatchProcessor}
    • - *
    • {@link PowertoolsSqs#batchProcessor(SQSEvent, Class)}
    • - *
    • {@link PowertoolsSqs#batchProcessor(SQSEvent, boolean, Class)}
    • - *
    • {@link PowertoolsSqs#batchProcessor(SQSEvent, SqsMessageHandler)}
    • - *
    • {@link PowertoolsSqs#batchProcessor(SQSEvent, boolean, SqsMessageHandler)}
    • + *
    • {@link SqsBatch}
    • + *
    • {@link SqsUtils#batchProcessor(SQSEvent, Class)}
    • + *
    • {@link SqsUtils#batchProcessor(SQSEvent, boolean, Class)}
    • + *
    • {@link SqsUtils#batchProcessor(SQSEvent, SqsMessageHandler)}
    • + *
    • {@link SqsUtils#batchProcessor(SQSEvent, boolean, SqsMessageHandler)}
    • *
    *

    */ diff --git a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsBatchProcessor.java b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsBatch.java similarity index 87% rename from powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsBatchProcessor.java rename to powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsBatch.java index 342765052..bb6be3190 100644 --- a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsBatchProcessor.java +++ b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsBatch.java @@ -10,7 +10,7 @@ import static com.amazonaws.services.lambda.runtime.events.SQSEvent.*; /** - * {@link SqsBatchProcessor} is used to process batch messages in {@link SQSEvent} + * {@link SqsBatch} is used to process batch messages in {@link SQSEvent} * *

    * When using the annotation, implementation of {@link SqsMessageHandler} is required. Annotation will take care of @@ -29,14 +29,14 @@ * *

    * If you want to suppress the exception even if any message in batch fails, set - * {@link SqsBatchProcessor#suppressException()} to true. By default its value is false + * {@link SqsBatch#suppressException()} to true. By default its value is false *

    * *
      * public class SqsMessageHandler implements RequestHandler {
      *
      *    {@literal @}Override
    - *    {@literal @}{@link SqsBatchProcessor(SqsMessageHandler)}
    + *    {@literal @}{@link SqsBatch (SqsMessageHandler)}
      *     public String handleRequest(SQSEvent sqsEvent, Context context) {
      *
      *         return "ok";
    @@ -54,7 +54,7 @@
      */
     @Retention(RetentionPolicy.RUNTIME)
     @Target(ElementType.METHOD)
    -public @interface SqsBatchProcessor {
    +public @interface SqsBatch {
     
         Class> value();
     
    diff --git a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/LargeMessageHandler.java b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsLargeMessage.java
    similarity index 77%
    rename from powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/LargeMessageHandler.java
    rename to powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsLargeMessage.java
    index 9f67d2906..d96245006 100644
    --- a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/LargeMessageHandler.java
    +++ b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsLargeMessage.java
    @@ -6,15 +6,15 @@
     import java.lang.annotation.Target;
     
     /**
    - * {@code LargeMessageHandler} is used to signal that the annotated method
    + * {@code SqsLargeMessage} is used to signal that the annotated method
      * should be extended to handle large SQS messages which have been offloaded
      * to S3
      *
    - * 

    {@code LargeMessageHandler} automatically retrieves and deletes messages + *

    {@code SqsLargeMessage} automatically retrieves and deletes messages * which have been offloaded to S3 using the {@code amazon-sqs-java-extended-client-lib} * client library.

    * - *

    This version of the {@code LargeMessageHandler} is compatible with version + *

    This version of the {@code SqsLargeMessage} is compatible with version * 1.1.0+ of {@code amazon-sqs-java-extended-client-lib}.

    * *
    @@ -25,7 +25,7 @@
      * </dependency>
      * 
    * - *

    {@code LargeMessageHandler} should be used with the handleRequest method of a class + *

    {@code SqsLargeMessage} should be used with the handleRequest method of a class * which implements {@code com.amazonaws.services.lambda.runtime.RequestHandler} with * {@code com.amazonaws.services.lambda.runtime.events.SQSEvent} as the first parameter.

    * @@ -33,7 +33,7 @@ * public class SqsMessageHandler implements RequestHandler { * * {@literal @}Override - * {@literal @}LargeMessageHandler + * {@literal @}SqsLargeMessage * public String handleRequest(SQSEvent sqsEvent, Context context) { * * // process messages @@ -45,7 +45,7 @@ *
    * *

    Using the default S3 Client {@code AmazonS3 amazonS3 = AmazonS3ClientBuilder.defaultClient();} - * each record received in the SQSEvent {@code LargeMessageHandler} will checked + * each record received in the SQSEvent {@code SqsLargeMessage} will checked * to see if it's body contains a payload which has been offloaded to S3. If it * does then {@code getObject(bucket, key)} will be called and the payload * retrieved.

    @@ -57,12 +57,12 @@ * from S3 using {@code deleteObject(bucket, key)}

    * *

    To disable deletion of payloads setting the following annotation parameter - * {@code @LargeMessageHandler(deletePayloads=false)}

    + * {@code @SqsLargeMessage(deletePayloads=false)}

    * */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) -public @interface LargeMessageHandler { +public @interface SqsLargeMessage { boolean deletePayloads() default true; } diff --git a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsMessageHandler.java b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsMessageHandler.java index 5839939b8..17e37797c 100644 --- a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsMessageHandler.java +++ b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsMessageHandler.java @@ -13,11 +13,11 @@ *

    * It is required by utilities: *

      - *
    • {@link SqsBatchProcessor}
    • - *
    • {@link PowertoolsSqs#batchProcessor(SQSEvent, Class)}
    • - *
    • {@link PowertoolsSqs#batchProcessor(SQSEvent, boolean, Class)}
    • - *
    • {@link PowertoolsSqs#batchProcessor(SQSEvent, SqsMessageHandler)}
    • - *
    • {@link PowertoolsSqs#batchProcessor(SQSEvent, boolean, SqsMessageHandler)}
    • + *
    • {@link SqsBatch}
    • + *
    • {@link SqsUtils#batchProcessor(SQSEvent, Class)}
    • + *
    • {@link SqsUtils#batchProcessor(SQSEvent, boolean, Class)}
    • + *
    • {@link SqsUtils#batchProcessor(SQSEvent, SqsMessageHandler)}
    • + *
    • {@link SqsUtils#batchProcessor(SQSEvent, boolean, SqsMessageHandler)}
    • *
    *

    * @param Return value type from {@link SqsMessageHandler#process(SQSMessage)} diff --git a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/PowertoolsSqs.java b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsUtils.java similarity index 96% rename from powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/PowertoolsSqs.java rename to powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsUtils.java index 01ded6410..3b775df21 100644 --- a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/PowertoolsSqs.java +++ b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsUtils.java @@ -35,17 +35,17 @@ /** * A class of helper functions to add additional functionality to {@link SQSEvent} processing. */ -public final class PowertoolsSqs { - private static final Log LOG = LogFactory.getLog(PowertoolsSqs.class); +public final class SqsUtils { + private static final Log LOG = LogFactory.getLog(SqsUtils.class); private static final ObjectMapper objectMapper = new ObjectMapper(); private static SqsClient client = SqsClient.create(); - private PowertoolsSqs() { + private SqsUtils() { } /** - * This is a utility method when you want to avoid using {@code LargeMessageHandler} annotation. + * This is a utility method when you want to avoid using {@code SqsLargeMessage} annotation. * Gives you access to enriched messages from S3 in the SQS event produced via extended client lib. * If all the large S3 payload are successfully retrieved, it will delete them from S3 post success. * @@ -59,7 +59,7 @@ public static R enrichedMessageFromS3(final SQSEvent sqsEvent, } /** - * This is a utility method when you want to avoid using {@code LargeMessageHandler} annotation. + * This is a utility method when you want to avoid using {@code SqsLargeMessage} annotation. * Gives you access to enriched messages from S3 in the SQS event produced via extended client lib. * if all the large S3 payload are successfully retrieved, Control if it will delete payload from S3 post success. * @@ -72,7 +72,7 @@ public static R enrichedMessageFromS3(final SQSEvent sqsEvent, final Function, R> messageFunction) { List sqsMessages = sqsEvent.getRecords().stream() - .map(PowertoolsSqs::clonedMessage) + .map(SqsUtils::clonedMessage) .collect(Collectors.toList()); List s3Pointers = processMessages(sqsMessages); @@ -93,7 +93,7 @@ public static R enrichedMessageFromS3(final SQSEvent sqsEvent, * @param client {@link SqsClient} to be used by utility */ public static void overrideSqsClient(SqsClient client) { - PowertoolsSqs.client = client; + SqsUtils.client = client; } /** @@ -116,7 +116,7 @@ public static void overrideSqsClient(SqsClient client) { * *

    * If you dont want to utility to throw {@link SQSBatchProcessingException} in case of failures but rather suppress - * it, Refer {@link PowertoolsSqs#batchProcessor(SQSEvent, boolean, Class)} + * it, Refer {@link SqsUtils#batchProcessor(SQSEvent, boolean, Class)} *

    * * @param event {@link SQSEvent} received by lambda function. @@ -184,7 +184,7 @@ public static List batchProcessor(final SQSEvent event, * *

    * If you dont want to utility to throw {@link SQSBatchProcessingException} in case of failures but rather suppress - * it, Refer {@link PowertoolsSqs#batchProcessor(SQSEvent, boolean, SqsMessageHandler)} + * it, Refer {@link SqsUtils#batchProcessor(SQSEvent, boolean, SqsMessageHandler)} *

    * * @param event {@link SQSEvent} received by lambda function. diff --git a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/internal/SqsLargeMessageAspect.java b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/internal/SqsLargeMessageAspect.java index 64fafe38f..fef9f4715 100644 --- a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/internal/SqsLargeMessageAspect.java +++ b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/internal/SqsLargeMessageAspect.java @@ -20,7 +20,7 @@ import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; -import software.amazon.lambda.powertools.sqs.LargeMessageHandler; +import software.amazon.lambda.powertools.sqs.SqsLargeMessage; import software.amazon.payloadoffloading.PayloadS3Pointer; import static com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; @@ -34,13 +34,13 @@ public class SqsLargeMessageAspect { private static AmazonS3 amazonS3 = AmazonS3ClientBuilder.defaultClient(); @SuppressWarnings({"EmptyMethod"}) - @Pointcut("@annotation(largeMessageHandler)") - public void callAt(LargeMessageHandler largeMessageHandler) { + @Pointcut("@annotation(sqsLargeMessage)") + public void callAt(SqsLargeMessage sqsLargeMessage) { } - @Around(value = "callAt(largeMessageHandler) && execution(@LargeMessageHandler * *.*(..))", argNames = "pjp,largeMessageHandler") + @Around(value = "callAt(sqsLargeMessage) && execution(@SqsLargeMessage * *.*(..))", argNames = "pjp,sqsLargeMessage") public Object around(ProceedingJoinPoint pjp, - LargeMessageHandler largeMessageHandler) throws Throwable { + SqsLargeMessage sqsLargeMessage) throws Throwable { Object[] proceedArgs = pjp.getArgs(); if (isHandlerMethod(pjp) @@ -49,7 +49,7 @@ && placedOnSqsEventRequestHandler(pjp)) { Object proceed = pjp.proceed(proceedArgs); - if (largeMessageHandler.deletePayloads()) { + if (sqsLargeMessage.deletePayloads()) { pointersToDelete.forEach(this::deleteMessageFromS3); } return proceed; diff --git a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/internal/SqsMessageBatchProcessorAspect.java b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/internal/SqsMessageBatchProcessorAspect.java index a6085219a..c704cb796 100644 --- a/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/internal/SqsMessageBatchProcessorAspect.java +++ b/powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/internal/SqsMessageBatchProcessorAspect.java @@ -5,23 +5,23 @@ import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; -import software.amazon.lambda.powertools.sqs.SqsBatchProcessor; +import software.amazon.lambda.powertools.sqs.SqsBatch; import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.isHandlerMethod; -import static software.amazon.lambda.powertools.sqs.PowertoolsSqs.batchProcessor; +import static software.amazon.lambda.powertools.sqs.SqsUtils.batchProcessor; import static software.amazon.lambda.powertools.sqs.internal.SqsLargeMessageAspect.placedOnSqsEventRequestHandler; @Aspect public class SqsMessageBatchProcessorAspect { @SuppressWarnings({"EmptyMethod"}) - @Pointcut("@annotation(sqsBatchProcessor)") - public void callAt(SqsBatchProcessor sqsBatchProcessor) { + @Pointcut("@annotation(sqsBatch)") + public void callAt(SqsBatch sqsBatch) { } - @Around(value = "callAt(sqsBatchProcessor) && execution(@SqsBatchProcessor * *.*(..))", argNames = "pjp,sqsBatchProcessor") + @Around(value = "callAt(sqsBatch) && execution(@SqsBatch * *.*(..))", argNames = "pjp,sqsBatch") public Object around(ProceedingJoinPoint pjp, - SqsBatchProcessor sqsBatchProcessor) throws Throwable { + SqsBatch sqsBatch) throws Throwable { Object[] proceedArgs = pjp.getArgs(); if (isHandlerMethod(pjp) @@ -29,7 +29,7 @@ && placedOnSqsEventRequestHandler(pjp)) { SQSEvent sqsEvent = (SQSEvent) proceedArgs[0]; - batchProcessor(sqsEvent, sqsBatchProcessor.suppressException(), sqsBatchProcessor.value()); + batchProcessor(sqsEvent, sqsBatch.suppressException(), sqsBatch.value()); } return pjp.proceed(proceedArgs); diff --git a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/PowertoolsSqsBatchProcessorTest.java b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/SqsUtilsBatchProcessorTest.java similarity index 97% rename from powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/PowertoolsSqsBatchProcessorTest.java rename to powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/SqsUtilsBatchProcessorTest.java index c894081d4..727f64001 100644 --- a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/PowertoolsSqsBatchProcessorTest.java +++ b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/SqsUtilsBatchProcessorTest.java @@ -25,10 +25,10 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; -import static software.amazon.lambda.powertools.sqs.PowertoolsSqs.batchProcessor; -import static software.amazon.lambda.powertools.sqs.PowertoolsSqs.overrideSqsClient; +import static software.amazon.lambda.powertools.sqs.SqsUtils.batchProcessor; +import static software.amazon.lambda.powertools.sqs.SqsUtils.overrideSqsClient; -class PowertoolsSqsBatchProcessorTest { +class SqsUtilsBatchProcessorTest { private static final SqsClient sqsClient = mock(SqsClient.class); private static final SqsClient interactionClient = mock(SqsClient.class); diff --git a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/PowertoolsSqsLargeMessageTest.java b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/SqsUtilsLargeMessageTest.java similarity index 91% rename from powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/PowertoolsSqsLargeMessageTest.java rename to powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/SqsUtilsLargeMessageTest.java index 1581e2c44..d704b04e0 100644 --- a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/PowertoolsSqsLargeMessageTest.java +++ b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/SqsUtilsLargeMessageTest.java @@ -35,7 +35,7 @@ import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.openMocks; -class PowertoolsSqsLargeMessageTest { +class SqsUtilsLargeMessageTest { @Mock private AmazonS3 amazonS3; @@ -56,7 +56,7 @@ public void testLargeMessage() { when(amazonS3.getObject(BUCKET_NAME, BUCKET_KEY)).thenReturn(s3Response); SQSEvent sqsEvent = messageWithBody("[\"software.amazon.payloadoffloading.PayloadS3Pointer\",{\"s3BucketName\":\"" + BUCKET_NAME + "\",\"s3Key\":\"" + BUCKET_KEY + "\"}]"); - Map sqsMessage = PowertoolsSqs.enrichedMessageFromS3(sqsEvent, sqsMessages -> { + Map sqsMessage = SqsUtils.enrichedMessageFromS3(sqsEvent, sqsMessages -> { Map someBusinessLogic = new HashMap<>(); someBusinessLogic.put("Message", sqsMessages.get(0).getBody()); return someBusinessLogic; @@ -78,7 +78,7 @@ public void testLargeMessageDeleteFromS3Toggle(boolean deleteS3Payload) { when(amazonS3.getObject(BUCKET_NAME, BUCKET_KEY)).thenReturn(s3Response); SQSEvent sqsEvent = messageWithBody("[\"software.amazon.payloadoffloading.PayloadS3Pointer\",{\"s3BucketName\":\"" + BUCKET_NAME + "\",\"s3Key\":\"" + BUCKET_KEY + "\"}]"); - Map sqsMessage = PowertoolsSqs.enrichedMessageFromS3(sqsEvent, deleteS3Payload, sqsMessages -> { + Map sqsMessage = SqsUtils.enrichedMessageFromS3(sqsEvent, deleteS3Payload, sqsMessages -> { Map someBusinessLogic = new HashMap<>(); someBusinessLogic.put("Message", sqsMessages.get(0).getBody()); return someBusinessLogic; @@ -102,7 +102,7 @@ public void shouldNotProcessSmallMessageBody() { when(amazonS3.getObject(BUCKET_NAME, BUCKET_KEY)).thenReturn(s3Response); SQSEvent sqsEvent = messageWithBody("This is small message"); - Map sqsMessage = PowertoolsSqs.enrichedMessageFromS3(sqsEvent, sqsMessages -> { + Map sqsMessage = SqsUtils.enrichedMessageFromS3(sqsEvent, sqsMessages -> { Map someBusinessLogic = new HashMap<>(); someBusinessLogic.put("Message", sqsMessages.get(0).getBody()); return someBusinessLogic; @@ -123,7 +123,7 @@ public void shouldFailEntireBatchIfFailedDownloadingFromS3(RuntimeException exce SQSEvent sqsEvent = messageWithBody(messageBody); assertThatExceptionOfType(SqsLargeMessageAspect.FailedProcessingLargePayloadException.class) - .isThrownBy(() -> PowertoolsSqs.enrichedMessageFromS3(sqsEvent, sqsMessages -> sqsMessages.get(0).getBody())) + .isThrownBy(() -> SqsUtils.enrichedMessageFromS3(sqsEvent, sqsMessages -> sqsMessages.get(0).getBody())) .withCause(exception); verify(amazonS3, never()).deleteObject(BUCKET_NAME, BUCKET_KEY); @@ -146,7 +146,7 @@ public void close() throws IOException { SQSEvent sqsEvent = messageWithBody(messageBody); assertThatExceptionOfType(SqsLargeMessageAspect.FailedProcessingLargePayloadException.class) - .isThrownBy(() -> PowertoolsSqs.enrichedMessageFromS3(sqsEvent, sqsMessages -> sqsMessages.get(0).getBody())) + .isThrownBy(() -> SqsUtils.enrichedMessageFromS3(sqsEvent, sqsMessages -> sqsMessages.get(0).getBody())) .withCauseInstanceOf(IOException.class); verify(amazonS3, never()).deleteObject(BUCKET_NAME, BUCKET_KEY); diff --git a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/LambdaHandlerApiGateway.java b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/LambdaHandlerApiGateway.java index 5a61c3514..b0d8177ac 100644 --- a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/LambdaHandlerApiGateway.java +++ b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/LambdaHandlerApiGateway.java @@ -3,15 +3,15 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; -import software.amazon.lambda.powertools.sqs.LargeMessageHandler; +import software.amazon.lambda.powertools.sqs.SqsLargeMessage; import software.amazon.lambda.powertools.sqs.SampleSqsHandler; -import software.amazon.lambda.powertools.sqs.SqsBatchProcessor; +import software.amazon.lambda.powertools.sqs.SqsBatch; public class LambdaHandlerApiGateway implements RequestHandler { @Override - @LargeMessageHandler - @SqsBatchProcessor(value = SampleSqsHandler.class) + @SqsLargeMessage + @SqsBatch(value = SampleSqsHandler.class) public String handleRequest(APIGatewayProxyRequestEvent sqsEvent, Context context) { return sqsEvent.getBody(); } diff --git a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchFailureSuppressedHandler.java b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchFailureSuppressedHandler.java index 7bec0e091..acd6170c0 100644 --- a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchFailureSuppressedHandler.java +++ b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchFailureSuppressedHandler.java @@ -3,7 +3,7 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SQSEvent; -import software.amazon.lambda.powertools.sqs.SqsBatchProcessor; +import software.amazon.lambda.powertools.sqs.SqsBatch; import software.amazon.lambda.powertools.sqs.SqsMessageHandler; import static com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; @@ -11,7 +11,7 @@ public class PartialBatchFailureSuppressedHandler implements RequestHandler { @Override - @SqsBatchProcessor(value = InnerMessageHandler.class, suppressException = true) + @SqsBatch(value = InnerMessageHandler.class, suppressException = true) public String handleRequest(final SQSEvent sqsEvent, final Context context) { return "Success"; diff --git a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchPartialFailureHandler.java b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchPartialFailureHandler.java index 6301f84ef..018e775f8 100644 --- a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchPartialFailureHandler.java +++ b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchPartialFailureHandler.java @@ -3,7 +3,7 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SQSEvent; -import software.amazon.lambda.powertools.sqs.SqsBatchProcessor; +import software.amazon.lambda.powertools.sqs.SqsBatch; import software.amazon.lambda.powertools.sqs.SqsMessageHandler; import static com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; @@ -11,7 +11,7 @@ public class PartialBatchPartialFailureHandler implements RequestHandler { @Override - @SqsBatchProcessor(InnerMessageHandler.class) + @SqsBatch(InnerMessageHandler.class) public String handleRequest(final SQSEvent sqsEvent, final Context context) { return "Success"; diff --git a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchSuccessHandler.java b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchSuccessHandler.java index 009db08b9..a9e7a07d9 100644 --- a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchSuccessHandler.java +++ b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/PartialBatchSuccessHandler.java @@ -3,7 +3,7 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SQSEvent; -import software.amazon.lambda.powertools.sqs.SqsBatchProcessor; +import software.amazon.lambda.powertools.sqs.SqsBatch; import software.amazon.lambda.powertools.sqs.SqsMessageHandler; import static com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; @@ -11,7 +11,7 @@ public class PartialBatchSuccessHandler implements RequestHandler { @Override - @SqsBatchProcessor(InnerMessageHandler.class) + @SqsBatch(InnerMessageHandler.class) public String handleRequest(final SQSEvent sqsEvent, final Context context) { return "Success"; diff --git a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/SqsMessageHandler.java b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/SqsMessageHandler.java index b3d7d4af7..ee8c100e6 100644 --- a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/SqsMessageHandler.java +++ b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/SqsMessageHandler.java @@ -3,12 +3,12 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SQSEvent; -import software.amazon.lambda.powertools.sqs.LargeMessageHandler; +import software.amazon.lambda.powertools.sqs.SqsLargeMessage; public class SqsMessageHandler implements RequestHandler { @Override - @LargeMessageHandler + @SqsLargeMessage public String handleRequest(SQSEvent sqsEvent, Context context) { return sqsEvent.getRecords().get(0).getBody(); } diff --git a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/SqsNoDeleteMessageHandler.java b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/SqsNoDeleteMessageHandler.java index a301a2a65..337592004 100644 --- a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/SqsNoDeleteMessageHandler.java +++ b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/handlers/SqsNoDeleteMessageHandler.java @@ -3,12 +3,12 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SQSEvent; -import software.amazon.lambda.powertools.sqs.LargeMessageHandler; +import software.amazon.lambda.powertools.sqs.SqsLargeMessage; public class SqsNoDeleteMessageHandler implements RequestHandler { @Override - @LargeMessageHandler(deletePayloads = false) + @SqsLargeMessage(deletePayloads = false) public String handleRequest(SQSEvent sqsEvent, Context context) { return sqsEvent.getRecords().get(0).getBody(); } diff --git a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/internal/SqsMessageBatchProcessorAspectTest.java b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/internal/SqsMessageBatchProcessorAspectTest.java index 7d7d3d023..a61981dff 100644 --- a/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/internal/SqsMessageBatchProcessorAspectTest.java +++ b/powertools-sqs/src/test/java/software/amazon/lambda/powertools/sqs/internal/SqsMessageBatchProcessorAspectTest.java @@ -29,7 +29,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; -import static software.amazon.lambda.powertools.sqs.PowertoolsSqs.overrideSqsClient; +import static software.amazon.lambda.powertools.sqs.SqsUtils.overrideSqsClient; public class SqsMessageBatchProcessorAspectTest { public static final Random mockedRandom = mock(Random.class); From bed4a58c503b1b6ed98d1d44a87dc11e2e26575b Mon Sep 17 00:00:00 2001 From: Pankaj Agrawal Date: Tue, 3 Nov 2020 14:40:32 +0100 Subject: [PATCH 5/5] Fix broken links --- docs/content/utilities/batch.mdx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/content/utilities/batch.mdx b/docs/content/utilities/batch.mdx index 23fcf25f7..2a2d0ccd5 100644 --- a/docs/content/utilities/batch.mdx +++ b/docs/content/utilities/batch.mdx @@ -85,7 +85,7 @@ This utility requires additional permissions to work as expected. Lambda functio ## Processing messages from SQS -You can use either **[SqsBatch annotation](#SqsBatch annotation)**, or **[SqsUtils Utility API](#SqsUtils Utility API)** as a fluent API. +You can use either **[SqsBatch annotation](#sqsbatch-annotation)**, or **[SqsUtils Utility API](#sqsutils-utility-api)** as a fluent API. Both have nearly the same behaviour when it comes to processing messages from the batch: @@ -99,7 +99,7 @@ utility will have access to both successful and failed messaged along with failu ## Functional Interface SqsMessageHandler -Both [annotation](#SqsBatch annotation) and [SqsUtils Utility API](#SqsUtils Utility API) requires an implementation of functional interface `SqsMessageHandler`. +Both [annotation](#sqsbatch-annotation) and [SqsUtils Utility API](#sqsutils-utility-api) requires an implementation of functional interface `SqsMessageHandler`. This implementation is responsible for processing each individual message from the batch, and to raise an exception if unable to process any of the messages sent. @@ -116,7 +116,6 @@ All records in the batch will be passed to this handler for processing, even if You will not have accessed to the processed messages within the Lambda Handler - all processing logic will and should be performed by the implemented SqsMessageHandler#process() function. -
    ```java:title=App.java @@ -192,7 +191,7 @@ public class AppSqsEvent implements RequestHandler> { ## Passing custom SqsClient If you need to pass custom SqsClient such as region to the SDK, you can pass your own `SqsClient` to be used by utility either for -**[SqsBatch annotation](#SqsBatch annotation)**, or **[SqsUtils Utility API](#SqsUtils Utility API)**. +**[SqsBatch annotation](#sqsbatch-annotation)**, or **[SqsUtils Utility API](#sqsutils-utility-api)**. ```java:title=App.java