Skip to content

Commit 330cb6d

Browse files
authored
fix(entity-joiner): support for metric requests (#127)
* fix(entity-joiner): support for metric requests * spotless * fix test
1 parent b74212b commit 330cb6d

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

hypertrace-graphql-entity-schema/src/main/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilder.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import org.hypertrace.graphql.entity.schema.argument.EntityTypeStringArgument;
6161
import org.hypertrace.graphql.metric.request.MetricAggregationRequest;
6262
import org.hypertrace.graphql.metric.request.MetricRequest;
63+
import org.hypertrace.graphql.metric.request.MetricRequestBuilder;
6364
import org.hypertrace.graphql.metric.schema.argument.AggregatableOrderArgument;
6465

6566
@Slf4j
@@ -70,6 +71,7 @@ class DefaultEntityJoinerBuilder implements EntityJoinerBuilder {
7071
private final GraphQlSelectionFinder selectionFinder;
7172
private final ArgumentDeserializer argumentDeserializer;
7273
private final ResultSetRequestBuilder resultSetRequestBuilder;
74+
private final MetricRequestBuilder metricRequestBuilder;
7375
private final FilterRequestBuilder filterRequestBuilder;
7476
private final Scheduler boundedIoScheduler;
7577
private final EntityLabelRequestBuilder entityLabelRequestBuilder;
@@ -80,6 +82,7 @@ class DefaultEntityJoinerBuilder implements EntityJoinerBuilder {
8082
GraphQlSelectionFinder selectionFinder,
8183
ArgumentDeserializer argumentDeserializer,
8284
ResultSetRequestBuilder resultSetRequestBuilder,
85+
MetricRequestBuilder metricRequestBuilder,
8386
FilterRequestBuilder filterRequestBuilder,
8487
@BoundedIoScheduler Scheduler boundedIoScheduler,
8588
EntityLabelRequestBuilder entityLabelRequestBuilder) {
@@ -88,6 +91,7 @@ class DefaultEntityJoinerBuilder implements EntityJoinerBuilder {
8891
this.selectionFinder = selectionFinder;
8992
this.argumentDeserializer = argumentDeserializer;
9093
this.resultSetRequestBuilder = resultSetRequestBuilder;
94+
this.metricRequestBuilder = metricRequestBuilder;
9195
this.filterRequestBuilder = filterRequestBuilder;
9296
this.boundedIoScheduler = boundedIoScheduler;
9397
this.entityLabelRequestBuilder = entityLabelRequestBuilder;
@@ -268,6 +272,8 @@ private Single<EntityRequest> buildEntityRequest(
268272
String entityType,
269273
int entityIdsToFilterSize,
270274
List<AttributeAssociation<FilterArgument>> filterArguments) {
275+
Collection<SelectedField> selections = this.entityFieldsByType.get(entityType);
276+
271277
return zip(
272278
resultSetRequestBuilder.build(
273279
context,
@@ -277,12 +283,14 @@ private Single<EntityRequest> buildEntityRequest(
277283
timeRange,
278284
List.<AttributeAssociation<AggregatableOrderArgument>>of(), // Order does not matter
279285
filterArguments,
280-
this.entityFieldsByType.get(entityType).stream(),
286+
selections.stream(),
281287
Optional.empty()),
288+
metricRequestBuilder.build(context, entityType, selections.stream()),
282289
entityLabelRequestBuilder.buildLabelRequestIfPresentInAnyEntity(
283290
context, entityType, this.entityFieldsByType.get(entityType)),
284-
(resultSetRequest, optionalLabelRequest) ->
285-
new DefaultEntityRequest(entityType, resultSetRequest, optionalLabelRequest));
291+
(resultSetRequest, metricRequestList, optionalLabelRequest) ->
292+
new DefaultEntityRequest(
293+
entityType, resultSetRequest, metricRequestList, optionalLabelRequest));
286294
}
287295

288296
private Single<List<AttributeAssociation<FilterArgument>>> buildIdFilter(
@@ -297,7 +305,7 @@ private Single<List<AttributeAssociation<FilterArgument>>> buildIdFilter(
297305
private static class DefaultEntityRequest implements EntityRequest {
298306
String entityType;
299307
ResultSetRequest<AggregatableOrderArgument> resultSetRequest;
300-
List<MetricRequest> metricRequests = Collections.emptyList(); // Only support attributes for now
308+
List<MetricRequest> metricRequests;
301309
boolean fetchTotal = false; // Not needed for a single entity
302310
EdgeSetGroupRequest incomingEdgeRequests = new EmptyEdgeSetGroupRequest();
303311
EdgeSetGroupRequest outgoingEdgeRequests = new EmptyEdgeSetGroupRequest();

hypertrace-graphql-entity-schema/src/test/java/org/hypertrace/graphql/entity/joiner/DefaultEntityJoinerBuilderTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
import org.hypertrace.graphql.entity.schema.EntityType;
4949
import org.hypertrace.graphql.entity.schema.argument.EntityTypeStringArgument;
5050
import org.hypertrace.graphql.label.schema.LabelResultSet;
51+
import org.hypertrace.graphql.metric.request.MetricRequest;
52+
import org.hypertrace.graphql.metric.request.MetricRequestBuilder;
5153
import org.hypertrace.graphql.metric.schema.MetricContainer;
5254
import org.junit.jupiter.api.BeforeEach;
5355
import org.junit.jupiter.api.Test;
@@ -64,11 +66,13 @@ class DefaultEntityJoinerBuilderTest {
6466
@Mock GraphQlSelectionFinder mockSelectionFinder;
6567
@Mock ArgumentDeserializer mockDeserializer;
6668
@Mock ResultSetRequestBuilder mockResultSetRequestBuilder;
69+
@Mock MetricRequestBuilder mockMetricRequestBuilder;
6770
@Mock FilterRequestBuilder mockFilterRequestBuilder;
6871
@Mock GraphQlRequestContext mockRequestContext;
6972
@Mock DataFetchingFieldSelectionSet mockSelectionSet;
7073
@Mock AttributeAssociation<FilterArgument> mockFilter;
7174
@Mock ResultSetRequest mockResultSetRequest;
75+
@Mock List<MetricRequest> mockMetricRequests;
7276
@Mock EntityLabelRequestBuilder mockEntityLabelRequestBuilder;
7377

7478
Scheduler testScheduler = Schedulers.single();
@@ -83,6 +87,7 @@ void beforeEach() {
8387
mockSelectionFinder,
8488
mockDeserializer,
8589
mockResultSetRequestBuilder,
90+
mockMetricRequestBuilder,
8691
mockFilterRequestBuilder,
8792
testScheduler,
8893
mockEntityLabelRequestBuilder);
@@ -278,6 +283,9 @@ private void mockRequestBuilding() {
278283
any(Stream.class),
279284
eq(Optional.empty())))
280285
.thenReturn(Single.just(mockResultSetRequest));
286+
when(mockMetricRequestBuilder.build(
287+
eq(mockRequestContext), any(String.class), any(Stream.class)))
288+
.thenReturn(Single.just(mockMetricRequests));
281289
}
282290

283291
private void mockResult(Map<String, List<Entity>> resultsByEntityType) {

0 commit comments

Comments
 (0)