Skip to content

Commit bef2cec

Browse files
authored
chore | adding context options to explore query (#194)
* chore | adding context options to explore query
1 parent dc8d1d5 commit bef2cec

File tree

10 files changed

+103
-4
lines changed

10 files changed

+103
-4
lines changed

hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/dao/GatewayServiceExploreRequestBuilder.java

+21-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@
2121
import org.hypertrace.gateway.service.v1.common.Expression;
2222
import org.hypertrace.gateway.service.v1.common.Filter;
2323
import org.hypertrace.gateway.service.v1.common.TimeAggregation;
24+
import org.hypertrace.gateway.service.v1.explore.ContextOption;
25+
import org.hypertrace.gateway.service.v1.explore.EntityOption;
2426
import org.hypertrace.gateway.service.v1.explore.ExploreRequest.Builder;
2527
import org.hypertrace.graphql.explorer.request.ExploreRequest;
28+
import org.hypertrace.graphql.explorer.schema.argument.EntityContextOptions;
2629
import org.hypertrace.graphql.explorer.schema.argument.IntervalArgument;
2730
import org.hypertrace.graphql.metric.request.MetricAggregationRequest;
2831
import org.hypertrace.graphql.metric.request.MetricSeriesRequest;
@@ -59,7 +62,8 @@ Single<org.hypertrace.gateway.service.v1.explore.ExploreRequest> buildRequest(
5962
this.filterConverter.convert(request.filterArguments()),
6063
this.buildAnyAggregations(request),
6164
this.buildAnyTimeAggregations(request),
62-
(attributes, orderBys, groupBys, filter, aggregations, series) -> {
65+
this.buildContextOptions(request),
66+
(attributes, orderBys, groupBys, filter, aggregations, series, contextOptions) -> {
6367
Builder builder =
6468
org.hypertrace.gateway.service.v1.explore.ExploreRequest.newBuilder()
6569
.setContext(request.scope())
@@ -73,7 +77,8 @@ Single<org.hypertrace.gateway.service.v1.explore.ExploreRequest> buildRequest(
7377
.setOffset(request.offset())
7478
.setFilter(filter)
7579
.setSpaceId(request.spaceId().orElse("")) // String proto default value
76-
.setGroupLimit(request.groupLimit().orElse(0)); // Int proto default value
80+
.setGroupLimit(request.groupLimit().orElse(0)) // Int proto default value
81+
.setContextOption(contextOptions);
7782
request
7883
.timeRange()
7984
.ifPresent(
@@ -109,6 +114,20 @@ private Single<Set<TimeAggregation>> buildAnyTimeAggregations(ExploreRequest exp
109114
.flatMap(this.seriesConverter::convert);
110115
}
111116

117+
private Single<ContextOption> buildContextOptions(ExploreRequest exploreRequest) {
118+
if (exploreRequest.entityContextOptions().isEmpty()) {
119+
return Single.just(ContextOption.newBuilder().build());
120+
}
121+
EntityContextOptions entityContextOptions = exploreRequest.entityContextOptions().get();
122+
return Single.just(
123+
ContextOption.newBuilder()
124+
.setEntityOption(
125+
EntityOption.newBuilder()
126+
.setIncludeNonLiveEntities(entityContextOptions.includeNonLiveEntities())
127+
.build())
128+
.build());
129+
}
130+
112131
@Value
113132
@Accessors(fluent = true)
114133
private static class ExplorerMetricSeriesRequest implements MetricSeriesRequest {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.hypertrace.graphql.explorer.deserialization;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import com.fasterxml.jackson.databind.Module;
5+
import com.fasterxml.jackson.databind.module.SimpleModule;
6+
import java.util.List;
7+
import lombok.NoArgsConstructor;
8+
import lombok.Value;
9+
import lombok.experimental.Accessors;
10+
import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig;
11+
import org.hypertrace.graphql.explorer.schema.argument.EntityContextOptions;
12+
13+
public class EntityContextOptionsDeserializationConfig implements ArgumentDeserializationConfig {
14+
15+
@Override
16+
public String getArgumentKey() {
17+
return EntityContextOptions.ARGUMENT_NAME;
18+
}
19+
20+
@Override
21+
public Class<EntityContextOptions> getArgumentSchema() {
22+
return EntityContextOptions.class;
23+
}
24+
25+
@Override
26+
public List<Module> jacksonModules() {
27+
return List.of(
28+
new SimpleModule()
29+
.addAbstractTypeMapping(
30+
EntityContextOptions.class,
31+
EntityContextOptionsDeserializationConfig.DefaultEntityContextOptionsArgument
32+
.class));
33+
}
34+
35+
@Value
36+
@Accessors(fluent = true)
37+
@NoArgsConstructor(force = true)
38+
private static class DefaultEntityContextOptionsArgument implements EntityContextOptions {
39+
40+
@JsonProperty(EntityContextOptions.INCLUDE_NON_LIVE_ENTITIES)
41+
boolean includeNonLiveEntities;
42+
}
43+
}

hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/deserialization/ExplorerDeserializationModule.java

+3
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,8 @@ protected void configure() {
5656

5757
deserializationConfigMultibinder.addBinding().to(GroupByArgumentDeserializationConfig.class);
5858
deserializationConfigMultibinder.addBinding().to(IntervalArgumentDeserializationConfig.class);
59+
deserializationConfigMultibinder
60+
.addBinding()
61+
.to(EntityContextOptionsDeserializationConfig.class);
5962
}
6063
}

hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java

+8
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.hypertrace.core.graphql.common.utils.attributes.AttributeScopeStringTranslator;
2929
import org.hypertrace.core.graphql.context.GraphQlRequestContext;
3030
import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer;
31+
import org.hypertrace.graphql.explorer.schema.argument.EntityContextOptions;
3132
import org.hypertrace.graphql.explorer.schema.argument.ExplorerContext;
3233
import org.hypertrace.graphql.explorer.schema.argument.ExplorerContextArgument;
3334
import org.hypertrace.graphql.explorer.schema.argument.ExplorerScopeArgument;
@@ -112,6 +113,9 @@ public Single<ExploreRequest> build(
112113
Optional<IntervalArgument> intervalArgument =
113114
this.argumentDeserializer.deserializeObject(arguments, IntervalArgument.class);
114115

116+
Optional<EntityContextOptions> entityContextOptions =
117+
this.argumentDeserializer.deserializeObject(arguments, EntityContextOptions.class);
118+
115119
Single<Set<AttributeRequest>> attributeSelections =
116120
this.selectionRequestBuilder.getAttributeSelections(
117121
requestContext, explorerScope, selectionSet);
@@ -131,6 +135,7 @@ public Single<ExploreRequest> build(
131135
requestedOrders,
132136
groupBy,
133137
intervalArgument,
138+
entityContextOptions,
134139
attributeSelections,
135140
aggregationSelections);
136141
}
@@ -147,6 +152,7 @@ public Single<ExploreRequest> build(
147152
List<AggregatableOrderArgument> requestedOrders,
148153
Optional<GroupByArgument> groupBy,
149154
Optional<IntervalArgument> intervalArgument,
155+
Optional<EntityContextOptions> entityContextOptions,
150156
Single<Set<AttributeRequest>> attributeSelections,
151157
Single<Set<MetricAggregationRequest>> aggregationSelections) {
152158

@@ -178,6 +184,7 @@ public Single<ExploreRequest> build(
178184
filters,
179185
groupByAttribute,
180186
intervalArgument,
187+
entityContextOptions,
181188
groupBy.map(GroupByArgument::includeRest).orElse(false),
182189
spaceId,
183190
groupBy.map(GroupByArgument::groupLimit)));
@@ -221,6 +228,7 @@ private static class DefaultExploreRequest implements ExploreRequest {
221228
List<AttributeAssociation<FilterArgument>> filterArguments;
222229
Set<AttributeRequest> groupByAttributeRequests;
223230
Optional<IntervalArgument> timeInterval;
231+
Optional<EntityContextOptions> entityContextOptions;
224232
boolean includeRest;
225233
Optional<String> spaceId;
226234
Optional<Integer> groupLimit;

hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequest.java

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.hypertrace.core.graphql.common.request.ContextualRequest;
99
import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument;
1010
import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument;
11+
import org.hypertrace.graphql.explorer.schema.argument.EntityContextOptions;
1112
import org.hypertrace.graphql.explorer.schema.argument.IntervalArgument;
1213
import org.hypertrace.graphql.metric.request.MetricAggregationRequest;
1314

@@ -37,4 +38,6 @@ public interface ExploreRequest extends ContextualRequest {
3738
Optional<String> spaceId();
3839

3940
Optional<Integer> groupLimit();
41+
42+
Optional<EntityContextOptions> entityContextOptions();
4043
}

hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument;
1111
import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument;
1212
import org.hypertrace.core.graphql.context.GraphQlRequestContext;
13+
import org.hypertrace.graphql.explorer.schema.argument.EntityContextOptions;
1314
import org.hypertrace.graphql.explorer.schema.argument.GroupByArgument;
1415
import org.hypertrace.graphql.explorer.schema.argument.IntervalArgument;
1516
import org.hypertrace.graphql.metric.request.MetricAggregationRequest;
@@ -32,6 +33,7 @@ Single<ExploreRequest> build(
3233
List<AggregatableOrderArgument> requestedOrders,
3334
Optional<GroupByArgument> groupBy,
3435
Optional<IntervalArgument> intervalArgument,
36+
Optional<EntityContextOptions> entityContextOptions,
3537
Single<Set<AttributeRequest>> attributeSelections,
3638
Single<Set<MetricAggregationRequest>> aggregationSelections);
3739
}

hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/schema/ExplorerSchema.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument;
1313
import org.hypertrace.core.graphql.common.schema.results.arguments.space.SpaceArgument;
1414
import org.hypertrace.graphql.explorer.fetcher.ExplorerFetcher;
15+
import org.hypertrace.graphql.explorer.schema.argument.EntityContextOptions;
1516
import org.hypertrace.graphql.explorer.schema.argument.ExplorerContext;
1617
import org.hypertrace.graphql.explorer.schema.argument.ExplorerContextArgument;
1718
import org.hypertrace.graphql.explorer.schema.argument.ExplorerScopeArgument;
@@ -37,5 +38,6 @@ ExploreResultSet explore(
3738
@GraphQLName(FilterArgument.ARGUMENT_NAME) List<FilterArgument> filterBy,
3839
@GraphQLName(OrderArgument.ARGUMENT_NAME) List<AggregatableOrderArgument> orderBy,
3940
@GraphQLName(GroupByArgument.ARGUMENT_NAME) GroupByArgument groupBy,
40-
@GraphQLName(IntervalArgument.ARGUMENT_NAME) IntervalArgument interval);
41+
@GraphQLName(IntervalArgument.ARGUMENT_NAME) IntervalArgument interval,
42+
@GraphQLName(EntityContextOptions.ARGUMENT_NAME) EntityContextOptions entityContextOptions);
4143
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.hypertrace.graphql.explorer.schema.argument;
2+
3+
import graphql.annotations.annotationTypes.GraphQLField;
4+
import graphql.annotations.annotationTypes.GraphQLName;
5+
import graphql.annotations.annotationTypes.GraphQLNonNull;
6+
7+
@GraphQLName(EntityContextOptions.TYPE_NAME)
8+
public interface EntityContextOptions {
9+
String TYPE_NAME = "EntityContextOptions";
10+
String ARGUMENT_NAME = "entityContextOptions";
11+
String INCLUDE_NON_LIVE_ENTITIES = "includeNonLiveEntities";
12+
13+
@GraphQLField
14+
@GraphQLNonNull
15+
@GraphQLName(INCLUDE_NON_LIVE_ENTITIES)
16+
boolean includeNonLiveEntities();
17+
}

hypertrace-graphql-spaces-schema/src/main/java/org/hypertrace/graphql/spaces/dao/ExplorerBackedSpacesDao.java

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.hypertrace.graphql.explorer.request.ExploreRequest;
3434
import org.hypertrace.graphql.explorer.schema.ExploreResultSet;
3535
import org.hypertrace.graphql.explorer.schema.Selection;
36+
import org.hypertrace.graphql.explorer.schema.argument.EntityContextOptions;
3637
import org.hypertrace.graphql.explorer.schema.argument.IntervalArgument;
3738
import org.hypertrace.graphql.metric.request.MetricAggregationRequest;
3839
import org.hypertrace.graphql.metric.request.MetricAggregationRequestBuilder;
@@ -149,6 +150,7 @@ private static class ActiveSpaceExploreRequest implements ExploreRequest {
149150
Set<AttributeRequest> attributeRequests = emptySet();
150151
List<AttributeAssociation<FilterArgument>> filterArguments = emptyList();
151152
Optional<IntervalArgument> timeInterval = Optional.empty();
153+
Optional<EntityContextOptions> entityContextOptions = Optional.empty();
152154
boolean includeRest = false;
153155
Optional<String> spaceId = Optional.empty();
154156
Optional<Integer> groupLimit = Optional.of(MAX_SPACES);

0 commit comments

Comments
 (0)