20
20
import com .arpnetworking .metrics .mad .model .statistics .HistogramStatistic ;
21
21
import com .arpnetworking .metrics .mad .model .statistics .Statistic ;
22
22
import com .arpnetworking .metrics .mad .model .statistics .StatisticFactory ;
23
- import com .google .common .collect .ImmutableMap ;
23
+ import com .google .common .collect .ImmutableList ;
24
24
import com .google .protobuf .ByteString ;
25
25
26
- import java .time .Duration ;
27
- import java .time .ZonedDateTime ;
28
26
import java .util .Collection ;
27
+ import java .util .List ;
29
28
import java .util .Map ;
30
29
import java .util .Objects ;
31
30
@@ -38,43 +37,40 @@ public final class PeriodicDataToProtoConverter {
38
37
private static final StatisticFactory STATISTIC_FACTORY = new StatisticFactory ();
39
38
private static final Statistic EXPRESSION_STATISTIC = STATISTIC_FACTORY .getStatistic ("expression" );
40
39
41
- private final Duration _period ;
42
- private final ZonedDateTime _periodStart ;
43
- private final ImmutableMap <String , String > _dimensionParameters ;
44
- private final String _cluster ;
45
- private final String _service ;
46
-
47
40
/**
48
- * Create a converter to generate protobuf messages for a given PeriodicData .
41
+ * Convert a PeriodicData to a set of corresponding protobuf messages .
49
42
*
50
- * @param periodicData Originating PeriodicData
43
+ * @param periodicData PeriodicData being converted.
44
+ * @return List of StatisticSetRecord protobufs corresponding to the above.
51
45
*/
52
- public PeriodicDataToProtoConverter (final PeriodicData periodicData ) {
53
- _period = periodicData .getPeriod ();
54
- _periodStart = periodicData .getStart ();
55
- _dimensionParameters = periodicData .getDimensions ().getParameters ();
56
- _cluster = periodicData .getDimensions ().getCluster ();
57
- _service = periodicData .getDimensions ().getService ();
46
+ public static List <Messages .StatisticSetRecord > convert (
47
+ final PeriodicData periodicData
48
+ ) {
49
+ final ImmutableList .Builder <Messages .StatisticSetRecord > convertedData = ImmutableList .builder ();
50
+ for (final Map .Entry <String , Collection <AggregatedData >> entry : periodicData .getData ().asMap ().entrySet ()) {
51
+ final String metricName = entry .getKey ();
52
+ final Collection <AggregatedData > data = entry .getValue ();
53
+ if (!data .isEmpty ()) {
54
+ final Messages .StatisticSetRecord record = convertAggregatedData (
55
+ periodicData , metricName , data );
56
+ convertedData .add (record );
57
+ }
58
+ }
59
+ return convertedData .build ();
60
+
58
61
}
59
62
60
- /**
61
- * Convert a metric's data to a StatisticSetRecord.
62
- *
63
- * @param metricName Name of metric being converted.
64
- * @param data Recorded metric data to serialize.
65
- * @return StatisticSetRecord protobuf corresponding to the above.
66
- */
67
- public Messages .StatisticSetRecord convert (
63
+ private static Messages .StatisticSetRecord convertAggregatedData (
64
+ final PeriodicData periodicData ,
68
65
final String metricName ,
69
66
final Collection <AggregatedData > data ) {
70
-
71
67
final Messages .StatisticSetRecord .Builder builder = Messages .StatisticSetRecord .newBuilder ()
72
68
.setMetric (metricName )
73
- .setPeriod (_period .toString ())
74
- .setPeriodStart (_periodStart .toString ())
75
- .putAllDimensions (_dimensionParameters )
76
- .setCluster (_cluster )
77
- .setService (_service );
69
+ .setPeriod (periodicData . getPeriod () .toString ())
70
+ .setPeriodStart (periodicData . getStart () .toString ())
71
+ .putAllDimensions (periodicData . getDimensions (). getParameters () )
72
+ .setCluster (periodicData . getDimensions (). getCluster () )
73
+ .setService (periodicData . getDimensions (). getService () );
78
74
79
75
for (final AggregatedData datum : data ) {
80
76
if (Objects .equals (EXPRESSION_STATISTIC , datum .getStatistic ())) {
@@ -103,6 +99,8 @@ public Messages.StatisticSetRecord convert(
103
99
}
104
100
105
101
return builder .build ();
102
+
103
+
106
104
}
107
105
108
106
private static ByteString serializeSupportingData (final AggregatedData datum ) {
@@ -134,4 +132,6 @@ private static ByteString serializeSupportingData(final AggregatedData datum) {
134
132
}
135
133
return byteString ;
136
134
}
135
+
136
+ private PeriodicDataToProtoConverter () {}
137
137
}
0 commit comments