Skip to content

Commit a178128

Browse files
committed
Update setDefaultDimensions to take a DimensionSet instead of a Map.
1 parent feeefdc commit a178128

File tree

8 files changed

+49
-30
lines changed

8 files changed

+49
-30
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ default void addMetric(String key, double value) {
6767
default void addDimension(String key, String value) {
6868
addDimension(DimensionSet.of(key, value));
6969
}
70-
70+
7171
/**
7272
* Add a dimension set to the metrics logger
7373
*
@@ -86,9 +86,9 @@ default void addDimension(String key, String value) {
8686
/**
8787
* Set default dimensions for the metrics logger
8888
*
89-
* @param defaultDimensions map of default dimensions
89+
* @param dimensionSet the dimension set to use as default dimensions
9090
*/
91-
void setDefaultDimensions(Map<String, String> defaultDimensions);
91+
void setDefaultDimensions(DimensionSet dimensionSet);
9292

9393
/**
9494
* Get the default dimensions for the metrics logger

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import java.util.LinkedHashMap;
1818
import java.util.Map;
19+
import software.amazon.lambda.powertools.metrics.model.DimensionSet;
1920

2021
import software.amazon.lambda.powertools.metrics.provider.MetricsProvider;
2122

@@ -101,11 +102,13 @@ public MetricsLoggerBuilder withDefaultDimension(String key, String value) {
101102
/**
102103
* Add default dimensions
103104
*
104-
* @param dimensions map of dimensions
105+
* @param dimensionSet the dimension set to add
105106
* @return this builder
106107
*/
107-
public MetricsLoggerBuilder withDefaultDimensions(Map<String, String> dimensions) {
108-
this.defaultDimensions.putAll(dimensions);
108+
public MetricsLoggerBuilder withDefaultDimensions(DimensionSet dimensionSet) {
109+
if (dimensionSet != null) {
110+
this.defaultDimensions.putAll(dimensionSet.getDimensions());
111+
}
109112
return this;
110113
}
111114

@@ -128,12 +131,12 @@ public MetricsLogger build() {
128131
metricsLogger.setRaiseOnEmptyMetrics(raiseOnEmptyMetrics);
129132

130133
if (service != null) {
131-
metricsLogger.setDefaultDimensions(Map.of("Service", service));
134+
metricsLogger.setDefaultDimensions(DimensionSet.of("Service", service));
132135
}
133136

134137
// If the user provided default dimension, we overwrite the default Service dimension again
135138
if (!defaultDimensions.isEmpty()) {
136-
metricsLogger.setDefaultDimensions(defaultDimensions);
139+
metricsLogger.setDefaultDimensions(DimensionSet.of(defaultDimensions));
137140
}
138141

139142
return metricsLogger;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
package software.amazon.lambda.powertools.metrics;
1616

17-
import java.util.Map;
17+
import software.amazon.lambda.powertools.metrics.model.DimensionSet;
1818

1919
import software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor;
2020
import software.amazon.lambda.powertools.metrics.provider.EmfMetricsProvider;
@@ -45,7 +45,7 @@ public static synchronized MetricsLogger getMetricsLogger() {
4545
metricsLogger.setNamespace(envNamespace);
4646
}
4747

48-
metricsLogger.setDefaultDimensions(Map.of("Service", LambdaHandlerProcessor.serviceName()));
48+
metricsLogger.setDefaultDimensions(DimensionSet.of("Service", LambdaHandlerProcessor.serviceName()));
4949
}
5050

5151
return metricsLogger;

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,23 @@ public void addMetadata(String key, Object value) {
8989
}
9090

9191
@Override
92-
public void setDefaultDimensions(Map<String, String> defaultDimensions) {
93-
DimensionSet dimensionSet = new DimensionSet();
94-
defaultDimensions.forEach((key, value) -> {
92+
public void setDefaultDimensions(software.amazon.lambda.powertools.metrics.model.DimensionSet dimensionSet) {
93+
if (dimensionSet == null) {
94+
throw new IllegalArgumentException("DimensionSet cannot be null");
95+
}
96+
97+
DimensionSet emfDimensionSet = new DimensionSet();
98+
Map<String, String> dimensions = dimensionSet.getDimensions();
99+
dimensions.forEach((key, value) -> {
95100
try {
96-
dimensionSet.addDimension(key, value);
101+
emfDimensionSet.addDimension(key, value);
97102
} catch (Exception e) {
98103
// Ignore dimension errors
99104
}
100105
});
101-
emfLogger.setDimensions(dimensionSet);
106+
emfLogger.setDimensions(emfDimensionSet);
102107
// Store a copy of the default dimensions
103-
this.defaultDimensions = new LinkedHashMap<>(defaultDimensions);
108+
this.defaultDimensions = new LinkedHashMap<>(dimensions);
104109
}
105110

106111
@Override

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
import static software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor.extractContext;
1919
import static software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor.isHandlerMethod;
2020

21-
import java.util.Map;
22-
2321
import org.aspectj.lang.ProceedingJoinPoint;
2422
import org.aspectj.lang.annotation.Around;
2523
import org.aspectj.lang.annotation.Aspect;
@@ -78,7 +76,7 @@ public Object around(ProceedingJoinPoint pjp,
7876
if (!"".equals(metrics.service())
7977
&& logger.getDefaultDimensions().getDimensionKeys().size() <= 1
8078
&& logger.getDefaultDimensions().getDimensionKeys().contains(SERVICE_DIMENSION)) {
81-
logger.setDefaultDimensions(Map.of(SERVICE_DIMENSION, metrics.service()));
79+
logger.setDefaultDimensions(DimensionSet.of(SERVICE_DIMENSION, metrics.service()));
8280
}
8381

8482
logger.setRaiseOnEmptyMetrics(metrics.raiseOnEmptyMetrics());

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import java.io.ByteArrayOutputStream;
2121
import java.io.PrintStream;
22-
import java.util.Map;
2322

2423
import org.junit.jupiter.api.AfterEach;
2524
import org.junit.jupiter.api.BeforeEach;
@@ -28,6 +27,7 @@
2827
import com.fasterxml.jackson.databind.JsonNode;
2928
import com.fasterxml.jackson.databind.ObjectMapper;
3029

30+
import software.amazon.lambda.powertools.metrics.model.DimensionSet;
3131
import software.amazon.lambda.powertools.metrics.model.MetricUnit;
3232
import software.amazon.lambda.powertools.metrics.provider.MetricsProvider;
3333
import software.amazon.lambda.powertools.metrics.testutils.TestMetricsLogger;
@@ -130,7 +130,7 @@ void shouldBuildWithDefaultDimension() throws Exception {
130130
void shouldBuildWithMultipleDefaultDimensions() throws Exception {
131131
// When
132132
MetricsLogger metricsLogger = MetricsLoggerBuilder.builder()
133-
.withDefaultDimensions(Map.of("Environment", "Test", "Region", "us-west-2"))
133+
.withDefaultDimensions(DimensionSet.of("Environment", "Test", "Region", "us-west-2"))
134134
.build();
135135

136136
metricsLogger.addMetric("test-metric", 100, MetricUnit.COUNT);
@@ -165,7 +165,7 @@ void shouldOverrideServiceWithDefaultDimensions() throws Exception {
165165
// When
166166
MetricsLogger metricsLogger = MetricsLoggerBuilder.builder()
167167
.withService("OriginalService")
168-
.withDefaultDimensions(Map.of("Service", "OverriddenService"))
168+
.withDefaultDimensions(DimensionSet.of("Service", "OverriddenService"))
169169
.build();
170170

171171
metricsLogger.addMetric("test-metric", 100, MetricUnit.COUNT);

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

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.io.ByteArrayOutputStream;
2121
import java.io.PrintStream;
2222
import java.lang.reflect.Method;
23-
import java.util.Map;
2423
import java.util.stream.Stream;
2524

2625
import org.junit.jupiter.api.AfterEach;
@@ -182,12 +181,12 @@ void shouldAddDimension() throws Exception {
182181
}
183182
assertThat(hasDimension).isTrue();
184183
}
185-
184+
186185
@Test
187186
void shouldAddDimensionSet() throws Exception {
188187
// Given
189188
DimensionSet dimensionSet = DimensionSet.of("Dim1", "Value1", "Dim2", "Value2");
190-
189+
191190
// When
192191
metricsLogger.clearDefaultDimensions(); // Clear default Service dimension first for easier assertions
193192
metricsLogger.addDimension(dimensionSet);
@@ -218,7 +217,7 @@ void shouldAddDimensionSet() throws Exception {
218217
assertThat(hasDim1).isTrue();
219218
assertThat(hasDim2).isTrue();
220219
}
221-
220+
222221
@Test
223222
void shouldThrowExceptionWhenDimensionSetIsNull() {
224223
// When/Then
@@ -245,8 +244,11 @@ void shouldAddMetadata() throws Exception {
245244

246245
@Test
247246
void shouldSetDefaultDimensions() throws Exception {
247+
// Given
248+
DimensionSet dimensionSet = DimensionSet.of("Service", "TestService", "Environment", "Test");
249+
248250
// When
249-
metricsLogger.setDefaultDimensions(Map.of("Service", "TestService", "Environment", "Test"));
251+
metricsLogger.setDefaultDimensions(dimensionSet);
250252
metricsLogger.addMetric("test-metric", 100);
251253
metricsLogger.flush();
252254

@@ -262,15 +264,26 @@ void shouldSetDefaultDimensions() throws Exception {
262264

263265
@Test
264266
void shouldGetDefaultDimensions() {
267+
// Given
268+
DimensionSet dimensionSet = DimensionSet.of("Service", "TestService", "Environment", "Test");
269+
265270
// When
266-
metricsLogger.setDefaultDimensions(Map.of("Service", "TestService", "Environment", "Test"));
271+
metricsLogger.setDefaultDimensions(dimensionSet);
267272
DimensionSet dimensions = metricsLogger.getDefaultDimensions();
268273

269274
// Then
270275
assertThat(dimensions.getDimensions()).containsEntry("Service", "TestService");
271276
assertThat(dimensions.getDimensions()).containsEntry("Environment", "Test");
272277
}
273278

279+
@Test
280+
void shouldThrowExceptionWhenDefaultDimensionSetIsNull() {
281+
// When/Then
282+
assertThatThrownBy(() -> metricsLogger.setDefaultDimensions((DimensionSet) null))
283+
.isInstanceOf(IllegalArgumentException.class)
284+
.hasMessage("DimensionSet cannot be null");
285+
}
286+
274287
@Test
275288
void shouldSetNamespace() throws Exception {
276289
// When
@@ -300,7 +313,7 @@ void shouldRaiseExceptionOnEmptyMetrics() {
300313
@Test
301314
void shouldClearDefaultDimensions() throws Exception {
302315
// Given
303-
metricsLogger.setDefaultDimensions(Map.of("Service", "TestService", "Environment", "Test"));
316+
metricsLogger.setDefaultDimensions(DimensionSet.of("Service", "TestService", "Environment", "Test"));
304317

305318
// When
306319
metricsLogger.clearDefaultDimensions();

powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/testutils/TestMetricsLogger.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void addMetadata(String key, Object value) {
3737
}
3838

3939
@Override
40-
public void setDefaultDimensions(Map<String, String> defaultDimensions) {
40+
public void setDefaultDimensions(DimensionSet dimensionSet) {
4141
// Test placeholder
4242
}
4343

0 commit comments

Comments
 (0)