org.opentripplanner.ext.transmodelapi.TransmodelGraph Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of otp Show documentation
Show all versions of otp Show documentation
The OpenTripPlanner multimodal journey planning system
package org.opentripplanner.ext.transmodelapi;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import graphql.ExecutionInput;
import graphql.ExecutionResult;
import graphql.GraphQL;
import graphql.analysis.MaxQueryComplexityInstrumentation;
import graphql.execution.instrumentation.ChainedInstrumentation;
import graphql.execution.instrumentation.Instrumentation;
import graphql.schema.GraphQLSchema;
import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.Tag;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.ws.rs.core.Response;
import org.opentripplanner.api.json.GraphQLResponseSerializer;
import org.opentripplanner.ext.actuator.MicrometerGraphQLInstrumentation;
import org.opentripplanner.standalone.api.OtpServerRequestContext;
import org.opentripplanner.util.OTPFeature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
class TransmodelGraph {
static final Logger LOG = LoggerFactory.getLogger(TransmodelGraph.class);
private final GraphQLSchema indexSchema;
final ExecutorService threadPool;
TransmodelGraph(GraphQLSchema schema) {
this.threadPool =
Executors.newCachedThreadPool(
new ThreadFactoryBuilder().setNameFormat("GraphQLExecutor-%d").build()
);
this.indexSchema = schema;
}
ExecutionResult getGraphQLExecutionResult(
String query,
OtpServerRequestContext serverContext,
Map variables,
String operationName,
int maxResolves,
Iterable tracingTags
) {
Instrumentation instrumentation = new MaxQueryComplexityInstrumentation(maxResolves);
if (OTPFeature.ActuatorAPI.isOn()) {
instrumentation =
new ChainedInstrumentation(
new MicrometerGraphQLInstrumentation(Metrics.globalRegistry, tracingTags),
instrumentation
);
}
GraphQL graphQL = GraphQL.newGraphQL(indexSchema).instrumentation(instrumentation).build();
if (variables == null) {
variables = new HashMap<>();
}
TransmodelRequestContext transmodelRequestContext = new TransmodelRequestContext(
serverContext,
serverContext.routingService(),
serverContext.transitService()
);
ExecutionInput executionInput = ExecutionInput
.newExecutionInput()
.query(query)
.operationName(operationName)
.context(transmodelRequestContext)
.root(serverContext)
.variables(variables)
.build();
return graphQL.execute(executionInput);
}
Response getGraphQLResponse(
String query,
OtpServerRequestContext serverContext,
Map variables,
String operationName,
int maxResolves,
Iterable tracingTags
) {
ExecutionResult result = getGraphQLExecutionResult(
query,
serverContext,
variables,
operationName,
maxResolves,
tracingTags
);
return Response
.status(Response.Status.OK)
.entity(GraphQLResponseSerializer.serialize(result))
.build();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy