Skip to content

Commit 2a2d259

Browse files
committed
Updated Tests and wordings
1 parent 74aaadb commit 2a2d259

File tree

2 files changed

+61
-9
lines changed

2 files changed

+61
-9
lines changed

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@
1818

1919
import com.fasterxml.jackson.annotation.JsonIgnore;
2020
import com.fasterxml.jackson.annotation.JsonProperty;
21-
import lombok.Getter;
2221
import lombok.NonNull;
2322

2423
/** Represents the StatisticSet of the EMF schema. */
2524
class StatisticSet extends Metric {
26-
@JsonIgnore @NonNull @Getter protected Statistics values;
25+
@JsonIgnore @NonNull protected Statistics values;
2726

2827
StatisticSet(
2928
Unit unit,
@@ -51,6 +50,11 @@ class StatisticSet extends Metric {
5150
this.values = statistics;
5251
}
5352

53+
@Override
54+
Statistics getValues() {
55+
return values;
56+
}
57+
5458
@Override
5559
protected Metric getMetricValuesUnderSize(int size) {
5660
return this;
@@ -116,7 +120,8 @@ class Statistics {
116120
|| (count == 1 && max != min)
117121
|| min + max * (count - 1) < sum
118122
|| max + min * (count - 1) > sum) {
119-
throw new IllegalArgumentException("This is an impossible statistic set");
123+
throw new IllegalArgumentException(
124+
"This is an impossible statistic set, there is no set of values that can create these statistics.");
120125
}
121126
this.max = max;
122127
this.min = min;

src/test/java/software/amazon/cloudwatchlogs/emf/model/MetricsContextTest.java

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ void testSerializeLessThan100Metrics() throws JsonProcessingException, InvalidMe
4646
List<String> events = mc.serialize();
4747
Assertions.assertEquals(1, events.size());
4848

49-
List<MetricDefinition> metrics = parseMetrics(events.get(0));
49+
List<MetricDefinition> metrics = parseMetricDefinitions(events.get(0));
5050
Assertions.assertEquals(metrics.size(), metricCount);
5151
for (MetricDefinition metric : metrics) {
5252
MetricDefinition originalMetric =
@@ -71,7 +71,7 @@ void testSerializeMoreThen100Metrics() throws JsonProcessingException, InvalidMe
7171

7272
List<MetricDefinition> allMetrics = new ArrayList<>();
7373
for (String event : events) {
74-
allMetrics.addAll(parseMetrics(event));
74+
allMetrics.addAll(parseMetricDefinitions(event));
7575
}
7676
Assertions.assertEquals(metricCount, allMetrics.size());
7777
for (MetricDefinition metric : allMetrics) {
@@ -97,7 +97,7 @@ void testSerializeAMetricWith101DataPoints()
9797
Assertions.assertEquals(expectedEventCount, events.size());
9898
List<MetricDefinition> allMetrics = new ArrayList<>();
9999
for (String event : events) {
100-
allMetrics.addAll(parseMetrics(event));
100+
allMetrics.addAll(parseMetricDefinitions(event));
101101
}
102102
List<Double> expectedValues = new ArrayList<>();
103103
for (int i = 0; i < Constants.MAX_DATAPOINTS_PER_METRIC; i++) {
@@ -122,8 +122,8 @@ void testSerializeMetricsWith101DataPoints()
122122
List<String> events = mc.serialize();
123123
Assertions.assertEquals(expectedEventCount, events.size());
124124

125-
List<MetricDefinition> metricsFromEvent1 = parseMetrics(events.get(0));
126-
List<MetricDefinition> metricsFromEvent2 = parseMetrics(events.get(1));
125+
List<MetricDefinition> metricsFromEvent1 = parseMetricDefinitions(events.get(0));
126+
List<MetricDefinition> metricsFromEvent2 = parseMetricDefinitions(events.get(1));
127127

128128
Assertions.assertEquals(2, metricsFromEvent1.size());
129129
List<Double> expectedValues = new ArrayList<>();
@@ -155,6 +155,23 @@ void testSerializeZeroMetric()
155155
Assertions.assertFalse(rootNode.containsKey("_aws"));
156156
}
157157

158+
@Test
159+
void testSerializeStatisticSetMetric() throws JsonProcessingException {
160+
MetricsContext mc = new MetricsContext();
161+
int dataPointCount = 100;
162+
String metricName = "metric1";
163+
for (int i = 0; i < dataPointCount; i++) {
164+
mc.putMetric(metricName, i, AggregationType.STATISTIC_SET);
165+
}
166+
167+
List<String> events = mc.serialize();
168+
System.out.println(events);
169+
List<StatisticSet> statisticSets = parseStatisticSetMetrics(events.get(0));
170+
Assertions.assertEquals(1, statisticSets.size());
171+
Assertions.assertEquals(
172+
new Statistics(99., 0., 100, 4950.), statisticSets.get(0).getValues());
173+
}
174+
158175
@Test
159176
@SuppressWarnings("unchecked")
160177
void testSetTimestamp()
@@ -189,7 +206,8 @@ void testPutMetadata() {
189206
}
190207

191208
@SuppressWarnings("unchecked")
192-
private ArrayList<MetricDefinition> parseMetrics(String event) throws JsonProcessingException {
209+
private ArrayList<MetricDefinition> parseMetricDefinitions(String event)
210+
throws JsonProcessingException {
193211
Map<String, Object> rootNode = parseRootNode(event);
194212
Map<String, Object> metadata = (Map<String, Object>) rootNode.get("_aws");
195213
ArrayList<Map<String, Object>> metricDirectives =
@@ -215,6 +233,35 @@ private ArrayList<MetricDefinition> parseMetrics(String event) throws JsonProces
215233
return metricDefinitions;
216234
}
217235

236+
@SuppressWarnings("unchecked")
237+
private ArrayList<StatisticSet> parseStatisticSetMetrics(String event)
238+
throws JsonProcessingException {
239+
Map<String, Object> rootNode = parseRootNode(event);
240+
Map<String, Object> metadata = (Map<String, Object>) rootNode.get("_aws");
241+
ArrayList<Map<String, Object>> metricDirectives =
242+
(ArrayList<Map<String, Object>>) metadata.get("CloudWatchMetrics");
243+
ArrayList<Map<String, String>> metrics =
244+
(ArrayList<Map<String, String>>) metricDirectives.get(0).get("Metrics");
245+
246+
ArrayList<StatisticSet> statisticSets = new ArrayList<>();
247+
for (Map<String, String> metric : metrics) {
248+
String name = metric.get("Name");
249+
Unit unit = Unit.fromValue(metric.get("Unit"));
250+
Map value = (Map) rootNode.get(name);
251+
statisticSets.add(
252+
new StatisticSet(
253+
name,
254+
unit,
255+
StorageResolution.STANDARD,
256+
new Statistics(
257+
(Double) value.get("Max"),
258+
(Double) value.get("Min"),
259+
(int) value.get("Count"),
260+
(Double) value.get("Sum"))));
261+
}
262+
return statisticSets;
263+
}
264+
218265
private Map<String, Object> parseRootNode(String event) throws JsonProcessingException {
219266
return new JsonMapper().readValue(event, new TypeReference<Map<String, Object>>() {});
220267
}

0 commit comments

Comments
 (0)