51
51
import java .util .Optional ;
52
52
import java .util .Set ;
53
53
import java .util .concurrent .TimeUnit ;
54
+ import java .util .function .Predicate ;
54
55
55
56
/**
56
57
* Actual actor responsible for aggregating.
@@ -161,7 +162,7 @@ public Receive createReceive() {
161
162
}
162
163
final PeriodicData periodicData = new PeriodicData .Builder ()
163
164
.setData (builder .build ())
164
- .setDimensions (ImmutableMap . of ( "host" , createHost ()) )
165
+ .setDimensions (_dimensions )
165
166
.setConditions (ImmutableList .of ())
166
167
.setPeriod (_period )
167
168
.setStart (bucket .getPeriodStart ())
@@ -214,11 +215,12 @@ private void processAggregationMessage(final Messages.StatisticSetRecord data) {
214
215
_cluster = metricData .getCluster ();
215
216
_metric = metricData .getMetricName ();
216
217
_service = metricData .getService ();
218
+ _dimensions = dimensionsToMap (data );
217
219
_resultBuilder = new AggregatedData .Builder ()
218
220
.setHost (createHost ())
219
221
.setPeriod (_period )
220
222
.setPopulationSize (1L )
221
- .setSamples (Collections .< Quantity > emptyList ())
223
+ .setSamples (Collections .emptyList ())
222
224
.setStart (DateTime .now ().hourOfDay ().roundFloorCopy ())
223
225
.setValue (new Quantity .Builder ().setValue (0d ).build ());
224
226
@@ -292,6 +294,21 @@ private void processAggregationMessage(final Messages.StatisticSetRecord data) {
292
294
}
293
295
}
294
296
297
+ private ImmutableMap <String , String > dimensionsToMap (final Messages .StatisticSetRecord statisticSetRecord ) {
298
+ final ImmutableMap .Builder <String , String > builder = ImmutableMap .<String , String >builder ()
299
+ .put (CombinedMetricData .CLUSTER_KEY , statisticSetRecord .getCluster ())
300
+ .put (CombinedMetricData .SERVICE_KEY , statisticSetRecord .getService ())
301
+ .put (CombinedMetricData .HOST_KEY , createHost ());
302
+
303
+ statisticSetRecord .getDimensionsMap ()
304
+ .entrySet ()
305
+ .stream ()
306
+ .filter (NOT_EXPLICIT_DIMENSION )
307
+ .forEach (entry -> builder .put (entry .getKey (), entry .getValue ()));
308
+
309
+ return builder .build ();
310
+ }
311
+
295
312
private String createHost () {
296
313
return _cluster + "-cluster" + _clusterHostSuffix ;
297
314
}
@@ -307,9 +324,14 @@ private String createHost() {
307
324
private String _cluster ;
308
325
private String _metric ;
309
326
private String _service ;
327
+ private ImmutableMap <String , String > _dimensions ;
310
328
private AggregatedData .Builder _resultBuilder ;
311
329
private static final Duration AGG_TIMEOUT = Duration .standardMinutes (1 );
312
330
private static final Logger LOGGER = LoggerFactory .getLogger (StreamingAggregator .class );
331
+ private static final Predicate <Map .Entry <String , String >> NOT_EXPLICIT_DIMENSION = entry ->
332
+ !(entry .getKey ().equals (CombinedMetricData .CLUSTER_KEY )
333
+ || entry .getKey ().equals (CombinedMetricData .HOST_KEY )
334
+ || entry .getKey ().equals (CombinedMetricData .SERVICE_KEY ));
313
335
314
336
private static final class BucketCheck implements Serializable {
315
337
private static final long serialVersionUID = 1L ;
0 commit comments