1212import java .io .IOException ;
1313import java .util .Collection ;
1414
15- public class AggregateMetricFieldSerializer implements DownsampleFieldSerializer {
15+ final class AggregateMetricFieldSerializer implements DownsampleFieldSerializer {
1616 private final Collection <AbstractDownsampleFieldProducer > producers ;
1717 private final String name ;
1818
@@ -22,7 +22,7 @@ public class AggregateMetricFieldSerializer implements DownsampleFieldSerializer
2222 * @param producers a collection of {@link AbstractDownsampleFieldProducer} instances with the subfields
2323 * of the aggregate_metric_double field.
2424 */
25- public AggregateMetricFieldSerializer (String name , Collection <AbstractDownsampleFieldProducer > producers ) {
25+ AggregateMetricFieldSerializer (String name , Collection <AbstractDownsampleFieldProducer > producers ) {
2626 this .name = name ;
2727 this .producers = producers ;
2828 }
@@ -38,8 +38,22 @@ public void write(XContentBuilder builder) throws IOException {
3838 assert name .equals (fieldProducer .name ()) : "producer has a different name" ;
3939 if (fieldProducer .isEmpty () == false ) {
4040 if (fieldProducer instanceof MetricFieldProducer metricFieldProducer ) {
41- for (MetricFieldProducer .Metric metric : metricFieldProducer .metrics ()) {
42- builder .field (metric .name (), metric .get ());
41+ if (metricFieldProducer instanceof MetricFieldProducer .GaugeMetricFieldProducer gaugeProducer ) {
42+ builder .field ("max" , gaugeProducer .max );
43+ builder .field ("min" , gaugeProducer .min );
44+ builder .field ("sum" , gaugeProducer .sum .value ());
45+ builder .field ("value_count" , gaugeProducer .count );
46+ } else if (metricFieldProducer instanceof MetricFieldProducer .CounterMetricFieldProducer counterProducer ) {
47+ builder .field ("last_value" , counterProducer .lastValue );
48+ } else if (metricFieldProducer instanceof MetricFieldProducer .AggregatedGaugeMetricFieldProducer producer ) {
49+ switch (producer .metric ) {
50+ case max -> builder .field ("max" , producer .max );
51+ case min -> builder .field ("min" , producer .min );
52+ case sum -> builder .field ("sum" , producer .sum .value ());
53+ case value_count -> builder .field ("value_count" , producer .count );
54+ }
55+ } else {
56+ throw new IllegalStateException ();
4357 }
4458 } else if (fieldProducer instanceof LabelFieldProducer labelFieldProducer ) {
4559 LabelFieldProducer .Label label = labelFieldProducer .label ();
0 commit comments