From 1c57889347a41c7e2abed5f0f20dacc282dc627b Mon Sep 17 00:00:00 2001 From: "Jing (Paggy) Nie" Date: Tue, 4 Oct 2022 18:22:57 -0700 Subject: [PATCH 1/6] Skip adding dimensions with empty dimension value into default dimensions --- .../cloudwatchlogs/emf/logger/MetricsLogger.java | 15 +++++++++++---- .../emf/logger/MetricsLoggerTest.java | 13 +++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java b/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java index 54aa0ee4..d65f6310 100644 --- a/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java +++ b/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java @@ -33,6 +33,7 @@ import software.amazon.cloudwatchlogs.emf.model.MetricsContext; import software.amazon.cloudwatchlogs.emf.model.Unit; import software.amazon.cloudwatchlogs.emf.sinks.ISink; +import software.amazon.cloudwatchlogs.emf.util.StringUtils; /** * A metrics logger. Use this interface to publish logs to CloudWatch Logs and extract metrics to @@ -259,19 +260,25 @@ public MetricsLogger setTimestamp(Instant timestamp) throws InvalidTimestampExce return this; } - @SneakyThrows private void configureContextForEnvironment(MetricsContext context, Environment environment) { if (context.hasDefaultDimensions()) { return; } DimensionSet defaultDimension = new DimensionSet(); - defaultDimension.addDimension("LogGroup", environment.getLogGroupName()); - defaultDimension.addDimension("ServiceName", environment.getName()); - defaultDimension.addDimension("ServiceType", environment.getType()); + setDefaultDimension(defaultDimension, "LogGroup", environment.getLogGroupName()); + setDefaultDimension(defaultDimension, "ServiceName", environment.getName()); + setDefaultDimension(defaultDimension, "ServiceType", environment.getType()); context.setDefaultDimensions(defaultDimension); environment.configureContext(context); } + @SneakyThrows + private void setDefaultDimension(DimensionSet defaultDimension, String dimKey, String dimVal) { + if (!StringUtils.isNullOrEmpty(dimVal)) { + defaultDimension.addDimension(dimKey, dimVal); + } + } + private MetricsLogger applyReadLock(Supplier any) { rwl.readLock().lock(); try { diff --git a/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java b/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java index 089e0dba..b6855f1b 100644 --- a/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java +++ b/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java @@ -21,6 +21,7 @@ import java.time.Instant; import java.util.List; +import java.util.Set; import java.util.concurrent.CompletableFuture; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -84,6 +85,18 @@ void putDimensions_setsDimension() sink.getContext().getDimensions().get(0).getDimensionValue(dimensionName)); } + @Test + void whenDefaultDimension_DimensionValue_Null() throws InvalidDimensionException, DimensionSetExceededException{ + when(environment.getLogGroupName()).thenReturn(""); + logger.flush(); + + assertEquals(1, sink.getContext().getDimensions().size()); + Set dimensionKeys = sink.getContext().getDimensions().get(0).getDimensionKeys(); + assertEquals(2, dimensionKeys.size()); + dimensionKeys.contains("ServiceName"); + dimensionKeys.contains("ServiceType"); + } + @ParameterizedTest @ValueSource(strings = {"", " ", "ƊĪⱮḔǸŠƗȌŅ", ":dim"}) void whenSetDimension_withInvalidName_thenThrowInvalidDimensionException(String dimensionName) { From 9bc80f5f2f0432eae1d2a7cd6be4e04e7b438668 Mon Sep 17 00:00:00 2001 From: "Jing (Paggy) Nie" Date: Tue, 4 Oct 2022 18:29:37 -0700 Subject: [PATCH 2/6] fix UT test name of empty dimension value --- .../amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java b/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java index b6855f1b..fc8e1888 100644 --- a/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java +++ b/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java @@ -86,7 +86,7 @@ void putDimensions_setsDimension() } @Test - void whenDefaultDimension_DimensionValue_Null() throws InvalidDimensionException, DimensionSetExceededException{ + void whenDefaultDimension_DimensionValue_Empty() throws DimensionSetExceededException{ when(environment.getLogGroupName()).thenReturn(""); logger.flush(); From 027f8ebd9fd79f793235cae9e74e5bdeeaa55ddd Mon Sep 17 00:00:00 2001 From: "Jing (Paggy) Nie" Date: Wed, 5 Oct 2022 17:00:24 -0700 Subject: [PATCH 3/6] add stronger dimension validation on default dimension --- .../cloudwatchlogs/emf/logger/MetricsLogger.java | 10 ++++++---- .../emf/logger/MetricsLoggerTest.java | 14 +++++++++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java b/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java index d65f6310..87439175 100644 --- a/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java +++ b/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java @@ -26,6 +26,8 @@ import lombok.extern.slf4j.Slf4j; import software.amazon.cloudwatchlogs.emf.environment.Environment; import software.amazon.cloudwatchlogs.emf.environment.EnvironmentProvider; +import software.amazon.cloudwatchlogs.emf.exception.DimensionSetExceededException; +import software.amazon.cloudwatchlogs.emf.exception.InvalidDimensionException; import software.amazon.cloudwatchlogs.emf.exception.InvalidMetricException; import software.amazon.cloudwatchlogs.emf.exception.InvalidNamespaceException; import software.amazon.cloudwatchlogs.emf.exception.InvalidTimestampException; @@ -33,7 +35,6 @@ import software.amazon.cloudwatchlogs.emf.model.MetricsContext; import software.amazon.cloudwatchlogs.emf.model.Unit; import software.amazon.cloudwatchlogs.emf.sinks.ISink; -import software.amazon.cloudwatchlogs.emf.util.StringUtils; /** * A metrics logger. Use this interface to publish logs to CloudWatch Logs and extract metrics to @@ -266,16 +267,17 @@ private void configureContextForEnvironment(MetricsContext context, Environment } DimensionSet defaultDimension = new DimensionSet(); setDefaultDimension(defaultDimension, "LogGroup", environment.getLogGroupName()); - setDefaultDimension(defaultDimension, "ServiceName", environment.getName()); + setDefaultDimension(defaultDimension, "ServiceName", environment.getName()); setDefaultDimension(defaultDimension, "ServiceType", environment.getType()); context.setDefaultDimensions(defaultDimension); environment.configureContext(context); } - @SneakyThrows private void setDefaultDimension(DimensionSet defaultDimension, String dimKey, String dimVal) { - if (!StringUtils.isNullOrEmpty(dimVal)) { + try { defaultDimension.addDimension(dimKey, dimVal); + } catch (InvalidDimensionException | DimensionSetExceededException e) { + // just do nothing } } diff --git a/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java b/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java index fc8e1888..4b163189 100644 --- a/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java +++ b/src/test/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLoggerTest.java @@ -86,7 +86,7 @@ void putDimensions_setsDimension() } @Test - void whenDefaultDimension_DimensionValue_Empty() throws DimensionSetExceededException{ + void whenDefaultDimension_DimensionValue_Empty() throws DimensionSetExceededException { when(environment.getLogGroupName()).thenReturn(""); logger.flush(); @@ -97,6 +97,18 @@ void whenDefaultDimension_DimensionValue_Empty() throws DimensionSetExceededExce dimensionKeys.contains("ServiceType"); } + @Test + void whenDefaultDimension_DimensionValue_Blank() throws DimensionSetExceededException { + when(environment.getLogGroupName()).thenReturn(" "); + logger.flush(); + + assertEquals(1, sink.getContext().getDimensions().size()); + Set dimensionKeys = sink.getContext().getDimensions().get(0).getDimensionKeys(); + assertEquals(2, dimensionKeys.size()); + dimensionKeys.contains("ServiceName"); + dimensionKeys.contains("ServiceType"); + } + @ParameterizedTest @ValueSource(strings = {"", " ", "ƊĪⱮḔǸŠƗȌŅ", ":dim"}) void whenSetDimension_withInvalidName_thenThrowInvalidDimensionException(String dimensionName) { From bdbfdbb61111f0b9c2e492118a047db0776a63e2 Mon Sep 17 00:00:00 2001 From: "Jing (Paggy) Nie" Date: Wed, 5 Oct 2022 17:06:52 -0700 Subject: [PATCH 4/6] remove unused import --- .../software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java b/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java index 87439175..6a2119ad 100644 --- a/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java +++ b/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java @@ -22,7 +22,6 @@ import java.util.function.Supplier; import lombok.Getter; import lombok.Setter; -import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import software.amazon.cloudwatchlogs.emf.environment.Environment; import software.amazon.cloudwatchlogs.emf.environment.EnvironmentProvider; From b9369d4db3ef7f44223a7af87b17dbd05545d2c7 Mon Sep 17 00:00:00 2001 From: "Jing (Paggy) Nie" Date: Thu, 6 Oct 2022 10:09:21 -0700 Subject: [PATCH 5/6] fix format --- .../software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java b/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java index 6a2119ad..af826232 100644 --- a/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java +++ b/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java @@ -276,7 +276,6 @@ private void setDefaultDimension(DimensionSet defaultDimension, String dimKey, S try { defaultDimension.addDimension(dimKey, dimVal); } catch (InvalidDimensionException | DimensionSetExceededException e) { - // just do nothing } } From 95824a5a397efae5bd249db814dd0449df13b5cb Mon Sep 17 00:00:00 2001 From: "Jing (Paggy) Nie" Date: Thu, 6 Oct 2022 14:33:42 -0700 Subject: [PATCH 6/6] change name of exception --- .../amazon/cloudwatchlogs/emf/logger/MetricsLogger.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java b/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java index af826232..cf4a0cb6 100644 --- a/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java +++ b/src/main/java/software/amazon/cloudwatchlogs/emf/logger/MetricsLogger.java @@ -275,7 +275,7 @@ private void configureContextForEnvironment(MetricsContext context, Environment private void setDefaultDimension(DimensionSet defaultDimension, String dimKey, String dimVal) { try { defaultDimension.addDimension(dimKey, dimVal); - } catch (InvalidDimensionException | DimensionSetExceededException e) { + } catch (InvalidDimensionException | DimensionSetExceededException ignored) { } }