Apollo3 Integration

Sentry Apollo3 integration provides the SentryApollo3Interceptor and the SentryApollo3HttpInterceptor, which create a span for each outgoing HTTP request executed with an Apollo Kotlin GraphQL client. For easier usage, the integration also provides extension functions on the ApolloClient.Builder.

Install

Copied
<dependency>
    <groupId>io.sentry</groupId>
    <artifactId>sentry-apollo-3</artifactId>
    <version>6.17.0</version>
</dependency>

For other dependency managers, see the central Maven repository.

Configure With Extension

Add Interceptors to ApolloClient.Builder using SentryApolloBuilderExtensions:

Copied
import com.apollographql.apollo3.ApolloClient;
import io.sentry.apollo3.SentryApolloBuilderExtensionsKt;

ApolloClient apollo = SentryApolloBuilderExtensionsKt.sentryTracing(new ApolloClient.Builder())
    .serverUrl("https://your-api-host/")
    .build();

Manual Configuration

When using a custom NetworkTransport, the SentryInterceptors need to be added manually, because HttpInterceptors need to be added to the NetworkTransport:

Copied
import com.apollographql.apollo3.ApolloClient;
import com.apollographql.apollo3.network.http.HttpNetworkTransport;
import io.sentry.apollo3.SentryApollo3HttpInterceptor;
import io.sentry.apollo3.SentryApollo3Interceptor;

ApolloClient apollo = new ApolloClient.Builder()
        .networkTransport(
            new HttpNetworkTransport.Builder()
                .serverUrl("https://your-api-host/")
                .addInterceptor(new SentryApollo3HttpInterceptor())
                .build())
        .addInterceptor(new SentryApollo3Interceptor())
        .build();

Using With Java

Configure Global Hub Mode:

Copied
import io.sentry.Sentry;

Sentry.init(options -> {
  ..
}, true)

Using With Kotlin Coroutines

To make sure that a coroutine has access to the correct Sentry context, provide an instance of SentryContext when launching a coroutine:

Copied
import com.apollographql.apollo3.ApolloClient
import com.apollographql.apollo3.exception.ApolloException
import io.sentry.kotlin.SentryContext
import kotlinx.coroutines.launch

launch(SentryContext()) {
  val response = try {
    apollo.query(..).toDeferred().await()
  } catch (e: ApolloException) {
    // handle protocol errors
    return@launch
  }
}

Modify or Drop Spans

Spans created around requests can be modified or dropped using SentryApollo3HttpInterceptor.BeforeSpanCallback passed to SentryApollo3HttpInterceptor or the sentryTracing extension function:

Copied
import com.apollographql.apollo3.ApolloClient;
import io.sentry.apollo3.SentryApolloBuilderExtensionsKt;

ApolloClient apollo = SentryApolloBuilderExtensionsKt.sentryTracing(
            new ApolloClient.Builder(),
            (span, request, response) -> {
              if ("LaunchDetails".equals(span.getOperation())) {
                span.setTag("tag-name", "tag-value");
              }
              return span;
            })
        .serverUrl("https://your-api-host/")
        .build();
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) to suggesting an update ("yeah, this would be better").