in src/main/java/software/amazon/cloudwatchlogs/emf/model/MetricsContext.java [228:275]
public List<String> serialize() throws JsonProcessingException {
if (rootNode.metrics().size() <= Constants.MAX_METRICS_PER_EVENT
&& !anyMetricWithTooManyDataPoints(rootNode)) {
return Arrays.asList(this.rootNode.serialize());
} else {
List<RootNode> nodes = new ArrayList<>();
Map<String, MetricDefinition> metrics = new HashMap<>();
Queue<MetricDefinition> metricDefinitions =
new LinkedList<>(rootNode.metrics().values());
while (metricDefinitions.size() > 0) {
MetricDefinition metric = metricDefinitions.poll();
if (metrics.size() == Constants.MAX_METRICS_PER_EVENT
|| metrics.containsKey(metric.getName())) {
nodes.add(buildRootNode(metrics));
metrics = new HashMap<>();
}
if (metric.getValues().size() <= Constants.MAX_DATAPOINTS_PER_METRIC) {
metrics.put(metric.getName(), metric);
} else {
metrics.put(
metric.getName(),
new MetricDefinition(
metric.getName(),
metric.getUnit(),
metric.getValues()
.subList(0, Constants.MAX_DATAPOINTS_PER_METRIC)));
metricDefinitions.offer(
new MetricDefinition(
metric.getName(),
metric.getUnit(),
metric.getValues()
.subList(
Constants.MAX_DATAPOINTS_PER_METRIC,
metric.getValues().size())));
}
}
if (!metrics.isEmpty()) {
nodes.add(buildRootNode(metrics));
}
List<String> strings = new ArrayList<>();
for (RootNode node : nodes) {
strings.add(node.serialize());
}
return strings;
}
}