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..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 @@ -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,21 @@ 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 + */ + @Deprecated + public static void withMetricLogger(final Consumer logger) { + withMetricsLogger(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..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 @@ -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() { + testLogger(MetricsUtils::withMetricsLogger); + } + + @Test + void deprecatedMetricLoggerCaptureUtilityWithDefaultNameSpace() { + testLogger(MetricsUtils::withMetricLogger); + } + + @Test + void shouldThrowExceptionWhenDefaultDimensionIsNull() { + assertThatNullPointerException() + .isThrownBy(() -> MetricsUtils.defaultDimensionSet(null)) + .withMessage("Null dimension set not allowed"); + } + + 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"); 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 -> { + 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);