GraphQL Java Integration
Sentry GraphQL integration provides an integration with GraphQL Java through:
SentryDataFetcherExceptionHandler
which captures exceptions thrown during data fetcher executions.SentryInstrumentation
which creates spans around each data fetcher execution.
Install
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-graphql</artifactId>
<version>7.13.0</version>
</dependency>
For other dependency managers, check out the central Maven repository.
Capture Exceptions
SentryDataFetcherExceptionHandler
captures the exception, sends it to Sentry, and calls the delegate responsible for handling the exception.
Create a new instance of SentryDataFetcherExceptionHandler
, pass the delegate that handles the exception, and configure defaultDataFetcherExceptionHandler
when building a GraphQL
instance:
import graphql.GraphQL;
import graphql.execution.SimpleDataFetcherExceptionHandler;
import io.sentry.graphql.SentryDataFetcherExceptionHandler;
SimpleDataFetcherExceptionHandler defaultExceptionHandler = new SimpleDataFetcherExceptionHandler();
SentryDataFetcherExceptionHandler sentryExceptionHandler = new SentryDataFetcherExceptionHandler(defaultExceptionHandler);
GraphQL graphQL = GraphQL.newGraphQL(...)
// ...
.defaultDataFetcherExceptionHandler(sentryExceptionHandler)
.build();
Capture Performance
Capturing transactions requires that you first set up performance monitoring if you haven't already.
Configure
Create a new instance of SentryInstrumentation
and configure instrumentation
when building a GraphQL
instance:
import graphql.GraphQL;
import io.sentry.graphql.SentryInstrumentation;
GraphQL graphQL = GraphQL.newGraphQL(...)
// ...
.instrumentation(new SentryInstrumentation())
.build();
Modify or Drop Spans
Spans created around requests can be modified or dropped using SentryInstrumentation.BeforeSpanCallback
passed to SentryInstrumentation
:
import io.sentry.graphql.SentryInstrumentation;
import graphql.GraphQL;
GraphQL graphQL = GraphQL.newGraphQL()
.instrumentation(new SentryInstrumentation((span, environment, result) -> {
if ("/shows".equals(environment.getExecutionStepInfo().getPath().segmentToString())) {
span.setTag("tag-name", "tag-value");
}
return span;
}))
.build();
Using with Netflix DGS
Netflix DGS automatically detects and configures Instrumentation
and DataFetcherExceptionHandler
beans. To use Sentry GraphQL integration, create SentryDataFetcherExceptionHandler
and SentryInstrumentation
beans:
import com.netflix.graphql.dgs.exceptions.DefaultDataFetcherExceptionHandler;
import io.sentry.graphql.SentryDataFetcherExceptionHandler;
import io.sentry.graphql.SentryInstrumentation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
class SentryConfiguration {
@Bean
SentryInstrumentation sentryInstrumentation() {
return new SentryInstrumentation();
}
@Bean
SentryDataFetcherExceptionHandler sentryDataFetcherExceptionHandler() {
// delegate to default Netflix DGS exception handler
return new SentryDataFetcherExceptionHandler(new DefaultDataFetcherExceptionHandler());
}
}
- Package:
- maven:io.sentry:sentry-servlet
- Version:
- 7.13.0
- Repository:
- https://github.com/getsentry/sentry-java