Skip to content

Commit da5a3b1

Browse files
authored
Fixed a bug of carrying default dimensions over flushes (#75)
* Fixed a bug of carrying default dimensions over flushes
1 parent c3816d5 commit da5a3b1

File tree

4 files changed

+74
-5
lines changed

4 files changed

+74
-5
lines changed

src/main/java/software/amazon/cloudwatchlogs/emf/model/Metadata.java

+5
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ MetricDirective createMetricDirective() {
7070
return newMetricDirective;
7171
}
7272

73+
void setMetricDirective(MetricDirective metricDirective) {
74+
cloudWatchMetrics = new ArrayList<>();
75+
cloudWatchMetrics.add(metricDirective);
76+
}
77+
7378
/**
7479
* Test if there's any metric added.
7580
*

src/main/java/software/amazon/cloudwatchlogs/emf/model/MetricDirective.java

+14
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,18 @@ List<DimensionSet> getAllDimensions() {
115115
boolean hasNoMetrics() {
116116
return this.getMetrics().isEmpty();
117117
}
118+
119+
/**
120+
* Create a copy of the metric directive without having the existing metrics
121+
*
122+
* @return A object of metric directive
123+
*/
124+
MetricDirective copyWithoutMetrics() {
125+
MetricDirective metricDirective = new MetricDirective();
126+
metricDirective.setDefaultDimensions(this.defaultDimensions);
127+
metricDirective.setDimensions(this.dimensions);
128+
metricDirective.setNamespace(this.namespace);
129+
metricDirective.shouldUseDefaultDimension = this.shouldUseDefaultDimension;
130+
return metricDirective;
131+
}
118132
}

src/main/java/software/amazon/cloudwatchlogs/emf/model/MetricsContext.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ public MetricsContext(RootNode rootNode) {
3737
metricDirective = rootNode.getAws().createMetricDirective();
3838
}
3939

40+
public MetricsContext(MetricDirective metricDirective) {
41+
this();
42+
this.rootNode.getAws().setMetricDirective(metricDirective);
43+
this.metricDirective = metricDirective;
44+
}
45+
4046
public MetricsContext(
4147
String namespace,
4248
Map<String, Object> properties,
@@ -191,11 +197,7 @@ public void putMetadata(String key, Object value) {
191197

192198
/** @return Creates an independently flushable context. */
193199
public MetricsContext createCopyWithContext() {
194-
return new MetricsContext(
195-
this.metricDirective.getNamespace(),
196-
this.rootNode.getProperties(),
197-
this.metricDirective.getDimensions(),
198-
this.metricDirective.getDefaultDimensions());
200+
return new MetricsContext(metricDirective.copyWithoutMetrics());
199201
}
200202

201203
/**

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

+48
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package software.amazon.cloudwatchlogs.emf.logger;
1818

1919
import static org.junit.Assert.assertEquals;
20+
import static org.junit.Assert.assertFalse;
2021
import static org.junit.Assert.assertTrue;
2122
import static org.mockito.Mockito.*;
2223

@@ -201,6 +202,53 @@ public void testNoDefaultDimensionsAfterSetDimension() {
201202
expectDimension("Name", "Test");
202203
}
203204

205+
@Test
206+
public void testFlushPreserveDimensions() {
207+
MetricsLogger logger = new MetricsLogger(envProvider);
208+
logger.setDimensions(DimensionSet.of("Name", "Test"));
209+
logger.flush();
210+
expectDimension("Name", "Test");
211+
212+
logger.flush();
213+
expectDimension("Name", "Test");
214+
}
215+
216+
@Test
217+
public void testFlushDoesntPreserveMetrics() {
218+
MetricsLogger logger = new MetricsLogger(envProvider);
219+
logger.setDimensions(DimensionSet.of("Name", "Test"));
220+
logger.putMetric("Count", 1.0);
221+
logger.flush();
222+
assertTrue(sink.getLogEvents().get(0).contains("Count"));
223+
224+
logger.flush();
225+
assertFalse(sink.getLogEvents().get(0).contains("Count"));
226+
}
227+
228+
@Test
229+
public void testNoDimensionsAfterSetEmptyDimensionSet() {
230+
MetricsLogger logger = new MetricsLogger(envProvider);
231+
232+
logger.setDimensions();
233+
logger.flush();
234+
235+
List<DimensionSet> dimensions = sink.getContext().getDimensions();
236+
assertEquals(0, dimensions.size());
237+
}
238+
239+
@Test
240+
public void testNoDimensionsAfterSetEmptyDimensionSetWithMultipleFlush() {
241+
MetricsLogger logger = new MetricsLogger(envProvider);
242+
243+
logger.setDimensions();
244+
logger.flush();
245+
246+
assertEquals(0, sink.getContext().getDimensions().size());
247+
248+
logger.flush();
249+
assertEquals(0, sink.getContext().getDimensions().size());
250+
}
251+
204252
private void expectDimension(String dimension, String value) {
205253
List<DimensionSet> dimensions = sink.getContext().getDimensions();
206254
assertEquals(dimensions.size(), 1);

0 commit comments

Comments
 (0)