From 1f60701190920a29b51707935b7dacee6b1a16a5 Mon Sep 17 00:00:00 2001 From: Prerana Singhal Date: Mon, 7 Mar 2022 11:55:30 +0530 Subject: [PATCH] Added build method for explore-request-builder Explore API is now being used as part of other APIs too (like events) which do not inherently support many of the functionalities that explore does.. One requirement is to build the request using pre-defined scope and manipulating the arguments instead of using the user-entered arguments as is. Hnece, added an overloaded build method which takes all the arguments as parameters. --- .../request/DefaultExploreRequestBuilder.java | 49 +++++++++++++------ .../request/ExploreRequestBuilder.java | 24 +++++++++ 2 files changed, 59 insertions(+), 14 deletions(-) diff --git a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java index 0d51aa71..c908007d 100644 --- a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java +++ b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java @@ -80,15 +80,6 @@ public Single build( .map(this.scopeStringTranslator::fromExternal) .orElseThrow(); - return this.build(requestContext, explorerScope, arguments, selectionSet); - } - - private Single build( - GraphQlRequestContext requestContext, - String explorerScope, - Map arguments, - DataFetchingFieldSelectionSet selectionSet) { - int limit = this.argumentDeserializer .deserializePrimitive(arguments, LimitArgument.class) @@ -120,9 +111,6 @@ private Single build( Optional spaceId = this.argumentDeserializer.deserializePrimitive(arguments, SpaceArgument.class); - Set groupByExpressions = - groupBy.map(this::resolveGroupByExpressions).orElseGet(Collections::emptySet); - Optional intervalArgument = this.argumentDeserializer.deserializeObject(arguments, IntervalArgument.class); @@ -134,6 +122,39 @@ private Single build( this.selectionRequestBuilder.getAggregationSelections( requestContext, explorerScope, selectionSet); + return build( + requestContext, + explorerScope, + timeRange, + spaceId, + limit, + offset, + requestedFilters, + requestedOrders, + groupBy, + intervalArgument, + attributeSelections, + aggregationSelections); + } + + @Override + public Single build( + GraphQlRequestContext requestContext, + String explorerScope, + TimeRangeArgument timeRange, + Optional spaceId, + int limit, + int offset, + List requestedFilters, + List requestedOrders, + Optional groupBy, + Optional intervalArgument, + Single> attributeSelections, + Single> aggregationSelections) { + + Set groupByExpressions = + groupBy.map(this::resolveGroupByExpressions).orElseGet(Collections::emptySet); + Single> orderArguments = this.exploreOrderArgumentBuilder.buildList(requestContext, explorerScope, requestedOrders); @@ -151,8 +172,8 @@ private Single build( requestContext, explorerScope, timeRange, - limit, - offset, + limit > 0 ? limit : DEFAULT_LIMIT, + offset >= 0 ? offset : DEFAULT_OFFSET, attributes, aggregations, orders, diff --git a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java index 558c35f1..b5046892 100644 --- a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java +++ b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java @@ -2,12 +2,36 @@ import graphql.schema.DataFetchingFieldSelectionSet; import io.reactivex.rxjava3.core.Single; +import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.Set; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.graphql.explorer.schema.argument.GroupByArgument; +import org.hypertrace.graphql.explorer.schema.argument.IntervalArgument; +import org.hypertrace.graphql.metric.request.MetricAggregationRequest; +import org.hypertrace.graphql.metric.schema.argument.AggregatableOrderArgument; public interface ExploreRequestBuilder { Single build( GraphQlRequestContext context, Map arguments, DataFetchingFieldSelectionSet selectionSet); + + Single build( + GraphQlRequestContext requestContext, + String explorerScope, + TimeRangeArgument timeRange, + Optional spaceId, + int limit, + int offset, + List requestedFilters, + List requestedOrders, + Optional groupBy, + Optional intervalArgument, + Single> attributeSelections, + Single> aggregationSelections); }