Skip to content

Commit e7de627

Browse files
authored
Skip adding dimensions with empty dimension value into default dimension (#126)
* Skip adding dimensions with empty dimension value into default dimensions Co-authored-by: Jing (Paggy) Nie <[email protected]>
1 parent 19ef5ca commit e7de627

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java

+12-5
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@
2222
import java.util.function.Supplier;
2323
import lombok.Getter;
2424
import lombok.Setter;
25-
import lombok.SneakyThrows;
2625
import lombok.extern.slf4j.Slf4j;
2726
import software.amazon.cloudwatchlogs.emf.environment.Environment;
2827
import software.amazon.cloudwatchlogs.emf.environment.EnvironmentProvider;
28+
import software.amazon.cloudwatchlogs.emf.exception.DimensionSetExceededException;
29+
import software.amazon.cloudwatchlogs.emf.exception.InvalidDimensionException;
2930
import software.amazon.cloudwatchlogs.emf.exception.InvalidMetricException;
3031
import software.amazon.cloudwatchlogs.emf.exception.InvalidNamespaceException;
3132
import software.amazon.cloudwatchlogs.emf.exception.InvalidTimestampException;
@@ -259,19 +260,25 @@ public MetricsLogger setTimestamp(Instant timestamp) throws InvalidTimestampExce
259260
return this;
260261
}
261262

262-
@SneakyThrows
263263
private void configureContextForEnvironment(MetricsContext context, Environment environment) {
264264
if (context.hasDefaultDimensions()) {
265265
return;
266266
}
267267
DimensionSet defaultDimension = new DimensionSet();
268-
defaultDimension.addDimension("LogGroup", environment.getLogGroupName());
269-
defaultDimension.addDimension("ServiceName", environment.getName());
270-
defaultDimension.addDimension("ServiceType", environment.getType());
268+
setDefaultDimension(defaultDimension, "LogGroup", environment.getLogGroupName());
269+
setDefaultDimension(defaultDimension, "ServiceName", environment.getName());
270+
setDefaultDimension(defaultDimension, "ServiceType", environment.getType());
271271
context.setDefaultDimensions(defaultDimension);
272272
environment.configureContext(context);
273273
}
274274

275+
private void setDefaultDimension(DimensionSet defaultDimension, String dimKey, String dimVal) {
276+
try {
277+
defaultDimension.addDimension(dimKey, dimVal);
278+
} catch (InvalidDimensionException | DimensionSetExceededException ignored) {
279+
}
280+
}
281+
275282
private MetricsLogger applyReadLock(Supplier<MetricsLogger> any) {
276283
rwl.readLock().lock();
277284
try {

src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java

+25
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import java.time.Instant;
2323
import java.util.List;
24+
import java.util.Set;
2425
import java.util.concurrent.CompletableFuture;
2526
import org.junit.jupiter.api.BeforeEach;
2627
import org.junit.jupiter.api.Test;
@@ -84,6 +85,30 @@ void putDimensions_setsDimension()
8485
sink.getContext().getDimensions().get(0).getDimensionValue(dimensionName));
8586
}
8687

88+
@Test
89+
void whenDefaultDimension_DimensionValue_Empty() throws DimensionSetExceededException {
90+
when(environment.getLogGroupName()).thenReturn("");
91+
logger.flush();
92+
93+
assertEquals(1, sink.getContext().getDimensions().size());
94+
Set<String> dimensionKeys = sink.getContext().getDimensions().get(0).getDimensionKeys();
95+
assertEquals(2, dimensionKeys.size());
96+
dimensionKeys.contains("ServiceName");
97+
dimensionKeys.contains("ServiceType");
98+
}
99+
100+
@Test
101+
void whenDefaultDimension_DimensionValue_Blank() throws DimensionSetExceededException {
102+
when(environment.getLogGroupName()).thenReturn(" ");
103+
logger.flush();
104+
105+
assertEquals(1, sink.getContext().getDimensions().size());
106+
Set<String> dimensionKeys = sink.getContext().getDimensions().get(0).getDimensionKeys();
107+
assertEquals(2, dimensionKeys.size());
108+
dimensionKeys.contains("ServiceName");
109+
dimensionKeys.contains("ServiceType");
110+
}
111+
87112
@ParameterizedTest
88113
@ValueSource(strings = {"", " ", "ƊĪⱮḔǸŠƗȌŅ", ":dim"})
89114
void whenSetDimension_withInvalidName_thenThrowInvalidDimensionException(String dimensionName) {

0 commit comments

Comments
 (0)