Skip to content

Commit 956a24b

Browse files
author
Pankaj Agrawal
committed
feat: remove minimum 1 dimension validation
since EMF supports no dimension as well
1 parent 83e390b commit 956a24b

File tree

4 files changed

+18
-11
lines changed

4 files changed

+18
-11
lines changed

docs/core/metrics.md

-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ if no metrics are provided no exception will be raised. If metrics are provided,
108108
not met, `ValidationException` exception will be raised.
109109

110110
!!! tip "Metric validation"
111-
* Minimum of 1 dimension
112111
* Maximum of 9 dimensions
113112

114113
If you want to ensure that at least one metric is emitted, you can pass `raiseOnEmptyMetrics = true` to the **@Metrics** annotation:

powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspect.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ private void validateBeforeFlushingMetrics(Metrics metrics) {
9595
throw new ValidationException("No metrics captured, at least one metrics must be emitted");
9696
}
9797

98-
if (dimensionsCount() == 0 || dimensionsCount() > 9) {
99-
throw new ValidationException(String.format("Number of Dimensions must be in range of 1-9." +
98+
if (dimensionsCount() > 9) {
99+
throw new ValidationException(String.format("Number of Dimensions must be in range of 0-9." +
100100
" Actual size: %d.", dimensionsCount()));
101101
}
102102
}

powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/handlers/PowertoolsMetricsNoDimensionsHandler.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,19 @@
33
import com.amazonaws.services.lambda.runtime.Context;
44
import com.amazonaws.services.lambda.runtime.RequestHandler;
55
import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger;
6+
import software.amazon.cloudwatchlogs.emf.model.DimensionSet;
67
import software.amazon.lambda.powertools.metrics.Metrics;
78

89
import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger;
910

1011
public class PowertoolsMetricsNoDimensionsHandler implements RequestHandler<Object, Object> {
1112

1213
@Override
13-
@Metrics(namespace = "ExampleApplication", service = "booking", captureColdStart = true)
14+
@Metrics(namespace = "ExampleApplication", service = "booking")
1415
public Object handleRequest(Object input, Context context) {
1516
MetricsLogger metricsLogger = metricsLogger();
16-
metricsLogger.setDimensions();
17+
metricsLogger.putMetric("CoolMetric", 1);
18+
metricsLogger.setDimensions(new DimensionSet());
1719

1820
return null;
1921
}

powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspectTest.java

+12-6
Original file line numberDiff line numberDiff line change
@@ -296,16 +296,22 @@ public void noExceptionWhenNoMetricsEmitted() {
296296
}
297297

298298
@Test
299-
public void exceptionWhenNoDimensionsSet() {
299+
public void allowWhenNoDimensionsSet() {
300300
try (MockedStatic<SystemWrapper> mocked = mockStatic(SystemWrapper.class)) {
301301
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
302-
303302
MetricsUtils.defaultDimensionSet(new DimensionSet());
303+
304304
requestHandler = new PowertoolsMetricsNoDimensionsHandler();
305+
requestHandler.handleRequest("input", context);
305306

306-
assertThatExceptionOfType(ValidationException.class)
307-
.isThrownBy(() -> requestHandler.handleRequest("input", context))
308-
.withMessage("Number of Dimensions must be in range of 1-9. Actual size: 0.");
307+
assertThat(out.toString())
308+
.satisfies(s -> {
309+
Map<String, Object> logAsJson = readAsJson(s);
310+
assertThat(logAsJson)
311+
.containsEntry("CoolMetric", 1.0)
312+
.containsEntry("function_request_id", "123ABC")
313+
.containsKey("_aws");
314+
});
309315
}
310316
}
311317

@@ -321,7 +327,7 @@ public void exceptionWhenTooManyDimensionsSet() {
321327

322328
assertThatExceptionOfType(ValidationException.class)
323329
.isThrownBy(() -> requestHandler.handleRequest("input", context))
324-
.withMessage("Number of Dimensions must be in range of 1-9. Actual size: 14.");
330+
.withMessage("Number of Dimensions must be in range of 0-9. Actual size: 14.");
325331
}
326332
}
327333

0 commit comments

Comments
 (0)