Search in sources :

Example 11 with Instrumentation

use of graphql.execution.instrumentation.Instrumentation in project graphql-java by graphql-java.

the class AsyncExecutionStrategy method execute.

@Override
public CompletableFuture<ExecutionResult> execute(ExecutionContext executionContext, ExecutionStrategyParameters parameters) throws NonNullableFieldWasNullException {
    Instrumentation instrumentation = executionContext.getInstrumentation();
    InstrumentationExecutionStrategyParameters instrumentationParameters = new InstrumentationExecutionStrategyParameters(executionContext, parameters);
    InstrumentationContext<ExecutionResult> executionStrategyCtx = instrumentation.beginExecutionStrategy(instrumentationParameters);
    Map<String, List<Field>> fields = parameters.getFields();
    List<String> fieldNames = new ArrayList<>(fields.keySet());
    List<CompletableFuture<ExecutionResult>> futures = new ArrayList<>();
    for (String fieldName : fieldNames) {
        List<Field> currentField = fields.get(fieldName);
        ExecutionPath fieldPath = parameters.getPath().segment(fieldName);
        ExecutionStrategyParameters newParameters = parameters.transform(builder -> builder.field(currentField).path(fieldPath));
        if (isDeferred(executionContext, newParameters, currentField)) {
            continue;
        }
        CompletableFuture<ExecutionResult> future = resolveField(executionContext, newParameters);
        futures.add(future);
    }
    CompletableFuture<ExecutionResult> overallResult = new CompletableFuture<>();
    executionStrategyCtx.onDispatched(overallResult);
    Async.each(futures).whenComplete(handleResults(executionContext, fieldNames, overallResult));
    overallResult.whenComplete(executionStrategyCtx::onCompleted);
    return overallResult;
}
Also used : ArrayList(java.util.ArrayList) Instrumentation(graphql.execution.instrumentation.Instrumentation) ExecutionResult(graphql.ExecutionResult) Field(graphql.language.Field) CompletableFuture(java.util.concurrent.CompletableFuture) InstrumentationExecutionStrategyParameters(graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters) List(java.util.List) ArrayList(java.util.ArrayList) InstrumentationExecutionStrategyParameters(graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters)

Example 12 with Instrumentation

use of graphql.execution.instrumentation.Instrumentation in project graphql-java by graphql-java.

the class InstrumentationExamples method chained.

private void chained() {
    List<Instrumentation> chainedList = new ArrayList<>();
    chainedList.add(new FooInstrumentation());
    chainedList.add(new BarInstrumentation());
    ChainedInstrumentation chainedInstrumentation = new ChainedInstrumentation(chainedList);
    GraphQL.newGraphQL(schema).instrumentation(chainedInstrumentation).build();
}
Also used : ChainedInstrumentation(graphql.execution.instrumentation.ChainedInstrumentation) ArrayList(java.util.ArrayList) FieldValidationInstrumentation(graphql.execution.instrumentation.fieldvalidation.FieldValidationInstrumentation) TracingInstrumentation(graphql.execution.instrumentation.tracing.TracingInstrumentation) ChainedInstrumentation(graphql.execution.instrumentation.ChainedInstrumentation) Instrumentation(graphql.execution.instrumentation.Instrumentation) SimpleInstrumentation(graphql.execution.instrumentation.SimpleInstrumentation)

Aggregations

Instrumentation (graphql.execution.instrumentation.Instrumentation)12 ExecutionResult (graphql.ExecutionResult)9 Field (graphql.language.Field)7 List (java.util.List)7 CompletableFuture (java.util.concurrent.CompletableFuture)7 ArrayList (java.util.ArrayList)6 GraphQLFieldDefinition (graphql.schema.GraphQLFieldDefinition)5 GraphQLObjectType (graphql.schema.GraphQLObjectType)4 GraphqlFieldVisibility (graphql.schema.visibility.GraphqlFieldVisibility)4 CompletionException (java.util.concurrent.CompletionException)4 ExecutionResultImpl (graphql.ExecutionResultImpl)3 InstrumentationExecutionStrategyParameters (graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters)3 InstrumentationFieldParameters (graphql.execution.instrumentation.parameters.InstrumentationFieldParameters)3 GraphQLSchema (graphql.schema.GraphQLSchema)3 InstrumentationContext (graphql.execution.instrumentation.InstrumentationContext)2 SimpleInstrumentation (graphql.execution.instrumentation.SimpleInstrumentation)2 InstrumentationFieldCompleteParameters (graphql.execution.instrumentation.parameters.InstrumentationFieldCompleteParameters)2 InstrumentationFieldFetchParameters (graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters)2 DataFetchingEnvironment (graphql.schema.DataFetchingEnvironment)2 DataFetchingEnvironmentBuilder.newDataFetchingEnvironment (graphql.schema.DataFetchingEnvironmentBuilder.newDataFetchingEnvironment)2