diff --git a/README.md b/README.md
index 68827a999..c4b38a5e9 100644
--- a/README.md
+++ b/README.md
@@ -17,17 +17,17 @@ Powertools is available in Maven Central. You can use your favourite dependency
software.amazon.lambda
powertools-tracing
- 1.12.3
+ 2.0.0-beta
software.amazon.lambda
powertools-logging
- 1.12.3
+ 2.0.0-beta
software.amazon.lambda
powertools-metrics
- 1.12.3
+ 2.0.0-beta
...
diff --git a/docs/core/metrics.md b/docs/core/metrics.md
index 4d250df48..65aecf680 100644
--- a/docs/core/metrics.md
+++ b/docs/core/metrics.md
@@ -89,8 +89,12 @@ You can create metrics using `putMetric`, and manually create dimensions for all
@Override
@Metrics(namespace = "ExampleApplication", service = "booking")
public Object handleRequest(Object input, Context context) {
- metricsLogger.putDimensions(DimensionSet.of("environment", "prod"));
- metricsLogger.putMetric("SuccessfulBooking", 1, Unit.COUNT);
+ try {
+ metricsLogger.putDimensions(DimensionSet.of("environment", "prod"));
+ metricsLogger.putMetric("SuccessfulBooking", 1, Unit.COUNT);
+ } catch (InvalidDimensionException | InvalidMetricException | DimensionSetExceededException e) {
+ LOG.error(e);
+ }
...
}
}
@@ -173,8 +177,12 @@ You can use `putMetadata` for advanced use cases, where you want to metadata as
@Override
@Metrics(namespace = "ServerlessAirline", service = "payment")
public Object handleRequest(Object input, Context context) {
- metricsLogger().putMetric("CustomMetric1", 1, Unit.COUNT);
- metricsLogger().putMetadata("booking_id", "1234567890");
+ try {
+ metricsLogger().putMetadata("booking_id", "1234567890");
+ metricsLogger().putMetric("CustomMetric1", 1, Unit.COUNT);
+ } catch (InvalidMetricException e) {
+ throw new RuntimeException(e);
+ }
...
}
}
@@ -199,7 +207,11 @@ Dimension, it can be done via `#!java MetricsUtils.defaultDimensions()`.
MetricsLogger metricsLogger = MetricsUtils.metricsLogger();
static {
- MetricsUtils.defaultDimensions(DimensionSet.of("CustomDimension", "booking"));
+ try {
+ MetricsUtils.defaultDimensions(DimensionSet.of("CustomDimension", "booking"));
+ } catch (InvalidDimensionException | DimensionSetExceededException e) {
+ throw new RuntimeException(e);
+ }
}
@Override
@@ -228,8 +240,12 @@ CloudWatch EMF uses the same dimensions across all your metrics. Use `withSingle
@Override
public Object handleRequest(Object input, Context context) {
- withSingleMetric("CustomMetrics2", 1, Unit.COUNT, "Another", (metric) -> {
- metric.setDimensions(DimensionSet.of("AnotherService", "CustomService"));
+ withSingleMetric("CustomMetrics2", 1, Unit.COUNT, "Another", (metric) -> {
+ try {
+ metric.setDimensions(DimensionSet.of("AnotherService", "CustomService"));
+ } catch (InvalidDimensionException | DimensionSetExceededException e) {
+ throw new RuntimeException(e);
+ }
});
}
}
diff --git a/docs/utilities/sqs_large_message_handling.md b/docs/utilities/sqs_large_message_handling.md
index 95dc34e35..65c4b7b4d 100644
--- a/docs/utilities/sqs_large_message_handling.md
+++ b/docs/utilities/sqs_large_message_handling.md
@@ -144,7 +144,7 @@ To disable deletion of payloads setting the following annotation parameter:
## Utility
If you want to avoid using annotation and have control over error that can happen during payload enrichment use `SqsUtils.enrichedMessageFromS3()`.
-It provides you access with list of `SQSMessage` object enriched from S3 payload.
+It provides you access with a 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.
diff --git a/mkdocs.yml b/mkdocs.yml
index 574b8b30a..d9ccf4f69 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -76,7 +76,7 @@ extra_javascript:
extra:
powertools:
- version: 1.12.3
+ version: 2.0.0-beta
repo_url: https://github.com/awslabs/aws-lambda-powertools-java
edit_uri: edit/master/docs
diff --git a/pom.xml b/pom.xml
index b9dfd769f..670febd95 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
software.amazon.lambda
powertools-parent
- 1.12.3
+ 2.0.0-beta
pom
AWS Lambda Powertools for Java library Parent
@@ -56,13 +56,13 @@
1.8
1.8
2.19.0
- 2.13.4.2
+ 2.14.1
1.9.7
- 2.18.9
- 2.12.0
+ 2.18.22
+ 2.13.0
2.1.2
UTF-8
- 1.2.1
+ 1.2.2
3.11.0
1.0.0
3.10.1
@@ -75,7 +75,7 @@
3.2.1
3.0.1
5.9.1
- 1.0.6
+ 4.0.3
0.5.1
@@ -244,13 +244,13 @@
org.mockito
mockito-core
- 4.8.1
+ 4.9.0
test
org.mockito
mockito-inline
- 4.8.1
+ 4.9.0
test
@@ -457,7 +457,7 @@
com.github.spotbugs
spotbugs-maven-plugin
- 4.7.2.1
+ 4.7.3.0
test
diff --git a/powertools-cloudformation/pom.xml b/powertools-cloudformation/pom.xml
index 2547e717e..bfb931f09 100644
--- a/powertools-cloudformation/pom.xml
+++ b/powertools-cloudformation/pom.xml
@@ -10,7 +10,7 @@
powertools-parent
software.amazon.lambda
- 1.12.3
+ 2.0.0-beta
AWS Lambda Powertools for Java library Cloudformation
diff --git a/powertools-core/pom.xml b/powertools-core/pom.xml
index f54c24e12..025775e4d 100644
--- a/powertools-core/pom.xml
+++ b/powertools-core/pom.xml
@@ -10,7 +10,7 @@
powertools-parent
software.amazon.lambda
- 1.12.3
+ 2.0.0-beta
AWS Lambda Powertools for Java library Core
diff --git a/powertools-idempotency/pom.xml b/powertools-idempotency/pom.xml
index 632619d45..06e776971 100644
--- a/powertools-idempotency/pom.xml
+++ b/powertools-idempotency/pom.xml
@@ -7,7 +7,7 @@
software.amazon.lambda
powertools-parent
- 1.12.3
+ 2.0.0-beta
powertools-idempotency
@@ -91,7 +91,7 @@
org.junit-pioneer
junit-pioneer
- 1.7.1
+ 1.9.0
test
diff --git a/powertools-logging/pom.xml b/powertools-logging/pom.xml
index 59a98b4a9..a9df2ef0e 100644
--- a/powertools-logging/pom.xml
+++ b/powertools-logging/pom.xml
@@ -10,7 +10,7 @@
powertools-parent
software.amazon.lambda
- 1.12.3
+ 2.0.0-beta
AWS Lambda Powertools for Java library Logging
diff --git a/powertools-metrics/pom.xml b/powertools-metrics/pom.xml
index 1f83a6c19..dbc05b2f5 100644
--- a/powertools-metrics/pom.xml
+++ b/powertools-metrics/pom.xml
@@ -10,7 +10,7 @@
powertools-parent
software.amazon.lambda
- 1.12.3
+ 2.0.0-beta
AWS Lambda Powertools for Java library Metrics
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 f59658e9c..30d443fce 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
@@ -1,10 +1,13 @@
package software.amazon.cloudwatchlogs.emf.model;
+import software.amazon.cloudwatchlogs.emf.exception.DimensionSetExceededException;
+
import java.lang.reflect.Field;
import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger;
public final class MetricsLoggerHelper {
+
private MetricsLoggerHelper() {
}
@@ -13,7 +16,11 @@ public static boolean hasNoMetrics() {
}
public static long dimensionsCount() {
- return metricsContext().getDimensions().size();
+ try {
+ return metricsContext().getDimensions().size();
+ } catch (DimensionSetExceededException e) {
+ throw new RuntimeException("Too many dimensions defined", e);
+ }
}
public static MetricsContext metricsContext() {
diff --git a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsUtils.java b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsUtils.java
index 443ef3976..4a416b3c8 100644
--- a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsUtils.java
+++ b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsUtils.java
@@ -6,13 +6,14 @@
import software.amazon.cloudwatchlogs.emf.config.SystemWrapper;
import software.amazon.cloudwatchlogs.emf.environment.EnvironmentProvider;
+import software.amazon.cloudwatchlogs.emf.exception.InvalidMetricException;
+import software.amazon.cloudwatchlogs.emf.exception.InvalidNamespaceException;
import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger;
import software.amazon.cloudwatchlogs.emf.model.DimensionSet;
import software.amazon.cloudwatchlogs.emf.model.MetricsContext;
import software.amazon.cloudwatchlogs.emf.model.MetricsLoggerHelper;
import software.amazon.cloudwatchlogs.emf.model.Unit;
-import static java.util.Objects.requireNonNull;
import static java.util.Optional.ofNullable;
import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.getXrayTraceId;
import static software.amazon.lambda.powertools.metrics.internal.LambdaMetricsAspect.REQUEST_ID_PROPERTY;
@@ -49,23 +50,6 @@ public static void defaultDimensions(final DimensionSet... dimensionSets) {
MetricsUtils.defaultDimensions = dimensionSets;
}
- /**
- * Configure default dimension to be used by logger.
- * By default, @{@link Metrics} annotation captures configured service as a dimension Service
- * @param dimensionSet Default value of dimension set for logger
- * @deprecated use {@link #defaultDimensions(DimensionSet...)} instead
- *
- */
- @Deprecated
- public static void defaultDimensionSet(final DimensionSet dimensionSet) {
- requireNonNull(dimensionSet, "Null dimension set not allowed");
-
- if(dimensionSet.getDimensionKeys().size() > 0) {
- defaultDimensions(dimensionSet);
- }
- }
-
-
/**
* Add and immediately flush a single metric. It will use the default namespace
* specified either on {@link Metrics} annotation or via POWERTOOLS_METRICS_NAMESPACE env var.
@@ -88,6 +72,10 @@ public static void withSingleMetric(final String name,
metricsLogger.putMetric(name, value, unit);
captureRequestAndTraceId(metricsLogger);
logger.accept(metricsLogger);
+ } catch (InvalidNamespaceException e) {
+ throw new RuntimeException("A valid namespace is required, either pass it to the @Metrics annotation or set the environment variable POWERTOOLS_METRICS_NAMESPACE", e);
+ } catch (InvalidMetricException e) {
+ throw new RuntimeException(e);
} finally {
metricsLogger.flush();
}
@@ -116,6 +104,10 @@ public static void withSingleMetric(final String name,
metricsLogger.putMetric(name, value, unit);
captureRequestAndTraceId(metricsLogger);
logger.accept(metricsLogger);
+ } catch (InvalidNamespaceException e) {
+ throw new RuntimeException("A valid namespace is required, either pass it to the @Metrics annotation or set the environment variable POWERTOOLS_METRICS_NAMESPACE", e);
+ } catch (InvalidMetricException e) {
+ throw new RuntimeException(e);
} finally {
metricsLogger.flush();
}
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 09fd5d87d..b45dfbc4b 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
@@ -7,6 +7,10 @@
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
+import software.amazon.cloudwatchlogs.emf.exception.DimensionSetExceededException;
+import software.amazon.cloudwatchlogs.emf.exception.InvalidDimensionException;
+import software.amazon.cloudwatchlogs.emf.exception.InvalidMetricException;
+import software.amazon.cloudwatchlogs.emf.exception.InvalidNamespaceException;
import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger;
import software.amazon.cloudwatchlogs.emf.model.DimensionSet;
import software.amazon.cloudwatchlogs.emf.model.MetricsContext;
@@ -83,12 +87,24 @@ private void coldStartSingleMetricIfApplicable(final String awsRequestId,
final Metrics metrics) {
if (metrics.captureColdStart()
&& isColdStart()) {
- MetricsLogger metricsLogger = new MetricsLogger();
+ MetricsLogger metricsLogger = new MetricsLogger();
+ try {
metricsLogger.setNamespace(namespace(metrics));
+ } catch (InvalidNamespaceException e) {
+ throw new RuntimeException("A valid namespace is required, either pass it to the @Metrics annotation or set the environment variable POWERTOOLS_METRICS_NAMESPACE", e);
+ }
+ try {
metricsLogger.putMetric("ColdStart", 1, Unit.COUNT);
+ } catch (InvalidMetricException e) {
+ // should not occur
+ }
+ try {
metricsLogger.setDimensions(DimensionSet.of("Service", service(metrics), "FunctionName", functionName));
- metricsLogger.putProperty(REQUEST_ID_PROPERTY, awsRequestId);
- metricsLogger.flush();
+ } catch (InvalidDimensionException | DimensionSetExceededException e) {
+ throw new RuntimeException("A valid service is required, either pass it to the @Metrics annotation or set the environment variable POWERTOOLS_SERVICE_NAME", e);
+ }
+ metricsLogger.putProperty(REQUEST_ID_PROPERTY, awsRequestId);
+ metricsLogger.flush();
}
}
@@ -136,6 +152,8 @@ public static void refreshMetricsContext(Metrics metrics) {
f.set(metricsLogger(), context);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
+ } catch (InvalidDimensionException | DimensionSetExceededException e) {
+ throw new RuntimeException("A valid service is required, either pass it to the @Metrics annotation or set the environment variable POWERTOOLS_SERVICE_NAME", e);
}
}
}
diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsLoggerTest.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsLoggerTest.java
index 449f12815..53bd44410 100644
--- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsLoggerTest.java
+++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsLoggerTest.java
@@ -13,6 +13,8 @@
import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import software.amazon.cloudwatchlogs.emf.config.SystemWrapper;
+import software.amazon.cloudwatchlogs.emf.exception.DimensionSetExceededException;
+import software.amazon.cloudwatchlogs.emf.exception.InvalidDimensionException;
import software.amazon.cloudwatchlogs.emf.model.DimensionSet;
import software.amazon.cloudwatchlogs.emf.model.Unit;
@@ -46,7 +48,7 @@ static void beforeAll() {
}
@Test
- void singleMetricsCaptureUtilityWithDefaultDimension() {
+ void singleMetricsCaptureUtilityWithDefaultDimension() throws InvalidDimensionException, DimensionSetExceededException {
try (MockedStatic mocked = mockStatic(SystemWrapper.class);
MockedStatic internalWrapper = mockStatic(software.amazon.lambda.powertools.core.internal.SystemWrapper.class)) {
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
@@ -78,7 +80,13 @@ void singleMetricsCaptureUtility() {
internalWrapper.when(() -> getenv("_X_AMZN_TRACE_ID")).thenReturn("Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1\"");
MetricsUtils.withSingleMetric("Metric1", 1, Unit.COUNT, "test",
- metricsLogger -> metricsLogger.setDimensions(DimensionSet.of("Dimension1", "Value1")));
+ metricsLogger -> {
+ try {
+ metricsLogger.setDimensions(DimensionSet.of("Dimension1", "Value1"));
+ } catch (InvalidDimensionException | DimensionSetExceededException e) {
+ throw new RuntimeException(e);
+ }
+ });
assertThat(out.toString())
.satisfies(s -> {
@@ -102,7 +110,13 @@ void singleMetricsCaptureUtilityWithDefaultNameSpace() {
internalWrapper.when(() -> getenv("_X_AMZN_TRACE_ID")).thenReturn("Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1\"");
MetricsUtils.withSingleMetric("Metric1", 1, Unit.COUNT,
- metricsLogger -> metricsLogger.setDimensions(DimensionSet.of("Dimension1", "Value1")));
+ metricsLogger -> {
+ try {
+ metricsLogger.setDimensions(DimensionSet.of("Dimension1", "Value1"));
+ } catch (InvalidDimensionException | DimensionSetExceededException e) {
+ throw new RuntimeException(e);
+ }
+ });
assertThat(out.toString())
.satisfies(s -> {
@@ -123,13 +137,6 @@ void singleMetricsCaptureUtilityWithDefaultNameSpace() {
}
}
- @Test
- void shouldThrowExceptionWhenDefaultDimensionIsNull() {
- assertThatNullPointerException()
- .isThrownBy(() -> MetricsUtils.defaultDimensionSet(null))
- .withMessage("Null dimension set not allowed");
- }
-
private Map readAsJson(String s) {
try {
return mapper.readValue(s, Map.class);
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 a722bd689..85bb6b4e4 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
@@ -2,6 +2,7 @@
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
+import software.amazon.cloudwatchlogs.emf.exception.InvalidMetricException;
import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger;
import software.amazon.cloudwatchlogs.emf.model.Unit;
import software.amazon.lambda.powertools.metrics.Metrics;
@@ -14,7 +15,11 @@ public class PowertoolsMetricsColdStartEnabledHandler implements RequestHandler<
@Metrics(namespace = "ExampleApplication", service = "booking", captureColdStart = true)
public Object handleRequest(Object input, Context context) {
MetricsLogger metricsLogger = metricsLogger();
- metricsLogger.putMetric("Metric1", 1, Unit.BYTES);
+ try {
+ metricsLogger.putMetric("Metric1", 1, Unit.BYTES);
+ } catch (InvalidMetricException e) {
+ throw new RuntimeException(e);
+ }
return null;
}
diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledDefaultDimensionHandler.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledDefaultDimensionHandler.java
index f66269546..8b77b6672 100644
--- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledDefaultDimensionHandler.java
+++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsEnabledDefaultDimensionHandler.java
@@ -2,6 +2,9 @@
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
+import software.amazon.cloudwatchlogs.emf.exception.DimensionSetExceededException;
+import software.amazon.cloudwatchlogs.emf.exception.InvalidDimensionException;
+import software.amazon.cloudwatchlogs.emf.exception.InvalidMetricException;
import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger;
import software.amazon.cloudwatchlogs.emf.model.DimensionSet;
import software.amazon.cloudwatchlogs.emf.model.Unit;
@@ -14,14 +17,23 @@
public class PowertoolsMetricsEnabledDefaultDimensionHandler implements RequestHandler