From 89f379a942c5e08146ced74abbcd28c1e98acc84 Mon Sep 17 00:00:00 2001 From: Ahmed Kamel Date: Mon, 20 Feb 2023 19:55:33 +0000 Subject: [PATCH 1/4] chore(metrics): deprecated MetricsUtils.withMetricLogger in favor of MetricsUtils.withMetricsLogger closes #1059 --- .../powertools/metrics/MetricsUtils.java | 20 ++++++++++++++++--- .../powertools/metrics/MetricsLoggerTest.java | 2 +- 2 files changed, 18 insertions(+), 4 deletions(-) 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 d58dd52d6..8fada176e 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 @@ -81,7 +81,7 @@ public static void withSingleMetric(final String name, final double value, final Unit unit, final Consumer logger) { - withMetricLogger(metricsLogger -> { + withMetricsLogger(metricsLogger -> { metricsLogger.putMetric(name, value, unit); logger.accept(metricsLogger); }); @@ -103,7 +103,7 @@ public static void withSingleMetric(final String name, final Unit unit, final String namespace, final Consumer logger) { - withMetricLogger(metricsLogger -> { + withMetricsLogger(metricsLogger -> { metricsLogger.setNamespace(namespace); metricsLogger.putMetric(name, value, unit); logger.accept(metricsLogger); @@ -118,7 +118,7 @@ public static void withSingleMetric(final String name, * * @param logger the MetricsLogger */ - public static void withMetricLogger(final Consumer logger) { + public static void withMetricsLogger(final Consumer logger) { MetricsLogger metricsLogger = logger(); try { @@ -130,6 +130,20 @@ public static void withMetricLogger(final Consumer logger) { } } + /** + * Provide and immediately flush a {@link MetricsLogger}. It uses the default namespace + * specified either on {@link Metrics} annotation or via POWERTOOLS_METRICS_NAMESPACE env var. + * It by default captures function_request_id as property if used together with {@link Metrics} annotation. It will also + * capture xray_trace_id as property if tracing is enabled. + * + * @param logger the MetricsLogger + * + * @deprecated use {@link MetricsUtils#withMetricsLogger} instead + */ + public static void withMetricLogger(final Consumer logger) { + withMetricLogger(logger); + } + public static DimensionSet[] getDefaultDimensions() { return Arrays.copyOf(defaultDimensions, defaultDimensions.length); } 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 20f56c3e2..39795ec96 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 @@ -130,7 +130,7 @@ void metricsLoggerCaptureUtilityWithDefaultNameSpace() { mocked.when(() -> SystemWrapper.getenv("POWERTOOLS_METRICS_NAMESPACE")).thenReturn("GlobalName"); internalWrapper.when(() -> getenv("_X_AMZN_TRACE_ID")).thenReturn("Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1\""); - MetricsUtils.withMetricLogger(metricsLogger -> { + MetricsUtils.withMetricsLogger(metricsLogger -> { metricsLogger.setDimensions(DimensionSet.of("Dimension1", "Value1")); metricsLogger.putMetric("Metric1", 1, Unit.COUNT); }); From 876d17f9966bcf9ab4a53074c68bce827f439170 Mon Sep 17 00:00:00 2001 From: Ahmed Kamel Date: Tue, 21 Feb 2023 08:21:14 +0000 Subject: [PATCH 2/4] Update powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsUtils.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jérôme Van Der Linden <117538+jeromevdl@users.noreply.github.com> --- .../software/amazon/lambda/powertools/metrics/MetricsUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8fada176e..091bc3eb4 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 @@ -141,7 +141,7 @@ public static void withMetricsLogger(final Consumer logger) { * @deprecated use {@link MetricsUtils#withMetricsLogger} instead */ public static void withMetricLogger(final Consumer logger) { - withMetricLogger(logger); + withMetricsLogger(logger); } public static DimensionSet[] getDefaultDimensions() { From 8f0105b7922fee7ffaf66e0c7ae5f001b3e1fbbc Mon Sep 17 00:00:00 2001 From: Ahmed Kamel Date: Tue, 21 Feb 2023 10:42:14 +0000 Subject: [PATCH 3/4] Add @Deprecated and test deprecated method --- .../powertools/metrics/MetricsUtils.java | 1 + .../powertools/metrics/MetricsLoggerTest.java | 27 +++++++++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) 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 091bc3eb4..8705c2da4 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 @@ -140,6 +140,7 @@ public static void withMetricsLogger(final Consumer logger) { * * @deprecated use {@link MetricsUtils#withMetricsLogger} instead */ + @Deprecated public static void withMetricLogger(final Consumer logger) { withMetricsLogger(logger); } 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 39795ec96..d8b4209c4 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 @@ -3,6 +3,7 @@ import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.util.Map; +import java.util.function.Consumer; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -12,6 +13,7 @@ import org.junit.jupiter.api.Test; import org.mockito.MockedStatic; import software.amazon.cloudwatchlogs.emf.config.SystemWrapper; +import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger; import software.amazon.cloudwatchlogs.emf.model.DimensionSet; import software.amazon.cloudwatchlogs.emf.model.Unit; @@ -124,13 +126,29 @@ void singleMetricsCaptureUtilityWithDefaultNameSpace() { @Test void metricsLoggerCaptureUtilityWithDefaultNameSpace() { + testWithNewLogger(MetricsUtils::withMetricsLogger); + } + + @Test + void deprecatedMetricLoggerCaptureUtilityWithDefaultNameSpace() { + testWithNewLogger(MetricsUtils::withMetricLogger); + } + + @Test + void shouldThrowExceptionWhenDefaultDimensionIsNull() { + assertThatNullPointerException() + .isThrownBy(() -> MetricsUtils.defaultDimensionSet(null)) + .withMessage("Null dimension set not allowed"); + } + + private void testWithNewLogger(Consumer> methodToTest) { 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"); mocked.when(() -> SystemWrapper.getenv("POWERTOOLS_METRICS_NAMESPACE")).thenReturn("GlobalName"); internalWrapper.when(() -> getenv("_X_AMZN_TRACE_ID")).thenReturn("Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1\""); - MetricsUtils.withMetricsLogger(metricsLogger -> { + methodToTest.accept(metricsLogger -> { metricsLogger.setDimensions(DimensionSet.of("Dimension1", "Value1")); metricsLogger.putMetric("Metric1", 1, Unit.COUNT); }); @@ -154,13 +172,6 @@ void metricsLoggerCaptureUtilityWithDefaultNameSpace() { } } - @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); From bc86d36bcfd60f6d3c51d4a0929191281a1c8d04 Mon Sep 17 00:00:00 2001 From: Ahmed Kamel Date: Tue, 21 Feb 2023 13:23:01 +0000 Subject: [PATCH 4/4] rename testWithNewLogger to testLogger --- .../amazon/lambda/powertools/metrics/MetricsLoggerTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 d8b4209c4..6ebf30e04 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 @@ -126,12 +126,12 @@ void singleMetricsCaptureUtilityWithDefaultNameSpace() { @Test void metricsLoggerCaptureUtilityWithDefaultNameSpace() { - testWithNewLogger(MetricsUtils::withMetricsLogger); + testLogger(MetricsUtils::withMetricsLogger); } @Test void deprecatedMetricLoggerCaptureUtilityWithDefaultNameSpace() { - testWithNewLogger(MetricsUtils::withMetricLogger); + testLogger(MetricsUtils::withMetricLogger); } @Test @@ -141,7 +141,7 @@ void shouldThrowExceptionWhenDefaultDimensionIsNull() { .withMessage("Null dimension set not allowed"); } - private void testWithNewLogger(Consumer> methodToTest) { + private void testLogger(Consumer> methodToTest) { 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");