2929import java .util .Set ;
3030import java .util .stream .Collector ;
3131import java .util .stream .Collectors ;
32+ import java .util .stream .Stream ;
3233import javax .inject .Inject ;
3334import lombok .AllArgsConstructor ;
3435import lombok .Value ;
6061import org .hypertrace .graphql .entity .schema .argument .EntityTypeStringArgument ;
6162import org .hypertrace .graphql .metric .request .MetricAggregationRequest ;
6263import org .hypertrace .graphql .metric .request .MetricRequest ;
64+ import org .hypertrace .graphql .metric .request .MetricRequestBuilder ;
6365import org .hypertrace .graphql .metric .schema .argument .AggregatableOrderArgument ;
6466
6567@ Slf4j
@@ -70,6 +72,7 @@ class DefaultEntityJoinerBuilder implements EntityJoinerBuilder {
7072 private final GraphQlSelectionFinder selectionFinder ;
7173 private final ArgumentDeserializer argumentDeserializer ;
7274 private final ResultSetRequestBuilder resultSetRequestBuilder ;
75+ private final MetricRequestBuilder metricRequestBuilder ;
7376 private final FilterRequestBuilder filterRequestBuilder ;
7477 private final Scheduler boundedIoScheduler ;
7578 private final EntityLabelRequestBuilder entityLabelRequestBuilder ;
@@ -80,6 +83,7 @@ class DefaultEntityJoinerBuilder implements EntityJoinerBuilder {
8083 GraphQlSelectionFinder selectionFinder ,
8184 ArgumentDeserializer argumentDeserializer ,
8285 ResultSetRequestBuilder resultSetRequestBuilder ,
86+ MetricRequestBuilder metricRequestBuilder ,
8387 FilterRequestBuilder filterRequestBuilder ,
8488 @ BoundedIoScheduler Scheduler boundedIoScheduler ,
8589 EntityLabelRequestBuilder entityLabelRequestBuilder ) {
@@ -88,6 +92,7 @@ class DefaultEntityJoinerBuilder implements EntityJoinerBuilder {
8892 this .selectionFinder = selectionFinder ;
8993 this .argumentDeserializer = argumentDeserializer ;
9094 this .resultSetRequestBuilder = resultSetRequestBuilder ;
95+ this .metricRequestBuilder = metricRequestBuilder ;
9196 this .filterRequestBuilder = filterRequestBuilder ;
9297 this .boundedIoScheduler = boundedIoScheduler ;
9398 this .entityLabelRequestBuilder = entityLabelRequestBuilder ;
@@ -268,6 +273,8 @@ private Single<EntityRequest> buildEntityRequest(
268273 String entityType ,
269274 int entityIdsToFilterSize ,
270275 List <AttributeAssociation <FilterArgument >> filterArguments ) {
276+ Collection <SelectedField > selections = this .entityFieldsByType .get (entityType );
277+
271278 return zip (
272279 resultSetRequestBuilder .build (
273280 context ,
@@ -277,12 +284,14 @@ private Single<EntityRequest> buildEntityRequest(
277284 timeRange ,
278285 List .<AttributeAssociation <AggregatableOrderArgument >>of (), // Order does not matter
279286 filterArguments ,
280- this . entityFieldsByType . get ( entityType ) .stream (),
287+ selections .stream (),
281288 Optional .empty ()),
289+ metricRequestBuilder .build (context , entityType , selections .stream ()),
282290 entityLabelRequestBuilder .buildLabelRequestIfPresentInAnyEntity (
283291 context , entityType , this .entityFieldsByType .get (entityType )),
284- (resultSetRequest , optionalLabelRequest ) ->
285- new DefaultEntityRequest (entityType , resultSetRequest , optionalLabelRequest ));
292+ (resultSetRequest , metricRequestList , optionalLabelRequest ) ->
293+ new DefaultEntityRequest (
294+ entityType , resultSetRequest , metricRequestList , optionalLabelRequest ));
286295 }
287296
288297 private Single <List <AttributeAssociation <FilterArgument >>> buildIdFilter (
@@ -297,7 +306,7 @@ private Single<List<AttributeAssociation<FilterArgument>>> buildIdFilter(
297306 private static class DefaultEntityRequest implements EntityRequest {
298307 String entityType ;
299308 ResultSetRequest <AggregatableOrderArgument > resultSetRequest ;
300- List <MetricRequest > metricRequests = Collections . emptyList (); // Only support attributes for now
309+ List <MetricRequest > metricRequests ;
301310 boolean fetchTotal = false ; // Not needed for a single entity
302311 EdgeSetGroupRequest incomingEdgeRequests = new EmptyEdgeSetGroupRequest ();
303312 EdgeSetGroupRequest outgoingEdgeRequests = new EmptyEdgeSetGroupRequest ();
0 commit comments