Skip to content

Commit 6164c3f

Browse files
author
Pankaj Agrawal
committed
feat: support for setting list of default dimensions
1 parent edbc105 commit 6164c3f

File tree

5 files changed

+40
-24
lines changed

5 files changed

+40
-24
lines changed

powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsUtils.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
*/
2626
public final class MetricsUtils {
2727
private static final MetricsLogger metricsLogger = new MetricsLogger();
28-
private static DimensionSet defaultDimensionSet;
28+
private static DimensionSet[] defaultDimensions;
2929

3030
private MetricsUtils() {
3131
}
@@ -39,14 +39,29 @@ public static MetricsLogger metricsLogger() {
3939
return metricsLogger;
4040
}
4141

42+
/**
43+
* Configure default dimension to be used by logger.
44+
* By default, @{@link Metrics} annotation captures configured service as a dimension <i>Service</i>
45+
* @param dimensionSets Default value of dimensions set for logger
46+
*/
47+
public static void defaultDimensions(final DimensionSet... dimensionSets) {
48+
MetricsUtils.defaultDimensions = dimensionSets;
49+
}
50+
4251
/**
4352
* Configure default dimension to be used by logger.
4453
* By default, @{@link Metrics} annotation captures configured service as a dimension <i>Service</i>
4554
* @param dimensionSet Default value of dimension set for logger
55+
* @deprecated use {@link #defaultDimensions(DimensionSet...)} instead
56+
*
4657
*/
58+
@Deprecated
4759
public static void defaultDimensionSet(final DimensionSet dimensionSet) {
4860
requireNonNull(dimensionSet, "Null dimension set not allowed");
49-
MetricsUtils.defaultDimensionSet = dimensionSet;
61+
62+
if(dimensionSet.getDimensionKeys().size() > 0) {
63+
MetricsUtils.defaultDimensions = new DimensionSet[]{dimensionSet};
64+
}
5065
}
5166

5267

@@ -105,12 +120,12 @@ public static void withSingleMetric(final String name,
105120
}
106121
}
107122

108-
public static DimensionSet defaultDimensionSet() {
109-
return defaultDimensionSet;
123+
public static DimensionSet[] defaultDimensions() {
124+
return defaultDimensions;
110125
}
111126

112127
public static boolean hasDefaultDimension() {
113-
return null != defaultDimensionSet && defaultDimensionSet.getDimensionKeys().size() > 0;
128+
return null != defaultDimensions;
114129
}
115130

116131
private static void captureRequestAndTraceId(MetricsLogger metricsLogger) {
@@ -137,7 +152,8 @@ private static MetricsLogger logger() {
137152
MetricsContext metricsContext = new MetricsContext();
138153

139154
if (hasDefaultDimension()) {
140-
metricsContext.setDefaultDimensions(defaultDimensionSet());
155+
metricsContext.setDefaultDimensions(new DimensionSet());
156+
metricsContext.setDimensions(defaultDimensions);
141157
}
142158

143159
return new MetricsLogger(new EnvironmentProvider(), metricsContext);

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import software.amazon.cloudwatchlogs.emf.model.Unit;
1313
import software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor;
1414
import software.amazon.lambda.powertools.metrics.Metrics;
15+
import software.amazon.lambda.powertools.metrics.MetricsUtils;
1516
import software.amazon.lambda.powertools.metrics.ValidationException;
1617

1718
import static software.amazon.cloudwatchlogs.emf.model.MetricsLoggerHelper.dimensionsCount;
@@ -23,7 +24,6 @@
2324
import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.placedOnRequestHandler;
2425
import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.placedOnStreamHandler;
2526
import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.serviceName;
26-
import static software.amazon.lambda.powertools.metrics.MetricsUtils.defaultDimensionSet;
2727
import static software.amazon.lambda.powertools.metrics.MetricsUtils.hasDefaultDimension;
2828
import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger;
2929

@@ -125,10 +125,11 @@ public static void refreshMetricsContext(Metrics metrics) {
125125
f.setAccessible(true);
126126
MetricsContext context = new MetricsContext();
127127

128-
DimensionSet defaultDimensionSet = hasDefaultDimension() ? defaultDimensionSet()
129-
: DimensionSet.of("Service", service(metrics));
128+
DimensionSet[] defaultDimensions = hasDefaultDimension() ? MetricsUtils.defaultDimensions()
129+
: new DimensionSet[]{DimensionSet.of("Service", service(metrics))};
130130

131-
context.setDefaultDimensions(defaultDimensionSet);
131+
context.setDefaultDimensions(new DimensionSet());
132+
context.setDimensions(defaultDimensions);
132133

133134
f.set(metricsLogger(), context);
134135
} catch (NoSuchFieldException | IllegalAccessException e) {

powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsLoggerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void singleMetricsCaptureUtilityWithDefaultDimension() {
5252
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
5353
internalWrapper.when(() -> getenv("_X_AMZN_TRACE_ID")).thenReturn("Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1\"");
5454

55-
MetricsUtils.defaultDimensionSet(DimensionSet.of("Service", "Booking"));
55+
MetricsUtils.defaultDimensions(DimensionSet.of("Service", "Booking"));
5656

5757
MetricsUtils.withSingleMetric("Metric1", 1, Unit.COUNT, "test",
5858
metricsLogger -> {});

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
import software.amazon.cloudwatchlogs.emf.model.Unit;
88
import software.amazon.lambda.powertools.metrics.Metrics;
99

10-
import static software.amazon.lambda.powertools.metrics.MetricsUtils.defaultDimensionSet;
10+
import static software.amazon.lambda.powertools.metrics.MetricsUtils.defaultDimensions;
1111
import static software.amazon.lambda.powertools.metrics.MetricsUtils.metricsLogger;
1212
import static software.amazon.lambda.powertools.metrics.MetricsUtils.withSingleMetric;
1313

1414
public class PowertoolsMetricsEnabledDefaultDimensionHandler implements RequestHandler<Object, Object> {
1515

1616
static {
17-
defaultDimensionSet(DimensionSet.of("CustomDimension", "booking"));
17+
defaultDimensions(DimensionSet.of("CustomDimension", "booking"));
1818
}
1919

2020
@Override

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

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ public class LambdaMetricsAspectTest {
4949
private final PrintStream originalOut = System.out;
5050
private final ObjectMapper mapper = new ObjectMapper();
5151
private RequestHandler<Object, Object> requestHandler;
52-
private RequestStreamHandler streamHandler;
5352

5453

5554
@BeforeAll
@@ -80,7 +79,7 @@ public void metricsWithoutColdStart() {
8079
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
8180
internalWrapper.when(() -> getenv("_X_AMZN_TRACE_ID")).thenReturn("Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1\"");
8281

83-
MetricsUtils.defaultDimensionSet(new DimensionSet());
82+
MetricsUtils.defaultDimensions((DimensionSet)null);
8483
requestHandler = new PowertoolsMetricsEnabledHandler();
8584
requestHandler.handleRequest("input", context);
8685

@@ -161,7 +160,7 @@ public void metricsWithColdStart() {
161160

162161
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
163162

164-
MetricsUtils.defaultDimensionSet(new DimensionSet());
163+
MetricsUtils.defaultDimensions((DimensionSet)null);
165164
requestHandler = new PowertoolsMetricsColdStartEnabledHandler();
166165

167166
requestHandler.handleRequest("input", context);
@@ -196,7 +195,7 @@ public void noColdStartMetricsWhenColdStartDone() {
196195
try (MockedStatic<SystemWrapper> mocked = mockStatic(SystemWrapper.class)) {
197196
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
198197

199-
MetricsUtils.defaultDimensionSet(new DimensionSet());
198+
MetricsUtils.defaultDimensions((DimensionSet)null);
200199
requestHandler = new PowertoolsMetricsColdStartEnabledHandler();
201200

202201
requestHandler.handleRequest("input", context);
@@ -241,8 +240,8 @@ public void metricsWithStreamHandler() throws IOException {
241240
try (MockedStatic<SystemWrapper> mocked = mockStatic(SystemWrapper.class)) {
242241
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
243242

244-
MetricsUtils.defaultDimensionSet(new DimensionSet());
245-
streamHandler = new PowertoolsMetricsEnabledStreamHandler();
243+
MetricsUtils.defaultDimensions((DimensionSet)null);
244+
RequestStreamHandler streamHandler = new PowertoolsMetricsEnabledStreamHandler();
246245

247246
streamHandler.handleRequest(new ByteArrayInputStream(new byte[]{}), new ByteArrayOutputStream(), context);
248247

@@ -264,7 +263,7 @@ public void exceptionWhenNoMetricsEmitted() {
264263
try (MockedStatic<SystemWrapper> mocked = mockStatic(SystemWrapper.class)) {
265264
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
266265

267-
MetricsUtils.defaultDimensionSet(new DimensionSet());
266+
MetricsUtils.defaultDimensions((DimensionSet) null);
268267
requestHandler = new PowertoolsMetricsExceptionWhenNoMetricsHandler();
269268

270269
assertThatExceptionOfType(ValidationException.class)
@@ -279,7 +278,7 @@ public void noExceptionWhenNoMetricsEmitted() {
279278
try (MockedStatic<SystemWrapper> mocked = mockStatic(SystemWrapper.class)) {
280279
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
281280

282-
MetricsUtils.defaultDimensionSet(new DimensionSet());
281+
MetricsUtils.defaultDimensions((DimensionSet)null);
283282
requestHandler = new PowertoolsMetricsNoExceptionWhenNoMetricsHandler();
284283

285284
requestHandler.handleRequest("input", context);
@@ -299,7 +298,7 @@ public void noExceptionWhenNoMetricsEmitted() {
299298
public void allowWhenNoDimensionsSet() {
300299
try (MockedStatic<SystemWrapper> mocked = mockStatic(SystemWrapper.class)) {
301300
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
302-
MetricsUtils.defaultDimensionSet(new DimensionSet());
301+
MetricsUtils.defaultDimensions((DimensionSet)null);
303302

304303
requestHandler = new PowertoolsMetricsNoDimensionsHandler();
305304
requestHandler.handleRequest("input", context);
@@ -321,7 +320,7 @@ public void exceptionWhenTooManyDimensionsSet() {
321320
try (MockedStatic<SystemWrapper> mocked = mockStatic(SystemWrapper.class)) {
322321
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
323322

324-
MetricsUtils.defaultDimensionSet(new DimensionSet());
323+
MetricsUtils.defaultDimensions((DimensionSet)null);
325324

326325
requestHandler = new PowertoolsMetricsTooManyDimensionsHandler();
327326

@@ -336,7 +335,7 @@ public void metricsPublishedEvenHandlerThrowsException() {
336335
try (MockedStatic<SystemWrapper> mocked = mockStatic(SystemWrapper.class)) {
337336
mocked.when(() -> SystemWrapper.getenv("AWS_EMF_ENVIRONMENT")).thenReturn("Lambda");
338337

339-
MetricsUtils.defaultDimensionSet(new DimensionSet());
338+
MetricsUtils.defaultDimensions((DimensionSet)null);
340339
requestHandler = new PowertoolsMetricsWithExceptionInHandler();
341340

342341
assertThatExceptionOfType(IllegalStateException.class)

0 commit comments

Comments
 (0)