public List serialize()

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;
        }
    }