Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion hypertrace-core-graphql-platform/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ dependencies {
api("org.hypertrace.core.grpcutils:grpc-context-utils:0.12.1")
api("org.hypertrace.core.grpcutils:grpc-client-utils:0.12.1")
api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.1")
api("org.hypertrace.gateway.service:gateway-service-api:0.2.25")
api("org.hypertrace.gateway.service:gateway-service-api:0.3.0-SNAPSHOT")
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once I merged the gateway-service PR and cut the release, will update the appropriate version here.

api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}")
api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ Single<SpansRequest> buildRequest(SpanRequest gqlRequest) {
.spanEventsRequest()
.spaceId()
.orElse("")) // String proto default value
.setFetchTotal(gqlRequest.fetchTotal())
.build());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,27 +15,40 @@
import org.hypertrace.core.graphql.common.request.ResultSetRequest;
import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder;
import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression;
import org.hypertrace.core.graphql.common.schema.results.ResultSet;
import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument;
import org.hypertrace.core.graphql.context.GraphQlRequestContext;
import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder;
import org.hypertrace.core.graphql.utils.schema.SelectionQuery;

class DefaultSpanRequestBuilder implements SpanRequestBuilder {

private final ResultSetRequestBuilder resultSetRequestBuilder;
private final LogEventAttributeRequestBuilder logEventAttributeRequestBuilder;
private final GraphQlSelectionFinder selectionFinder;

@Inject
public DefaultSpanRequestBuilder(
ResultSetRequestBuilder resultSetRequestBuilder,
LogEventAttributeRequestBuilder logEventAttributeRequestBuilder) {
LogEventAttributeRequestBuilder logEventAttributeRequestBuilder,
GraphQlSelectionFinder selectionFinder) {
this.resultSetRequestBuilder = resultSetRequestBuilder;
this.logEventAttributeRequestBuilder = logEventAttributeRequestBuilder;
this.selectionFinder = selectionFinder;
}

@Override
public Single<SpanRequest> build(
GraphQlRequestContext context,
Map<String, Object> arguments,
DataFetchingFieldSelectionSet selectionSet) {
boolean fetchTotal =
this.selectionFinder
.findSelections(
selectionSet, SelectionQuery.namedChild(ResultSet.RESULT_SET_TOTAL_NAME))
.count()
> 0;

return zip(
resultSetRequestBuilder.build(
context,
Expand All @@ -45,7 +58,8 @@ public Single<SpanRequest> build(
OrderArgument.class),
logEventAttributeRequestBuilder.buildAttributeRequest(context, selectionSet),
(resultSetRequest, logEventAttributeRequest) ->
new DefaultSpanRequest(context, resultSetRequest, logEventAttributeRequest));
new DefaultSpanRequest(
context, resultSetRequest, logEventAttributeRequest, fetchTotal));
}

@Override
Expand All @@ -54,12 +68,13 @@ public Single<SpanRequest> build(
Map<String, Object> arguments,
List<AttributeExpression> spanAttributeExpressions,
List<AttributeExpression> logAttributeExpressions) {

return zip(
resultSetRequestBuilder.build(
context, HypertraceCoreAttributeScopeString.SPAN, arguments, spanAttributeExpressions),
logEventAttributeRequestBuilder.buildAttributeRequest(context, logAttributeExpressions),
(resultSetRequest, logEventAttributeRequest) ->
new DefaultSpanRequest(context, resultSetRequest, logEventAttributeRequest));
new DefaultSpanRequest(context, resultSetRequest, logEventAttributeRequest, false));
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is used via ExportSpans API, and ExportSpanResult doesn't extends ResultSet. It doesn't support total.

We can add it as a comment to explain why fetchTotal is set to false here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

}

@Value
Expand All @@ -68,5 +83,6 @@ private static class DefaultSpanRequest implements SpanRequest {
GraphQlRequestContext context;
ResultSetRequest<OrderArgument> spanEventsRequest;
Collection<AttributeRequest> logEventAttributes;
boolean fetchTotal;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ public interface SpanRequest extends ContextualRequest {
ResultSetRequest<OrderArgument> spanEventsRequest();

Collection<AttributeRequest> logEventAttributes();

boolean fetchTotal();
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ static class DefaultSpanRequest implements SpanRequest {
GraphQlRequestContext context;
ResultSetRequest<OrderArgument> spanEventsRequest;
Collection<AttributeRequest> logEventAttributes;
boolean fetchTotal;
}

@Value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,8 @@ void testBuildRequest() {
List.of(),
Collections.emptyList(),
Optional.empty());
SpanRequest spanRequest = new DefaultSpanRequest(null, resultSetRequest, logAttributeRequests);
SpanRequest spanRequest =
new DefaultSpanRequest(null, resultSetRequest, logAttributeRequests, true);

LogEventsRequest expectedLogEventsRequest =
LogEventsRequest.newBuilder()
Expand Down Expand Up @@ -193,7 +194,8 @@ void testBuildRequest_addSpanId() {
List.of(),
Collections.emptyList(),
Optional.empty());
SpanRequest spanRequest = new DefaultSpanRequest(null, resultSetRequest, logAttributeRequests);
SpanRequest spanRequest =
new DefaultSpanRequest(null, resultSetRequest, logAttributeRequests, true);

LogEventsRequest expectedLogEventsRequest =
LogEventsRequest.newBuilder()
Expand Down
1 change: 1 addition & 0 deletions hypertrace-core-graphql-trace-schema/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ dependencies {
implementation(project(":hypertrace-core-graphql-attribute-store"))
implementation(project(":hypertrace-core-graphql-deserialization"))
implementation(project(":hypertrace-core-graphql-request-transformation"))
implementation(project(":hypertrace-core-graphql-schema-utils"))
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ public class GatewayServiceTraceConverter {
}

public Single<TraceResultSet> convert(ResultSetRequest<?> request, TracesResponse response) {
int total = response.getTotal();

int total = response.hasTotal() ? response.getTotal() : 0;
return Observable.fromIterable(response.getTracesList())
.flatMapSingle(trace -> this.convert(request, trace))
.toList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ Single<TracesRequest> buildRequest(TraceRequest request) {
.setFilter(filters)
.setSpaceId(
request.resultSetRequest().spaceId().orElse("")) // String proto default value
.setFetchTotal(request.fetchTotal())
.build());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,29 @@
import lombok.experimental.Accessors;
import org.hypertrace.core.graphql.common.request.ResultSetRequest;
import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder;
import org.hypertrace.core.graphql.common.schema.results.ResultSet;
import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument;
import org.hypertrace.core.graphql.context.GraphQlRequestContext;
import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer;
import org.hypertrace.core.graphql.trace.schema.arguments.TraceType;
import org.hypertrace.core.graphql.trace.schema.arguments.TraceTypeArgument;
import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder;
import org.hypertrace.core.graphql.utils.schema.SelectionQuery;

class DefaultTraceRequestBuilder implements TraceRequestBuilder {

private final ResultSetRequestBuilder resultSetRequestBuilder;
private final ArgumentDeserializer argumentDeserializer;
private final GraphQlSelectionFinder selectionFinder;

@Inject
DefaultTraceRequestBuilder(
ResultSetRequestBuilder resultSetRequestBuilder, ArgumentDeserializer argumentDeserializer) {
ResultSetRequestBuilder resultSetRequestBuilder,
ArgumentDeserializer argumentDeserializer,
GraphQlSelectionFinder selectionFinder) {
this.resultSetRequestBuilder = resultSetRequestBuilder;
this.argumentDeserializer = argumentDeserializer;
this.selectionFinder = selectionFinder;
}

@Override
Expand All @@ -37,18 +44,28 @@ public Single<TraceRequest> build(
.deserializePrimitive(arguments, TraceTypeArgument.class)
.orElseThrow();

return this.build(context, traceType, arguments, selectionSet);
boolean fetchTotal =
this.selectionFinder
.findSelections(
selectionSet, SelectionQuery.namedChild(ResultSet.RESULT_SET_TOTAL_NAME))
.count()
> 0;

return this.build(context, traceType, arguments, selectionSet, fetchTotal);
}

private Single<TraceRequest> build(
GraphQlRequestContext context,
TraceType traceType,
Map<String, Object> arguments,
DataFetchingFieldSelectionSet selectionSet) {
DataFetchingFieldSelectionSet selectionSet,
boolean fetchTotal) {

return this.resultSetRequestBuilder
.build(context, traceType.getScopeString(), arguments, selectionSet)
.map(resultSetRequest -> new DefaultTraceRequest(context, resultSetRequest, traceType));
.map(
resultSetRequest ->
new DefaultTraceRequest(context, resultSetRequest, traceType, fetchTotal));
}

@Value
Expand All @@ -57,5 +74,6 @@ private static class DefaultTraceRequest implements TraceRequest {
GraphQlRequestContext context;
ResultSetRequest<OrderArgument> resultSetRequest;
TraceType traceType;
boolean fetchTotal;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,6 @@ public interface TraceRequest extends ContextualRequest {
ResultSetRequest<OrderArgument> resultSetRequest();

TraceType traceType();

boolean fetchTotal();
}