From 34cadcee900e7d186bd6a64bdcb138cbae6bcb34 Mon Sep 17 00:00:00 2001 From: SJ Date: Thu, 6 Jan 2022 15:51:09 +0530 Subject: [PATCH 1/3] fix(entity-joiner): support for metric requests --- .../joiner/DefaultEntityJoinerBuilder.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/hypertrace-graphql-entity-schema/src/main/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilder.java b/hypertrace-graphql-entity-schema/src/main/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilder.java index da4055c5..498869ce 100644 --- a/hypertrace-graphql-entity-schema/src/main/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilder.java +++ b/hypertrace-graphql-entity-schema/src/main/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilder.java @@ -29,6 +29,7 @@ import java.util.Set; import java.util.stream.Collector; import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.inject.Inject; import lombok.AllArgsConstructor; import lombok.Value; @@ -60,6 +61,7 @@ import org.hypertrace.graphql.entity.schema.argument.EntityTypeStringArgument; import org.hypertrace.graphql.metric.request.MetricAggregationRequest; import org.hypertrace.graphql.metric.request.MetricRequest; +import org.hypertrace.graphql.metric.request.MetricRequestBuilder; import org.hypertrace.graphql.metric.schema.argument.AggregatableOrderArgument; @Slf4j @@ -70,6 +72,7 @@ class DefaultEntityJoinerBuilder implements EntityJoinerBuilder { private final GraphQlSelectionFinder selectionFinder; private final ArgumentDeserializer argumentDeserializer; private final ResultSetRequestBuilder resultSetRequestBuilder; + private final MetricRequestBuilder metricRequestBuilder; private final FilterRequestBuilder filterRequestBuilder; private final Scheduler boundedIoScheduler; private final EntityLabelRequestBuilder entityLabelRequestBuilder; @@ -80,6 +83,7 @@ class DefaultEntityJoinerBuilder implements EntityJoinerBuilder { GraphQlSelectionFinder selectionFinder, ArgumentDeserializer argumentDeserializer, ResultSetRequestBuilder resultSetRequestBuilder, + MetricRequestBuilder metricRequestBuilder, FilterRequestBuilder filterRequestBuilder, @BoundedIoScheduler Scheduler boundedIoScheduler, EntityLabelRequestBuilder entityLabelRequestBuilder) { @@ -88,6 +92,7 @@ class DefaultEntityJoinerBuilder implements EntityJoinerBuilder { this.selectionFinder = selectionFinder; this.argumentDeserializer = argumentDeserializer; this.resultSetRequestBuilder = resultSetRequestBuilder; + this.metricRequestBuilder = metricRequestBuilder; this.filterRequestBuilder = filterRequestBuilder; this.boundedIoScheduler = boundedIoScheduler; this.entityLabelRequestBuilder = entityLabelRequestBuilder; @@ -268,6 +273,8 @@ private Single buildEntityRequest( String entityType, int entityIdsToFilterSize, List> filterArguments) { + Collection selections = this.entityFieldsByType.get(entityType); + return zip( resultSetRequestBuilder.build( context, @@ -277,12 +284,14 @@ private Single buildEntityRequest( timeRange, List.>of(), // Order does not matter filterArguments, - this.entityFieldsByType.get(entityType).stream(), + selections.stream(), Optional.empty()), + metricRequestBuilder.build(context, entityType, selections.stream()), entityLabelRequestBuilder.buildLabelRequestIfPresentInAnyEntity( context, entityType, this.entityFieldsByType.get(entityType)), - (resultSetRequest, optionalLabelRequest) -> - new DefaultEntityRequest(entityType, resultSetRequest, optionalLabelRequest)); + (resultSetRequest, metricRequestList, optionalLabelRequest) -> + new DefaultEntityRequest( + entityType, resultSetRequest, metricRequestList, optionalLabelRequest)); } private Single>> buildIdFilter( @@ -297,7 +306,7 @@ private Single>> buildIdFilter( private static class DefaultEntityRequest implements EntityRequest { String entityType; ResultSetRequest resultSetRequest; - List metricRequests = Collections.emptyList(); // Only support attributes for now + List metricRequests; boolean fetchTotal = false; // Not needed for a single entity EdgeSetGroupRequest incomingEdgeRequests = new EmptyEdgeSetGroupRequest(); EdgeSetGroupRequest outgoingEdgeRequests = new EmptyEdgeSetGroupRequest(); From eddb122240bf97b3196b31235fd125a0614f18de Mon Sep 17 00:00:00 2001 From: SJ Date: Fri, 7 Jan 2022 10:54:36 +0530 Subject: [PATCH 2/3] spotless --- .../graphql/entity/joiner/DefaultEntityJoinerBuilder.java | 1 - 1 file changed, 1 deletion(-) diff --git a/hypertrace-graphql-entity-schema/src/main/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilder.java b/hypertrace-graphql-entity-schema/src/main/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilder.java index 498869ce..e7a233a3 100644 --- a/hypertrace-graphql-entity-schema/src/main/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilder.java +++ b/hypertrace-graphql-entity-schema/src/main/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilder.java @@ -29,7 +29,6 @@ import java.util.Set; import java.util.stream.Collector; import java.util.stream.Collectors; -import java.util.stream.Stream; import javax.inject.Inject; import lombok.AllArgsConstructor; import lombok.Value; From d4dfe6c2ba749845e33894e82adfd229f33c4eeb Mon Sep 17 00:00:00 2001 From: SJ Date: Fri, 7 Jan 2022 11:49:02 +0530 Subject: [PATCH 3/3] fix test --- .../entity/joiner/DefaultEntityJoinerBuilderTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hypertrace-graphql-entity-schema/src/test/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilderTest.java b/hypertrace-graphql-entity-schema/src/test/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilderTest.java index 1cecb488..2af2ba3f 100644 --- a/hypertrace-graphql-entity-schema/src/test/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilderTest.java +++ b/hypertrace-graphql-entity-schema/src/test/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilderTest.java @@ -48,6 +48,8 @@ import org.hypertrace.graphql.entity.schema.EntityType; import org.hypertrace.graphql.entity.schema.argument.EntityTypeStringArgument; import org.hypertrace.graphql.label.schema.LabelResultSet; +import org.hypertrace.graphql.metric.request.MetricRequest; +import org.hypertrace.graphql.metric.request.MetricRequestBuilder; import org.hypertrace.graphql.metric.schema.MetricContainer; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -64,11 +66,13 @@ class DefaultEntityJoinerBuilderTest { @Mock GraphQlSelectionFinder mockSelectionFinder; @Mock ArgumentDeserializer mockDeserializer; @Mock ResultSetRequestBuilder mockResultSetRequestBuilder; + @Mock MetricRequestBuilder mockMetricRequestBuilder; @Mock FilterRequestBuilder mockFilterRequestBuilder; @Mock GraphQlRequestContext mockRequestContext; @Mock DataFetchingFieldSelectionSet mockSelectionSet; @Mock AttributeAssociation mockFilter; @Mock ResultSetRequest mockResultSetRequest; + @Mock List mockMetricRequests; @Mock EntityLabelRequestBuilder mockEntityLabelRequestBuilder; Scheduler testScheduler = Schedulers.single(); @@ -83,6 +87,7 @@ void beforeEach() { mockSelectionFinder, mockDeserializer, mockResultSetRequestBuilder, + mockMetricRequestBuilder, mockFilterRequestBuilder, testScheduler, mockEntityLabelRequestBuilder); @@ -278,6 +283,9 @@ private void mockRequestBuilding() { any(Stream.class), eq(Optional.empty()))) .thenReturn(Single.just(mockResultSetRequest)); + when(mockMetricRequestBuilder.build( + eq(mockRequestContext), any(String.class), any(Stream.class))) + .thenReturn(Single.just(mockMetricRequests)); } private void mockResult(Map> resultsByEntityType) {