diff --git a/Writerside/topics/federation.md b/Writerside/topics/federation.md index 2b9b4aa1..1f3aba6d 100644 --- a/Writerside/topics/federation.md +++ b/Writerside/topics/federation.md @@ -11,9 +11,11 @@ dependencies { } ``` -## Defining entity keys +The `apollo-execution-federation` artifact contains the `@GraphQLKey` annotation allowing you to define [entities](https://www.apollographql.com/docs/graphos/schema-design/federated-schemas/entities/intro). -You can define [entity](https://www.apollographql.com/docs/graphos/schema-design/federated-schemas/entities/intro) key using the `GraphQLKey` annotation: +## Defining entities + +You can define an [entity](https://www.apollographql.com/docs/graphos/schema-design/federated-schemas/entities/intro) key using the `@GraphQLKey` annotation: ```kotlin class Product( @@ -23,7 +25,7 @@ class Product( ) ``` -The `GraphQLKey` annotation is translated at build time into a matching federation `@key` directive: +The `@GraphQLKey` annotation is translated at build time into a matching federation `@key` directive: ```graphql @key(fields: "id") @@ -36,7 +38,7 @@ type Product { > By adding the annotation on the field definition instead of the type definition, Apollo Kotlin Execution gives you more type safety. {style="note"} -## Federation subgraph fields +## Auto-generated meta fields Whenever a type containing a `@GraphQLKey` field is present, Apollo Kotlin Execution adds the [federation subgraph fields](https://www.apollographql.com/docs/graphos/reference/federation/subgraph-specific-fields), `_service` and `_entities`: @@ -56,9 +58,9 @@ extend type Query { } ``` -## Defining federated resolvers +## Defining entity resolvers -In order to support the `_entities` field, federation requires a resolver that can resolve an entity from its key field. +In order to support the `_entities` field, federation requires a resolver that can resolve an entity from its key fields. You can add one by defining a `resolve` function on the companion object: @@ -95,4 +97,47 @@ class Product( } } } -``` \ No newline at end of file +``` + +## Tracing (ftv1) + +Apollo Kotlin Execution supports [federated tracing](https://www.apollographql.com/docs/federation/v1/metrics) (ftv1). + +Ftv1 records timing information for each field and reports that information to the router through the `"ftv1"` extension. + +This is done through the `Ftv1Instrumentation` and its matching `Ftv1Context`: + +```kotlin +// Install the Ftv1Instrumentation in the executable schema +val schema = ServiceExecutableSchemaBuilder() + .addInstrumentation(Ftv1Instrumentation()) + .build() + +// Create a new Ftv1Context() for each operation and use it through execution +val ftv1Context = Ftv1Context() +val response = schema.execute(request, ftv1Context) + +// The information is a Base64 encoded protobuf message used by the router +val ftv1 = response.extensions.get("ftv1") +``` + +Sending the `"ftv1"` extension has some overhead and in real life scenarios, the router uses sampling to save network bandwidth. + +This is done using the `"apollo-federation-include-trace"` HTTP header: + +```kotlin +val ftv1Context = if (httpHeaders.get("apollo-federation-include-trace") == "ftv1") { + // The router required tracing information for this request + Ftv1Context() +} else { + // No tracing information is required, skip processing + ExecutionContext.Empty +} +val response = schema.execute(request, ftv1Context) + +``` + +```kotlin + +``` + diff --git a/apollo-execution-federation/api/apollo-execution-federation.api b/apollo-execution-federation/api/apollo-execution-federation.api index 68ab04b3..47b16d11 100644 --- a/apollo-execution-federation/api/apollo-execution-federation.api +++ b/apollo-execution-federation/api/apollo-execution-federation.api @@ -1,3 +1,20 @@ +public final class com/apollographql/execution/federation/Ftv1Context : com/apollographql/apollo/api/ExecutionContext$Element { + public static final field Key Lcom/apollographql/execution/federation/Ftv1Context$Key; + public fun ()V + public final fun getApolloOperationTracing ()Lcom/apollographql/execution/tracing/ApolloOperationTracing; + public synthetic fun getKey ()Lcom/apollographql/apollo/api/ExecutionContext$Key; + public fun getKey ()Lcom/apollographql/execution/federation/Ftv1Context$Key; +} + +public final class com/apollographql/execution/federation/Ftv1Context$Key : com/apollographql/apollo/api/ExecutionContext$Key { +} + +public final class com/apollographql/execution/federation/Ftv1Instrumentation : com/apollographql/execution/Instrumentation { + public fun ()V + public fun beforeField (Lcom/apollographql/execution/ResolveInfo;)Lcom/apollographql/execution/InstrumentationCallback; + public fun onResponse (Lcom/apollographql/execution/GraphQLResponse;Lcom/apollographql/apollo/api/ExecutionContext;)Lcom/apollographql/execution/GraphQLResponse; +} + public abstract interface annotation class com/apollographql/execution/federation/GraphQLKey : java/lang/annotation/Annotation { } diff --git a/apollo-execution-federation/api/apollo-execution-federation.klib.api b/apollo-execution-federation/api/apollo-execution-federation.klib.api index c843eb20..648bd2ef 100644 --- a/apollo-execution-federation/api/apollo-execution-federation.klib.api +++ b/apollo-execution-federation/api/apollo-execution-federation.klib.api @@ -6,6 +6,19 @@ // - Show declarations: true // Library unique name: +final class com.apollographql.execution.federation/Ftv1Context : com.apollographql.apollo.api/ExecutionContext.Element { // com.apollographql.execution.federation/Ftv1Context|null[0] + constructor () // com.apollographql.execution.federation/Ftv1Context.|(){}[0] + final object Key : com.apollographql.apollo.api/ExecutionContext.Key // com.apollographql.execution.federation/Ftv1Context.Key|null[0] + final val apolloOperationTracing // com.apollographql.execution.federation/Ftv1Context.apolloOperationTracing|{}apolloOperationTracing[0] + final fun (): com.apollographql.execution.tracing/ApolloOperationTracing // com.apollographql.execution.federation/Ftv1Context.apolloOperationTracing.|(){}[0] + final val key // com.apollographql.execution.federation/Ftv1Context.key|{}key[0] + final fun (): com.apollographql.execution.federation/Ftv1Context.Key // com.apollographql.execution.federation/Ftv1Context.key.|(){}[0] +} +final class com.apollographql.execution.federation/Ftv1Instrumentation : com.apollographql.execution/Instrumentation { // com.apollographql.execution.federation/Ftv1Instrumentation|null[0] + constructor () // com.apollographql.execution.federation/Ftv1Instrumentation.|(){}[0] + final fun beforeField(com.apollographql.execution/ResolveInfo): com.apollographql.execution/InstrumentationCallback? // com.apollographql.execution.federation/Ftv1Instrumentation.beforeField|beforeField(com.apollographql.execution.ResolveInfo){}[0] + final fun onResponse(com.apollographql.execution/GraphQLResponse, com.apollographql.apollo.api/ExecutionContext): com.apollographql.execution/GraphQLResponse // com.apollographql.execution.federation/Ftv1Instrumentation.onResponse|onResponse(com.apollographql.execution.GraphQLResponse;com.apollographql.apollo.api.ExecutionContext){}[0] +} final object com.apollographql.execution.federation/_AnyCoercing : com.apollographql.execution/Coercing { // com.apollographql.execution.federation/_AnyCoercing|null[0] final fun deserialize(kotlin/Any?): kotlin/Any? // com.apollographql.execution.federation/_AnyCoercing.deserialize|deserialize(kotlin.Any?){}[0] final fun parseLiteral(com.apollographql.apollo.ast/GQLValue): kotlin/Any? // com.apollographql.execution.federation/_AnyCoercing.parseLiteral|parseLiteral(com.apollographql.apollo.ast.GQLValue){}[0] diff --git a/apollo-execution-federation/build.gradle.kts b/apollo-execution-federation/build.gradle.kts index 62b3d2a6..24e37d44 100644 --- a/apollo-execution-federation/build.gradle.kts +++ b/apollo-execution-federation/build.gradle.kts @@ -15,6 +15,7 @@ kotlin { dependencies { api(libs.apollo.ast) api(libs.apollo.api) + implementation(project(":apollo-execution-tracing")) api(project(":apollo-execution-runtime")) } } diff --git a/apollo-execution-federation/src/commonMain/kotlin/com/apollographql/execution/federation/Ftv1Instrumentation.kt b/apollo-execution-federation/src/commonMain/kotlin/com/apollographql/execution/federation/Ftv1Instrumentation.kt new file mode 100644 index 00000000..fc48aa71 --- /dev/null +++ b/apollo-execution-federation/src/commonMain/kotlin/com/apollographql/execution/federation/Ftv1Instrumentation.kt @@ -0,0 +1,40 @@ +@file:OptIn(ExperimentalEncodingApi::class) + +package com.apollographql.execution.federation + +import com.apollographql.apollo.api.ExecutionContext +import com.apollographql.execution.GraphQLResponse +import com.apollographql.execution.Instrumentation +import com.apollographql.execution.InstrumentationCallback +import com.apollographql.execution.ResolveInfo +import com.apollographql.execution.tracing.ApolloOperationTracing +import kotlin.io.encoding.Base64 +import kotlin.io.encoding.ExperimentalEncodingApi + +class Ftv1Instrumentation: Instrumentation() { + override fun beforeField(resolveInfo: ResolveInfo): InstrumentationCallback? { + val ftv1Context = resolveInfo.executionContext[Ftv1Context] + if (ftv1Context == null) { + return null + } + return ftv1Context.apolloOperationTracing.beforeField(resolveInfo) + } + + override fun onResponse(response: GraphQLResponse, executionContext: ExecutionContext): GraphQLResponse { + val ftv1Context = executionContext[Ftv1Context] + if (ftv1Context == null) { + return response + } + return response.newBuilder() + .extensions(mapOf("ftv1" to Base64.encode(ftv1Context.apolloOperationTracing.toProtoTrace().encode()))) + .build() + } +} + +class Ftv1Context() : ExecutionContext.Element { + val apolloOperationTracing: ApolloOperationTracing = ApolloOperationTracing() + + override val key = Key + + companion object Key : ExecutionContext.Key +} diff --git a/apollo-execution-ktor/api/apollo-execution-ktor.api b/apollo-execution-ktor/api/apollo-execution-ktor.api index 5080a683..7b9264ca 100644 --- a/apollo-execution-ktor/api/apollo-execution-ktor.api +++ b/apollo-execution-ktor/api/apollo-execution-ktor.api @@ -1,6 +1,6 @@ public final class com/apollographql/execution/ktor/MainKt { - public static final fun apolloModule (Lio/ktor/server/application/Application;Lcom/apollographql/execution/ExecutableSchema;Ljava/lang/String;Lcom/apollographql/apollo/api/ExecutionContext;)V - public static synthetic fun apolloModule$default (Lio/ktor/server/application/Application;Lcom/apollographql/execution/ExecutableSchema;Ljava/lang/String;Lcom/apollographql/apollo/api/ExecutionContext;ILjava/lang/Object;)V + public static final fun apolloModule (Lio/ktor/server/application/Application;Lcom/apollographql/execution/ExecutableSchema;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun apolloModule$default (Lio/ktor/server/application/Application;Lcom/apollographql/execution/ExecutableSchema;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public static final fun apolloSandboxModule (Lio/ktor/server/application/Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V public static synthetic fun apolloSandboxModule$default (Lio/ktor/server/application/Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)V public static final fun parseAsGraphQLRequest (Lio/ktor/server/request/ApplicationRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; diff --git a/apollo-execution-ktor/src/commonMain/kotlin/com/apollographql/execution/ktor/main.kt b/apollo-execution-ktor/src/commonMain/kotlin/com/apollographql/execution/ktor/main.kt index 31d99037..9da03a88 100644 --- a/apollo-execution-ktor/src/commonMain/kotlin/com/apollographql/execution/ktor/main.kt +++ b/apollo-execution-ktor/src/commonMain/kotlin/com/apollographql/execution/ktor/main.kt @@ -12,23 +12,27 @@ import io.ktor.server.util.* import io.ktor.utils.io.* import okio.Buffer -suspend fun ApplicationCall.respondGraphQL(executableSchema: ExecutableSchema, executionContext: ExecutionContext = ExecutionContext.Empty, configure: OutgoingContent.(GraphQLResponse?) -> Unit = {}) { +suspend fun ApplicationCall.respondGraphQL( + executableSchema: ExecutableSchema, + executionContext: ExecutionContext = ExecutionContext.Empty, + configure: OutgoingContent.(GraphQLResponse?) -> Unit = {} +) { val request = request.parseAsGraphQLRequest() val contentType = ContentType.parse("application/graphql-response+json") if (request.isFailure) { respondText( - contentType = contentType, - status = HttpStatusCode.BadRequest, - text = request.exceptionOrNull()?.message ?: "", - configure = { configure(null) } + contentType = contentType, + status = HttpStatusCode.BadRequest, + text = request.exceptionOrNull()?.message ?: "", + configure = { configure(null) } ) } else { val response = executableSchema.execute(request.getOrThrow(), executionContext) respondBytes( - contentType = contentType, - status = HttpStatusCode.OK, - bytes = response.toByteArray(), - configure = { configure(response) } + contentType = contentType, + status = HttpStatusCode.OK, + bytes = response.toByteArray(), + configure = { configure(response) } ) } } @@ -68,16 +72,16 @@ suspend fun ApplicationRequest.parseAsGraphQLRequest(): Result { } fun Application.apolloModule( - executableSchema: ExecutableSchema, - path: String = "/graphql", - executionContext: ExecutionContext = ExecutionContext.Empty + executableSchema: ExecutableSchema, + path: String = "/graphql", + executionContext: (RoutingRequest) -> ExecutionContext = { ExecutionContext.Empty } ) { routing { post(path) { - call.respondGraphQL(executableSchema, executionContext) + call.respondGraphQL(executableSchema, executionContext(call.request)) } get(path) { - call.respondGraphQL(executableSchema, executionContext) + call.respondGraphQL(executableSchema, executionContext(call.request)) } } } @@ -92,7 +96,17 @@ fun Application.apolloSandboxModule( call.respondRedirect(call.url { path("/sandbox/index.html") }, permanent = true) } get("$sandboxPath/index.html") { - val initialEndpoint = call.url { path(graphqlPath) } + val initialEndpoint = call.url { + /** + * Trying to guess if the client connected through HTTPS + */ + val proto = call.request.header("x-forwarded-proto") + when (proto) { + "http" -> protocol = URLProtocol.HTTP + "https" -> protocol = URLProtocol.HTTPS + } + path(graphqlPath) + } call.respondText(sandboxHtml(title, initialEndpoint), ContentType.parse("text/html")) } } diff --git a/apollo-execution-runtime/api/apollo-execution-runtime.api b/apollo-execution-runtime/api/apollo-execution-runtime.api index 21abb3fd..49aa561e 100644 --- a/apollo-execution-runtime/api/apollo-execution-runtime.api +++ b/apollo-execution-runtime/api/apollo-execution-runtime.api @@ -39,7 +39,7 @@ public final class com/apollographql/execution/ErrorPersistedDocument : com/apol } public final class com/apollographql/execution/ExecutableSchema { - public fun (Lcom/apollographql/apollo/ast/Schema;Ljava/util/Map;Lcom/apollographql/execution/RootResolver;Lcom/apollographql/execution/RootResolver;Lcom/apollographql/execution/RootResolver;Lcom/apollographql/execution/Resolver;Lcom/apollographql/execution/TypeResolver;Lcom/apollographql/execution/PersistedDocumentCache;)V + public fun (Lcom/apollographql/apollo/ast/Schema;Ljava/util/Map;Lcom/apollographql/execution/RootResolver;Lcom/apollographql/execution/RootResolver;Lcom/apollographql/execution/RootResolver;Lcom/apollographql/execution/Resolver;Lcom/apollographql/execution/TypeResolver;Ljava/util/List;Lcom/apollographql/execution/PersistedDocumentCache;)V public final fun execute (Lcom/apollographql/execution/GraphQLRequest;Lcom/apollographql/apollo/api/ExecutionContext;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun execute$default (Lcom/apollographql/execution/ExecutableSchema;Lcom/apollographql/execution/GraphQLRequest;Lcom/apollographql/apollo/api/ExecutionContext;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun subscribe (Lcom/apollographql/execution/GraphQLRequest;Lcom/apollographql/apollo/api/ExecutionContext;)Lkotlinx/coroutines/flow/Flow; @@ -49,6 +49,7 @@ public final class com/apollographql/execution/ExecutableSchema { public final class com/apollographql/execution/ExecutableSchema$Builder { public fun ()V public final fun addCoercing (Ljava/lang/String;Lcom/apollographql/execution/Coercing;)Lcom/apollographql/execution/ExecutableSchema$Builder; + public final fun addInstrumentation (Lcom/apollographql/execution/Instrumentation;)Lcom/apollographql/execution/ExecutableSchema$Builder; public final fun build ()Lcom/apollographql/execution/ExecutableSchema; public final fun mutationRoot (Lcom/apollographql/execution/RootResolver;)Lcom/apollographql/execution/ExecutableSchema$Builder; public final fun persistedDocumentCache (Lcom/apollographql/execution/PersistedDocumentCache;)Lcom/apollographql/execution/ExecutableSchema$Builder; @@ -106,6 +107,7 @@ public final class com/apollographql/execution/GraphQLResponse { public final fun getData ()Ljava/lang/Object; public final fun getErrors ()Ljava/util/List; public final fun getExtensions ()Ljava/util/Map; + public final fun newBuilder ()Lcom/apollographql/execution/GraphQLResponse$Builder; public final fun serialize (Lcom/apollographql/apollo/api/json/JsonWriter;)V public final fun serialize (Lokio/Sink;)V } @@ -130,6 +132,16 @@ public final class com/apollographql/execution/InMemoryPersistedDocumentCache : public fun put (Ljava/lang/String;Lcom/apollographql/execution/PersistedDocument;)V } +public abstract class com/apollographql/execution/Instrumentation { + public fun ()V + public fun beforeField (Lcom/apollographql/execution/ResolveInfo;)Lcom/apollographql/execution/InstrumentationCallback; + public fun onResponse (Lcom/apollographql/execution/GraphQLResponse;Lcom/apollographql/apollo/api/ExecutionContext;)Lcom/apollographql/execution/GraphQLResponse; +} + +public abstract interface class com/apollographql/execution/InstrumentationCallback { + public abstract fun afterComplete (Ljava/lang/Object;)V +} + public final class com/apollographql/execution/IntCoercing : com/apollographql/execution/Coercing { public static final field INSTANCE Lcom/apollographql/execution/IntCoercing; public fun deserialize (Ljava/lang/Object;)Ljava/lang/Integer; @@ -158,6 +170,7 @@ public final class com/apollographql/execution/ResolveInfo { public final fun getFields ()Ljava/util/List; public final fun getParentObject ()Ljava/lang/Object; public final fun getParentType ()Ljava/lang/String; + public final fun getPath ()Ljava/util/List; public final fun getRequiredArgument (Ljava/lang/String;)Ljava/lang/Object; public final fun getSchema ()Lcom/apollographql/apollo/ast/Schema; } diff --git a/apollo-execution-runtime/api/apollo-execution-runtime.klib.api b/apollo-execution-runtime/api/apollo-execution-runtime.klib.api index 2a0a0d26..2df4c7d6 100644 --- a/apollo-execution-runtime/api/apollo-execution-runtime.klib.api +++ b/apollo-execution-runtime/api/apollo-execution-runtime.klib.api @@ -6,6 +6,14 @@ // - Show declarations: true // Library unique name: +abstract class com.apollographql.execution/Instrumentation { // com.apollographql.execution/Instrumentation|null[0] + constructor () // com.apollographql.execution/Instrumentation.|(){}[0] + open fun beforeField(com.apollographql.execution/ResolveInfo): com.apollographql.execution/InstrumentationCallback? // com.apollographql.execution/Instrumentation.beforeField|beforeField(com.apollographql.execution.ResolveInfo){}[0] + open fun onResponse(com.apollographql.execution/GraphQLResponse, com.apollographql.apollo.api/ExecutionContext): com.apollographql.execution/GraphQLResponse // com.apollographql.execution/Instrumentation.onResponse|onResponse(com.apollographql.execution.GraphQLResponse;com.apollographql.apollo.api.ExecutionContext){}[0] +} +abstract fun interface com.apollographql.execution/InstrumentationCallback { // com.apollographql.execution/InstrumentationCallback|null[0] + abstract fun afterComplete(kotlin/Any?) // com.apollographql.execution/InstrumentationCallback.afterComplete|afterComplete(kotlin.Any?){}[0] +} abstract fun interface com.apollographql.execution/Resolver { // com.apollographql.execution/Resolver|null[0] abstract suspend fun resolve(com.apollographql.execution/ResolveInfo): kotlin/Any? // com.apollographql.execution/Resolver.resolve|resolve(com.apollographql.execution.ResolveInfo){}[0] } @@ -63,10 +71,11 @@ final class com.apollographql.execution/ErrorPersistedDocument : com.apollograph final fun (): kotlin.collections/List // com.apollographql.execution/ErrorPersistedDocument.issues.|(){}[0] } final class com.apollographql.execution/ExecutableSchema { // com.apollographql.execution/ExecutableSchema|null[0] - constructor (com.apollographql.apollo.ast/Schema, kotlin.collections/Map>, com.apollographql.execution/RootResolver?, com.apollographql.execution/RootResolver?, com.apollographql.execution/RootResolver?, com.apollographql.execution/Resolver, com.apollographql.execution/TypeResolver, com.apollographql.execution/PersistedDocumentCache?) // com.apollographql.execution/ExecutableSchema.|(com.apollographql.apollo.ast.Schema;kotlin.collections.Map>;com.apollographql.execution.RootResolver?;com.apollographql.execution.RootResolver?;com.apollographql.execution.RootResolver?;com.apollographql.execution.Resolver;com.apollographql.execution.TypeResolver;com.apollographql.execution.PersistedDocumentCache?){}[0] + constructor (com.apollographql.apollo.ast/Schema, kotlin.collections/Map>, com.apollographql.execution/RootResolver?, com.apollographql.execution/RootResolver?, com.apollographql.execution/RootResolver?, com.apollographql.execution/Resolver, com.apollographql.execution/TypeResolver, kotlin.collections/List, com.apollographql.execution/PersistedDocumentCache?) // com.apollographql.execution/ExecutableSchema.|(com.apollographql.apollo.ast.Schema;kotlin.collections.Map>;com.apollographql.execution.RootResolver?;com.apollographql.execution.RootResolver?;com.apollographql.execution.RootResolver?;com.apollographql.execution.Resolver;com.apollographql.execution.TypeResolver;kotlin.collections.List;com.apollographql.execution.PersistedDocumentCache?){}[0] final class Builder { // com.apollographql.execution/ExecutableSchema.Builder|null[0] constructor () // com.apollographql.execution/ExecutableSchema.Builder.|(){}[0] final fun addCoercing(kotlin/String, com.apollographql.execution/Coercing<*>): com.apollographql.execution/ExecutableSchema.Builder // com.apollographql.execution/ExecutableSchema.Builder.addCoercing|addCoercing(kotlin.String;com.apollographql.execution.Coercing<*>){}[0] + final fun addInstrumentation(com.apollographql.execution/Instrumentation): com.apollographql.execution/ExecutableSchema.Builder // com.apollographql.execution/ExecutableSchema.Builder.addInstrumentation|addInstrumentation(com.apollographql.execution.Instrumentation){}[0] final fun build(): com.apollographql.execution/ExecutableSchema // com.apollographql.execution/ExecutableSchema.Builder.build|build(){}[0] final fun mutationRoot(com.apollographql.execution/RootResolver): com.apollographql.execution/ExecutableSchema.Builder // com.apollographql.execution/ExecutableSchema.Builder.mutationRoot|mutationRoot(com.apollographql.execution.RootResolver){}[0] final fun persistedDocumentCache(com.apollographql.execution/PersistedDocumentCache?): com.apollographql.execution/ExecutableSchema.Builder // com.apollographql.execution/ExecutableSchema.Builder.persistedDocumentCache|persistedDocumentCache(com.apollographql.execution.PersistedDocumentCache?){}[0] @@ -127,6 +136,7 @@ final class com.apollographql.execution/GraphQLResponse { // com.apollographql.e final fun (): kotlin.collections/Map? // com.apollographql.execution/GraphQLResponse.Builder.extensions.|(){}[0] final fun (kotlin.collections/Map?) // com.apollographql.execution/GraphQLResponse.Builder.extensions.|(kotlin.collections.Map?){}[0] } + final fun newBuilder(): com.apollographql.execution/GraphQLResponse.Builder // com.apollographql.execution/GraphQLResponse.newBuilder|newBuilder(){}[0] final fun serialize(com.apollographql.apollo.api.json/JsonWriter) // com.apollographql.execution/GraphQLResponse.serialize|serialize(com.apollographql.apollo.api.json.JsonWriter){}[0] final fun serialize(okio/Sink) // com.apollographql.execution/GraphQLResponse.serialize|serialize(okio.Sink){}[0] final val data // com.apollographql.execution/GraphQLResponse.data|{}data[0] @@ -158,6 +168,8 @@ final class com.apollographql.execution/ResolveInfo { // com.apollographql.execu final fun (): kotlin/Any? // com.apollographql.execution/ResolveInfo.parentObject.|(){}[0] final val parentType // com.apollographql.execution/ResolveInfo.parentType|{}parentType[0] final fun (): kotlin/String // com.apollographql.execution/ResolveInfo.parentType.|(){}[0] + final val path // com.apollographql.execution/ResolveInfo.path|{}path[0] + final fun (): kotlin.collections/List // com.apollographql.execution/ResolveInfo.path.|(){}[0] final val schema // com.apollographql.execution/ResolveInfo.schema|{}schema[0] final fun (): com.apollographql.apollo.ast/Schema // com.apollographql.execution/ResolveInfo.schema.|(){}[0] } diff --git a/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/ExecutableSchema.kt b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/ExecutableSchema.kt index 4fd2daa0..d8bf58f3 100644 --- a/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/ExecutableSchema.kt +++ b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/ExecutableSchema.kt @@ -19,6 +19,7 @@ class ExecutableSchema( private val subscriptionRoot: RootResolver?, private val resolver: Resolver, private val typeResolver: TypeResolver, + private val instrumentations: List, private val persistedDocumentCache: PersistedDocumentCache?, ) { private val introspectionResolver: Resolver = introspectionResolver(schema) @@ -61,6 +62,7 @@ class ExecutableSchema( subscriptionRoot, resolver, typeResolver, + instrumentations, preparedRequest.operation, preparedRequest.fragments, preparedRequest.variables, @@ -76,6 +78,7 @@ class ExecutableSchema( private var mutationRoot: RootResolver? = null private var subscriptionRoot: RootResolver? = null private var typeResolver: TypeResolver? = null + private val instrumentations = mutableListOf() private var persistedDocumentCache: PersistedDocumentCache? = null fun schema(schema: GQLDocument): Builder = apply { @@ -110,6 +113,10 @@ class ExecutableSchema( this.typeResolver = typeResolver } + fun addInstrumentation(instrumentation: Instrumentation): Builder = apply { + this.instrumentations.add(instrumentation) + } + fun persistedDocumentCache(persistedDocumentCache: PersistedDocumentCache?): Builder = apply { this.persistedDocumentCache = persistedDocumentCache } @@ -127,6 +134,7 @@ class ExecutableSchema( subscriptionRoot, resolver ?: ThrowingResolver, typeResolver ?: ThrowingTypeResolver, + instrumentations, persistedDocumentCache ) } diff --git a/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/GraphQLResponse.kt b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/GraphQLResponse.kt index 20b4c8bb..5bd996e5 100644 --- a/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/GraphQLResponse.kt +++ b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/GraphQLResponse.kt @@ -24,6 +24,11 @@ class GraphQLResponse internal constructor( } } + fun newBuilder(): Builder { + @Suppress("UNCHECKED_CAST") + return Builder().data(data as Map?).errors(errors).extensions(extensions) + } + class Builder { var data: Map? = null var errors: List? = null diff --git a/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/Instrumentation.kt b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/Instrumentation.kt new file mode 100644 index 00000000..cea362b5 --- /dev/null +++ b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/Instrumentation.kt @@ -0,0 +1,39 @@ +package com.apollographql.execution + +import com.apollographql.apollo.api.ExecutionContext + + +/** + * An [Instrumentation] monitors the execution algorithm. + * + * Compared to a [Resolver], it's also called for built-in introspection fields and can monitor the completed value. + */ +abstract class Instrumentation { + /** + * Called before the [Resolver] is called. + * @return an [InstrumentationCallback] called after the field is executed + * @throws Exception if something goes wrong. If an instrumentation fails, the whole field + * fails and an error is returned. + */ + open fun beforeField(resolveInfo: ResolveInfo): InstrumentationCallback? { + return null + } + + /** + * Allows modifying [onResponse] + */ + open fun onResponse(response: GraphQLResponse, executionContext: ExecutionContext): GraphQLResponse { + return response + } +} + +fun interface InstrumentationCallback { + /** + * Called when a field value is completed. + * + * @param value the value after completion + * @throws Exception if something goes wrong. If an instrumentation fails, the whole field + * fails and an error is returned. + */ + fun afterComplete(value: ExternalValue) +} \ No newline at end of file diff --git a/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/Resolver.kt b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/Resolver.kt index 5728dd23..eb28c929 100644 --- a/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/Resolver.kt +++ b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/Resolver.kt @@ -60,6 +60,7 @@ class ResolveInfo internal constructor( val fields: List, val schema: Schema, private val arguments: Map, + val path: List ) { val field: GQLField get() = fields.first() diff --git a/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/internal/OperationContext.kt b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/internal/OperationContext.kt index 2860ae2d..3b8bb91c 100644 --- a/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/internal/OperationContext.kt +++ b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/internal/OperationContext.kt @@ -28,6 +28,7 @@ internal class OperationContext( private val subscriptionRoot: RootResolver?, private val resolver: Resolver, private val typeResolver: TypeResolver, + private val instrumentations: List, private val operation: GQLOperationDefinition, private val fragments: Map, private val variableValues: Map, @@ -92,6 +93,17 @@ internal class OperationContext( } } + internal suspend fun ExternalValueOrDeferred.toGraphQLResponse(): GraphQLResponse { + val errors = mutableListOf() + + val data = this.finalize(errors) + + val response = GraphQLResponse(data, errors.ifEmpty { null }, null) + + return instrumentations.fold(response) { acc, instrumentation -> + instrumentation.onResponse(acc, executionContext) + } + } private fun subscriptionError(message: String): Flow { return flowOf(SubscriptionError(listOf(Error.Builder(message).build()))) @@ -106,7 +118,17 @@ internal class OperationContext( responseName: String ): Flow { return flow { - emit(resolveFieldValue(subscriptionType, rootValue, fields, arguments = argumentValues, emptyList())) + val resolveInfo = ResolveInfo( + parentObject = rootValue, + executionContext = executionContext, + fields = fields, + schema = schema, + arguments = argumentValues, + parentType = subscriptionType.name, + path = emptyList() + ) + + emit(resolveFieldValue(resolveInfo)) }.flatMapConcat { if (it !is Flow<*>) { flowOf(FieldEventError("Subscription resolvers must return a Flow<> (got '$it')")) @@ -182,7 +204,6 @@ internal class OperationContext( is FieldEventError -> GraphQLResponse.Builder().errors(listOf(Error.Builder(event.message).build())).build() is FieldEventItem -> { coroutineScope { - val errors = mutableListOf() val fieldData = completeValue( scope = this, fieldType = event.fields.first().definitionFromScope(schema, event.parentType)!!.type, @@ -191,7 +212,7 @@ internal class OperationContext( path = listOf(event.responseName) ) - GraphQLResponse(mapOf(event.responseName to fieldData?.finalize(errors)), errors.orNullIfEmpty(), null) + mapOf(event.responseName to fieldData).toGraphQLResponse() } } } @@ -220,7 +241,36 @@ internal class OperationContext( val argumentValues = coerceArgumentValues(schema, objectType.name, field, coercings, variableValues) return scope.async(start = CoroutineStart.UNDISPATCHED) { - val resolvedValue = resolveFieldValue(objectType, objectValue, fields, argumentValues, path) + val resolveInfo = ResolveInfo( + parentObject = objectValue, + executionContext = executionContext, + fields = fields, + schema = schema, + arguments = argumentValues, + parentType = objectType.name, + path = path, + ) + + val instrumentationCallbacks = mutableListOf() + var instrumentationError: Error? = null + instrumentations.map { + try { + val callback = it.beforeField(resolveInfo) + if (callback != null) { + instrumentationCallbacks.add(callback) + } + } catch (e: Exception) { + if (e is CancellationException) { + throw e + } + instrumentationError = Error.Builder("Cannot instrument '${path.lastOrNull()}': ${e.message}") + .path(path) + .build() + } + } + + val completedValue = if (instrumentationError == null) { + val resolvedValue = resolveFieldValue(resolveInfo) completeValue( scope = scope, fieldType = fieldType, @@ -228,6 +278,13 @@ internal class OperationContext( result = resolvedValue, path = path ) + } else { + instrumentationError + } + instrumentationCallbacks.forEach { + it.afterComplete(completedValue) + } + completedValue } } @@ -237,7 +294,7 @@ internal class OperationContext( fields: List, result: ResolverValue, path: List - ): ExternalValueOrDeferred { + ): ExternalValue { return runFieldOrError(path) { completeValueOrThrow( scope, @@ -259,7 +316,7 @@ internal class OperationContext( fields: List, result: ResolverValue, path: List - ): ExternalValueOrDeferred { + ): ExternalValue { if (result is Error) { // fast path if the resolver failed return result @@ -286,13 +343,21 @@ internal class OperationContext( .build() } - val list = mutableListOf() - result.forEachIndexed { index, item -> - val completed = completeValue(scope, fieldType.type, fields, item, path + index) + val deferred = result.mapIndexed { index, item -> + scope.async(start = CoroutineStart.UNDISPATCHED) { + completeValue(scope, fieldType.type, fields, item, path + index) + } + } + val list = deferred.map { + val completed = it.await() if (bubbles && completed is Error && fieldType.type is GQLNonNullType) { + /** + * We got an error in non-null position, return early + * TODO: cancel other deferred items + */ return completed } - list.add(completed) + completed } return list } @@ -340,7 +405,7 @@ internal class OperationContext( private suspend fun runFieldOrError( path: List, - block: suspend () -> ExternalValueOrDeferred + block: suspend () -> Any? ): Any? { return try { block() @@ -355,14 +420,10 @@ internal class OperationContext( } private suspend fun resolveFieldValue( - typeDefinition: GQLObjectTypeDefinition, - objectValue: ResolverValue, - fields: List, - arguments: Map, - path: List, + resolveInfo: ResolveInfo, ): ResolverValueOrError { - return runFieldOrError(path) { - resolveFieldValueOrThrow(typeDefinition, objectValue, fields, arguments) + return runFieldOrError(resolveInfo.path) { + resolveFieldValueOrThrow(resolveInfo) } } @@ -372,20 +433,8 @@ internal class OperationContext( * @throws [Exception] when the resolver throws. */ private suspend fun resolveFieldValueOrThrow( - typeDefinition: GQLObjectTypeDefinition, - objectValue: ResolverValue, - fields: List, - arguments: Map, + resolveInfo: ResolveInfo ): ResolverValue { - val resolveInfo = ResolveInfo( - parentObject = objectValue, - executionContext = executionContext, - fields = fields, - schema = schema, - arguments = arguments, - parentType = typeDefinition.name - ) - val resolver = when { resolveInfo.fieldName.startsWith("__") -> introspectionResolver resolveInfo.parentType.startsWith("__") -> introspectionResolver diff --git a/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/values.kt b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/values.kt index 86c7fb39..13cb1d30 100644 --- a/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/values.kt +++ b/apollo-execution-runtime/src/commonMain/kotlin/com/apollographql/execution/values.kt @@ -49,7 +49,7 @@ internal typealias ResolverValueOrError = Any? typealias JsonValue = Any? /** - * Any of [JsonValue] or an error + * Any of [JsonValue] or [Error] */ typealias ExternalValue = Any? @@ -73,13 +73,6 @@ internal suspend fun ExternalValueOrDeferred.finalize(errors: MutableList } } -internal suspend fun ExternalValueOrDeferred.toGraphQLResponse(): GraphQLResponse { - val errors = mutableListOf() - - val data = this.finalize(errors) - - return GraphQLResponse(data, errors.ifEmpty { null }, null) -} /** * This function is a bit weird and only exists because default values are not coerced. diff --git a/apollo-execution-runtime/src/jvmTest/kotlin/test/ParallelExecutionTest.kt b/apollo-execution-runtime/src/jvmTest/kotlin/test/ParallelExecutionTest.kt index d0967aab..cea6aaa9 100644 --- a/apollo-execution-runtime/src/jvmTest/kotlin/test/ParallelExecutionTest.kt +++ b/apollo-execution-runtime/src/jvmTest/kotlin/test/ParallelExecutionTest.kt @@ -94,7 +94,7 @@ class ParallelExecutionTest { """.trimIndent() var inFirstFrame = true - var runAfterFirstFrame: Runnable? = null + var dispatch = true val dispatcher = Dispatchers.Default.limitedParallelism(1) val loader = Loader(dispatcher) @@ -102,8 +102,9 @@ class ParallelExecutionTest { .schema(schema.toGQLDocument()) .resolver { if (inFirstFrame) { - if (runAfterFirstFrame == null) { - runAfterFirstFrame = Runnable { + if (dispatch) { + dispatch = false + dispatcher.dispatch(EmptyCoroutineContext) { inFirstFrame = false } } @@ -151,4 +152,42 @@ class ParallelExecutionTest { ) } } + + @Test + fun listItemsAreExecutedInParallel() { + val schema = """ + type Query { + items: [Item!]! + } + type Item { + id: ID! + } + """.trimIndent() + + val executableSchema = ExecutableSchema.Builder() + .schema(schema.toGQLDocument()) + .resolver { + return@resolver when (it.fieldName) { + "items" -> { + 0.until(100).toList() + } + "id" -> { + delay(500) + it.parentObject.toString() + } + else -> { + error("Unknown field '${it.fieldName}'") + } + } + } + .build() + + runBlocking { + val response = withTimeout(1000) { + executableSchema.execute("{ items { id } }".toGraphQLRequest()) + } + @Suppress("UNCHECKED_CAST") + assertEquals(0.until(100).map { mapOf("id" to it.toString()) }, (response.data as Map).get("items")) + } + } } \ No newline at end of file diff --git a/apollo-execution-tracing/README.md b/apollo-execution-tracing/README.md new file mode 100644 index 00000000..02ddab83 --- /dev/null +++ b/apollo-execution-tracing/README.md @@ -0,0 +1,2 @@ +# Module apollo-execution-tracing + diff --git a/apollo-execution-tracing/api/apollo-execution-tracing.api b/apollo-execution-tracing/api/apollo-execution-tracing.api new file mode 100644 index 00000000..90c97ad8 --- /dev/null +++ b/apollo-execution-tracing/api/apollo-execution-tracing.api @@ -0,0 +1,746 @@ +public final class com/apollographql/execution/tracing/ApolloOperationTracing { + public fun ()V + public final fun beforeField (Lcom/apollographql/execution/ResolveInfo;)Lcom/apollographql/execution/InstrumentationCallback; + public final fun toProtoTrace ()Lcom/apollographql/execution/tracing/Trace; +} + +public final class com/apollographql/execution/tracing/ApolloTracingInstrumentation : com/apollographql/execution/Instrumentation { + public fun ()V + public fun beforeField (Lcom/apollographql/execution/ResolveInfo;)Lcom/apollographql/execution/InstrumentationCallback; +} + +public final class com/apollographql/execution/tracing/ApolloTracingOperationContext : com/apollographql/apollo/api/ExecutionContext$Element { + public static final field Key Lcom/apollographql/execution/tracing/ApolloTracingOperationContext$Key; + public fun ()V + public final fun getApolloOperationTracing ()Lcom/apollographql/execution/tracing/ApolloOperationTracing; + public synthetic fun getKey ()Lcom/apollographql/apollo/api/ExecutionContext$Key; + public fun getKey ()Lcom/apollographql/execution/tracing/ApolloTracingOperationContext$Key; +} + +public final class com/apollographql/execution/tracing/ApolloTracingOperationContext$Key : com/apollographql/apollo/api/ExecutionContext$Key { +} + +public final class com/apollographql/execution/tracing/ContextualizedQueryLatencyStats : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/ContextualizedQueryLatencyStats$Companion; + public fun ()V + public fun (Lcom/apollographql/execution/tracing/QueryLatencyStats;Lcom/apollographql/execution/tracing/StatsContext;Lokio/ByteString;)V + public synthetic fun (Lcom/apollographql/execution/tracing/QueryLatencyStats;Lcom/apollographql/execution/tracing/StatsContext;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Lcom/apollographql/execution/tracing/QueryLatencyStats;Lcom/apollographql/execution/tracing/StatsContext;Lokio/ByteString;)Lcom/apollographql/execution/tracing/ContextualizedQueryLatencyStats; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/ContextualizedQueryLatencyStats;Lcom/apollographql/execution/tracing/QueryLatencyStats;Lcom/apollographql/execution/tracing/StatsContext;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/ContextualizedQueryLatencyStats; + public fun equals (Ljava/lang/Object;)Z + public final fun getContext ()Lcom/apollographql/execution/tracing/StatsContext; + public final fun getQuery_latency_stats ()Lcom/apollographql/execution/tracing/QueryLatencyStats; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/ContextualizedQueryLatencyStats$Companion { +} + +public final class com/apollographql/execution/tracing/ContextualizedStats : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/ContextualizedStats$Companion; + public fun ()V + public fun (Lcom/apollographql/execution/tracing/StatsContext;Lcom/apollographql/execution/tracing/QueryLatencyStats;Ljava/util/Map;Lokio/ByteString;)V + public synthetic fun (Lcom/apollographql/execution/tracing/StatsContext;Lcom/apollographql/execution/tracing/QueryLatencyStats;Ljava/util/Map;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Lcom/apollographql/execution/tracing/StatsContext;Lcom/apollographql/execution/tracing/QueryLatencyStats;Ljava/util/Map;Lokio/ByteString;)Lcom/apollographql/execution/tracing/ContextualizedStats; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/ContextualizedStats;Lcom/apollographql/execution/tracing/StatsContext;Lcom/apollographql/execution/tracing/QueryLatencyStats;Ljava/util/Map;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/ContextualizedStats; + public fun equals (Ljava/lang/Object;)Z + public final fun getContext ()Lcom/apollographql/execution/tracing/StatsContext; + public final fun getPer_type_stat ()Ljava/util/Map; + public final fun getQuery_latency_stats ()Lcom/apollographql/execution/tracing/QueryLatencyStats; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/ContextualizedStats$Companion { +} + +public final class com/apollographql/execution/tracing/ContextualizedTypeStats : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/ContextualizedTypeStats$Companion; + public fun ()V + public fun (Lcom/apollographql/execution/tracing/StatsContext;Ljava/util/Map;Lokio/ByteString;)V + public synthetic fun (Lcom/apollographql/execution/tracing/StatsContext;Ljava/util/Map;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Lcom/apollographql/execution/tracing/StatsContext;Ljava/util/Map;Lokio/ByteString;)Lcom/apollographql/execution/tracing/ContextualizedTypeStats; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/ContextualizedTypeStats;Lcom/apollographql/execution/tracing/StatsContext;Ljava/util/Map;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/ContextualizedTypeStats; + public fun equals (Ljava/lang/Object;)Z + public final fun getContext ()Lcom/apollographql/execution/tracing/StatsContext; + public final fun getPer_type_stat ()Ljava/util/Map; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/ContextualizedTypeStats$Companion { +} + +public final class com/apollographql/execution/tracing/FieldStat : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/FieldStat$Companion; + public fun ()V + public fun (Ljava/lang/String;JJJJLjava/util/List;Lokio/ByteString;)V + public synthetic fun (Ljava/lang/String;JJJJLjava/util/List;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/lang/String;JJJJLjava/util/List;Lokio/ByteString;)Lcom/apollographql/execution/tracing/FieldStat; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/FieldStat;Ljava/lang/String;JJJJLjava/util/List;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/FieldStat; + public fun equals (Ljava/lang/Object;)Z + public final fun getErrors_count ()J + public final fun getEstimated_execution_count ()J + public final fun getLatency_count ()Ljava/util/List; + public final fun getObserved_execution_count ()J + public final fun getRequests_with_errors_count ()J + public final fun getReturn_type ()Ljava/lang/String; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/FieldStat$Companion { +} + +public final class com/apollographql/execution/tracing/PathErrorStats : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/PathErrorStats$Companion; + public fun ()V + public fun (Ljava/util/Map;JJLokio/ByteString;)V + public synthetic fun (Ljava/util/Map;JJLokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/util/Map;JJLokio/ByteString;)Lcom/apollographql/execution/tracing/PathErrorStats; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/PathErrorStats;Ljava/util/Map;JJLokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/PathErrorStats; + public fun equals (Ljava/lang/Object;)Z + public final fun getChildren ()Ljava/util/Map; + public final fun getErrors_count ()J + public final fun getRequests_with_errors_count ()J + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/PathErrorStats$Companion { +} + +public final class com/apollographql/execution/tracing/QueryLatencyStats : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/QueryLatencyStats$Companion; + public fun ()V + public fun (Ljava/util/List;JJJJLjava/util/List;Lcom/apollographql/execution/tracing/PathErrorStats;JLjava/util/List;Ljava/util/List;JJJLokio/ByteString;)V + public synthetic fun (Ljava/util/List;JJJJLjava/util/List;Lcom/apollographql/execution/tracing/PathErrorStats;JLjava/util/List;Ljava/util/List;JJJLokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/util/List;JJJJLjava/util/List;Lcom/apollographql/execution/tracing/PathErrorStats;JLjava/util/List;Ljava/util/List;JJJLokio/ByteString;)Lcom/apollographql/execution/tracing/QueryLatencyStats; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/QueryLatencyStats;Ljava/util/List;JJJJLjava/util/List;Lcom/apollographql/execution/tracing/PathErrorStats;JLjava/util/List;Ljava/util/List;JJJLokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/QueryLatencyStats; + public fun equals (Ljava/lang/Object;)Z + public final fun getCache_hits ()J + public final fun getCache_latency_count ()Ljava/util/List; + public final fun getForbidden_operation_count ()J + public final fun getLatency_count ()Ljava/util/List; + public final fun getPersisted_query_hits ()J + public final fun getPersisted_query_misses ()J + public final fun getPrivate_cache_ttl_count ()Ljava/util/List; + public final fun getPublic_cache_ttl_count ()Ljava/util/List; + public final fun getRegistered_operation_count ()J + public final fun getRequest_count ()J + public final fun getRequests_with_errors_count ()J + public final fun getRequests_without_field_instrumentation ()J + public final fun getRoot_error_stats ()Lcom/apollographql/execution/tracing/PathErrorStats; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/QueryLatencyStats$Companion { +} + +public final class com/apollographql/execution/tracing/ReferencedFieldsForType : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/ReferencedFieldsForType$Companion; + public fun ()V + public fun (Ljava/util/List;ZLokio/ByteString;)V + public synthetic fun (Ljava/util/List;ZLokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/util/List;ZLokio/ByteString;)Lcom/apollographql/execution/tracing/ReferencedFieldsForType; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/ReferencedFieldsForType;Ljava/util/List;ZLokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/ReferencedFieldsForType; + public fun equals (Ljava/lang/Object;)Z + public final fun getField_names ()Ljava/util/List; + public fun hashCode ()I + public final fun is_interface ()Z + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/ReferencedFieldsForType$Companion { +} + +public final class com/apollographql/execution/tracing/Report : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Report$Companion; + public fun ()V + public fun (Lcom/apollographql/execution/tracing/ReportHeader;Ljava/util/Map;Ljava/time/Instant;JZLokio/ByteString;)V + public synthetic fun (Lcom/apollographql/execution/tracing/ReportHeader;Ljava/util/Map;Ljava/time/Instant;JZLokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Lcom/apollographql/execution/tracing/ReportHeader;Ljava/util/Map;Ljava/time/Instant;JZLokio/ByteString;)Lcom/apollographql/execution/tracing/Report; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Report;Lcom/apollographql/execution/tracing/ReportHeader;Ljava/util/Map;Ljava/time/Instant;JZLokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Report; + public fun equals (Ljava/lang/Object;)Z + public final fun getEnd_time ()Ljava/time/Instant; + public final fun getHeader_ ()Lcom/apollographql/execution/tracing/ReportHeader; + public final fun getOperation_count ()J + public final fun getTraces_per_query ()Ljava/util/Map; + public final fun getTraces_pre_aggregated ()Z + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Report$Companion { +} + +public final class com/apollographql/execution/tracing/ReportHeader : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/ReportHeader$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;)Lcom/apollographql/execution/tracing/ReportHeader; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/ReportHeader;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/ReportHeader; + public fun equals (Ljava/lang/Object;)Z + public final fun getAgent_version ()Ljava/lang/String; + public final fun getExecutable_schema_id ()Ljava/lang/String; + public final fun getGraph_ref ()Ljava/lang/String; + public final fun getHostname ()Ljava/lang/String; + public final fun getRuntime_version ()Ljava/lang/String; + public final fun getService_version ()Ljava/lang/String; + public final fun getUname ()Ljava/lang/String; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/ReportHeader$Companion { +} + +public final class com/apollographql/execution/tracing/StatsContext : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/StatsContext$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;)Lcom/apollographql/execution/tracing/StatsContext; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/StatsContext;Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/StatsContext; + public fun equals (Ljava/lang/Object;)Z + public final fun getClient_name ()Ljava/lang/String; + public final fun getClient_version ()Ljava/lang/String; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/StatsContext$Companion { +} + +public final class com/apollographql/execution/tracing/Trace : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$Companion; + public fun ()V + public fun (Ljava/time/Instant;Ljava/time/Instant;JLcom/apollographql/execution/tracing/Trace$Node;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$Details;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$HTTP;Lcom/apollographql/execution/tracing/Trace$CachePolicy;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;ZZZZZDLokio/ByteString;)V + public synthetic fun (Ljava/time/Instant;Ljava/time/Instant;JLcom/apollographql/execution/tracing/Trace$Node;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$Details;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$HTTP;Lcom/apollographql/execution/tracing/Trace$CachePolicy;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;ZZZZZDLokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/time/Instant;Ljava/time/Instant;JLcom/apollographql/execution/tracing/Trace$Node;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$Details;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$HTTP;Lcom/apollographql/execution/tracing/Trace$CachePolicy;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;ZZZZZDLokio/ByteString;)Lcom/apollographql/execution/tracing/Trace; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace;Ljava/time/Instant;Ljava/time/Instant;JLcom/apollographql/execution/tracing/Trace$Node;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$Details;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$HTTP;Lcom/apollographql/execution/tracing/Trace$CachePolicy;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;ZZZZZDLokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace; + public fun equals (Ljava/lang/Object;)Z + public final fun getCache_policy ()Lcom/apollographql/execution/tracing/Trace$CachePolicy; + public final fun getClient_name ()Ljava/lang/String; + public final fun getClient_version ()Ljava/lang/String; + public final fun getDetails ()Lcom/apollographql/execution/tracing/Trace$Details; + public final fun getDuration_ns ()J + public final fun getEnd_time ()Ljava/time/Instant; + public final fun getField_execution_weight ()D + public final fun getForbidden_operation ()Z + public final fun getFull_query_cache_hit ()Z + public final fun getHttp ()Lcom/apollographql/execution/tracing/Trace$HTTP; + public final fun getPersisted_query_hit ()Z + public final fun getPersisted_query_register ()Z + public final fun getQuery_plan ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode; + public final fun getRegistered_operation ()Z + public final fun getRoot ()Lcom/apollographql/execution/tracing/Trace$Node; + public final fun getSignature ()Ljava/lang/String; + public final fun getStart_time ()Ljava/time/Instant; + public final fun getUnexecutedOperationBody ()Ljava/lang/String; + public final fun getUnexecutedOperationName ()Ljava/lang/String; + public fun hashCode ()I + public final fun is_incomplete ()Z + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$CachePolicy : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$CachePolicy$Companion; + public fun ()V + public fun (Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope;JLokio/ByteString;)V + public synthetic fun (Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope;JLokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope;JLokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$CachePolicy; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$CachePolicy;Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope;JLokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$CachePolicy; + public fun equals (Ljava/lang/Object;)Z + public final fun getMax_age_ns ()J + public final fun getScope ()Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$CachePolicy$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$CachePolicy$Scope : java/lang/Enum, com/squareup/wire/WireEnum { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope$Companion; + public static final field PRIVATE Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope; + public static final field PUBLIC Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope; + public static final field UNKNOWN Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope; + public static final fun fromValue (I)Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public fun getValue ()I + public static fun valueOf (Ljava/lang/String;)Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope; + public static fun values ()[Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope; +} + +public final class com/apollographql/execution/tracing/Trace$CachePolicy$Scope$Companion { + public final fun fromValue (I)Lcom/apollographql/execution/tracing/Trace$CachePolicy$Scope; +} + +public final class com/apollographql/execution/tracing/Trace$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$Details : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$Details$Companion; + public fun ()V + public fun (Ljava/util/Map;Ljava/lang/String;Lokio/ByteString;)V + public synthetic fun (Ljava/util/Map;Ljava/lang/String;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/util/Map;Ljava/lang/String;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$Details; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$Details;Ljava/util/Map;Ljava/lang/String;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$Details; + public fun equals (Ljava/lang/Object;)Z + public final fun getOperation_name ()Ljava/lang/String; + public final fun getVariables_json ()Ljava/util/Map; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$Details$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$Error : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$Error$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/util/List;JLjava/lang/String;Lokio/ByteString;)V + public synthetic fun (Ljava/lang/String;Ljava/util/List;JLjava/lang/String;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/lang/String;Ljava/util/List;JLjava/lang/String;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$Error; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$Error;Ljava/lang/String;Ljava/util/List;JLjava/lang/String;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$Error; + public fun equals (Ljava/lang/Object;)Z + public final fun getJson ()Ljava/lang/String; + public final fun getLocation ()Ljava/util/List; + public final fun getMessage ()Ljava/lang/String; + public final fun getTime_ns ()J + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$Error$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$HTTP : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$HTTP$Companion; + public fun ()V + public fun (Lcom/apollographql/execution/tracing/Trace$HTTP$Method;Ljava/util/Map;Ljava/util/Map;ILokio/ByteString;)V + public synthetic fun (Lcom/apollographql/execution/tracing/Trace$HTTP$Method;Ljava/util/Map;Ljava/util/Map;ILokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Lcom/apollographql/execution/tracing/Trace$HTTP$Method;Ljava/util/Map;Ljava/util/Map;ILokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$HTTP; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$HTTP;Lcom/apollographql/execution/tracing/Trace$HTTP$Method;Ljava/util/Map;Ljava/util/Map;ILokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$HTTP; + public fun equals (Ljava/lang/Object;)Z + public final fun getMethod ()Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public final fun getRequest_headers ()Ljava/util/Map; + public final fun getResponse_headers ()Ljava/util/Map; + public final fun getStatus_code ()I + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$HTTP$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$HTTP$Method : java/lang/Enum, com/squareup/wire/WireEnum { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field CONNECT Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$HTTP$Method$Companion; + public static final field DELETE Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static final field GET Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static final field HEAD Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static final field OPTIONS Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static final field PATCH Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static final field POST Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static final field PUT Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static final field TRACE Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static final field UNKNOWN Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static final fun fromValue (I)Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public fun getValue ()I + public static fun valueOf (Ljava/lang/String;)Lcom/apollographql/execution/tracing/Trace$HTTP$Method; + public static fun values ()[Lcom/apollographql/execution/tracing/Trace$HTTP$Method; +} + +public final class com/apollographql/execution/tracing/Trace$HTTP$Method$Companion { + public final fun fromValue (I)Lcom/apollographql/execution/tracing/Trace$HTTP$Method; +} + +public final class com/apollographql/execution/tracing/Trace$HTTP$Values : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$HTTP$Values$Companion; + public fun ()V + public fun (Ljava/util/List;Lokio/ByteString;)V + public synthetic fun (Ljava/util/List;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/util/List;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$HTTP$Values; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$HTTP$Values;Ljava/util/List;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$HTTP$Values; + public fun equals (Ljava/lang/Object;)Z + public final fun getValue_ ()Ljava/util/List; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$HTTP$Values$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$Location : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$Location$Companion; + public fun ()V + public fun (IILokio/ByteString;)V + public synthetic fun (IILokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (IILokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$Location; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$Location;IILokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$Location; + public fun equals (Ljava/lang/Object;)Z + public final fun getColumn ()I + public final fun getLine ()I + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$Location$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$Node : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$Node$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$CachePolicy;JJLjava/util/List;Ljava/util/List;Lokio/ByteString;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$CachePolicy;JJLjava/util/List;Ljava/util/List;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$CachePolicy;JJLjava/util/List;Ljava/util/List;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$Node; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$Node;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$CachePolicy;JJLjava/util/List;Ljava/util/List;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$Node; + public fun equals (Ljava/lang/Object;)Z + public final fun getCache_policy ()Lcom/apollographql/execution/tracing/Trace$CachePolicy; + public final fun getChild ()Ljava/util/List; + public final fun getEnd_time ()J + public final fun getError ()Ljava/util/List; + public final fun getIndex ()Ljava/lang/Integer; + public final fun getOriginal_field_name ()Ljava/lang/String; + public final fun getParent_type ()Ljava/lang/String; + public final fun getResponse_name ()Ljava/lang/String; + public final fun getStart_time ()J + public final fun getType ()Ljava/lang/String; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$Node$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$Companion; + public fun ()V + public fun (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$SequenceNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ParallelNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FetchNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FlattenNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ConditionNode;Lokio/ByteString;)V + public synthetic fun (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$SequenceNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ParallelNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FetchNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FlattenNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ConditionNode;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$SequenceNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ParallelNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FetchNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FlattenNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ConditionNode;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$SequenceNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ParallelNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FetchNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FlattenNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ConditionNode;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode; + public fun equals (Ljava/lang/Object;)Z + public final fun getCondition ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ConditionNode; + public final fun getDefer ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNode; + public final fun getFetch ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FetchNode; + public final fun getFlatten ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FlattenNode; + public final fun getParallel ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ParallelNode; + public final fun getSequence ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$SequenceNode; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$ConditionNode : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ConditionNode$Companion; + public fun ()V + public fun (Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;)V + public synthetic fun (Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ConditionNode; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ConditionNode;Ljava/lang/String;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ConditionNode; + public fun equals (Ljava/lang/Object;)Z + public final fun getCondition ()Ljava/lang/String; + public final fun getElse_clause ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode; + public final fun getIf_clause ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$ConditionNode$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNode : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNode$Companion; + public fun ()V + public fun (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNodePrimary;Ljava/util/List;Lokio/ByteString;)V + public synthetic fun (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNodePrimary;Ljava/util/List;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNodePrimary;Ljava/util/List;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNode; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNode;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNodePrimary;Ljava/util/List;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNode; + public fun equals (Ljava/lang/Object;)Z + public final fun getDeferred ()Ljava/util/List; + public final fun getPrimary ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNodePrimary; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNode$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNodePrimary : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNodePrimary$Companion; + public fun ()V + public fun (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;)V + public synthetic fun (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNodePrimary; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNodePrimary;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNodePrimary; + public fun equals (Ljava/lang/Object;)Z + public final fun getNode ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$DeferNodePrimary$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNode : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNode$Companion; + public fun ()V + public fun (Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;)V + public synthetic fun (Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNode; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNode;Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNode; + public fun equals (Ljava/lang/Object;)Z + public final fun getDepends ()Ljava/util/List; + public final fun getLabel ()Ljava/lang/String; + public final fun getNode ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode; + public final fun getPath ()Ljava/util/List; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNode$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNodeDepends : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNodeDepends$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNodeDepends; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNodeDepends;Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNodeDepends; + public fun equals (Ljava/lang/Object;)Z + public final fun getDefer_label ()Ljava/lang/String; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$DeferredNodeDepends$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$FetchNode : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FetchNode$Companion; + public fun ()V + public fun (Ljava/lang/String;ZLcom/apollographql/execution/tracing/Trace;JLjava/time/Instant;Ljava/time/Instant;Lokio/ByteString;)V + public synthetic fun (Ljava/lang/String;ZLcom/apollographql/execution/tracing/Trace;JLjava/time/Instant;Ljava/time/Instant;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/lang/String;ZLcom/apollographql/execution/tracing/Trace;JLjava/time/Instant;Ljava/time/Instant;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FetchNode; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FetchNode;Ljava/lang/String;ZLcom/apollographql/execution/tracing/Trace;JLjava/time/Instant;Ljava/time/Instant;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FetchNode; + public fun equals (Ljava/lang/Object;)Z + public final fun getReceived_time ()Ljava/time/Instant; + public final fun getSent_time ()Ljava/time/Instant; + public final fun getSent_time_offset ()J + public final fun getService_name ()Ljava/lang/String; + public final fun getTrace ()Lcom/apollographql/execution/tracing/Trace; + public final fun getTrace_parsing_failed ()Z + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$FetchNode$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$FlattenNode : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FlattenNode$Companion; + public fun ()V + public fun (Ljava/util/List;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;)V + public synthetic fun (Ljava/util/List;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/util/List;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FlattenNode; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FlattenNode;Ljava/util/List;Lcom/apollographql/execution/tracing/Trace$QueryPlanNode;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$FlattenNode; + public fun equals (Ljava/lang/Object;)Z + public final fun getNode ()Lcom/apollographql/execution/tracing/Trace$QueryPlanNode; + public final fun getResponse_path ()Ljava/util/List; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$FlattenNode$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$ParallelNode : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ParallelNode$Companion; + public fun ()V + public fun (Ljava/util/List;Lokio/ByteString;)V + public synthetic fun (Ljava/util/List;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/util/List;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ParallelNode; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ParallelNode;Ljava/util/List;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ParallelNode; + public fun equals (Ljava/lang/Object;)Z + public final fun getNodes ()Ljava/util/List; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$ParallelNode$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$ResponsePathElement : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ResponsePathElement$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/Integer;Lokio/ByteString;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/Integer;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/lang/String;Ljava/lang/Integer;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ResponsePathElement; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ResponsePathElement;Ljava/lang/String;Ljava/lang/Integer;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$ResponsePathElement; + public fun equals (Ljava/lang/Object;)Z + public final fun getField_name ()Ljava/lang/String; + public final fun getIndex ()Ljava/lang/Integer; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$ResponsePathElement$Companion { +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$SequenceNode : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$SequenceNode$Companion; + public fun ()V + public fun (Ljava/util/List;Lokio/ByteString;)V + public synthetic fun (Ljava/util/List;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/util/List;Lokio/ByteString;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$SequenceNode; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$SequenceNode;Ljava/util/List;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/Trace$QueryPlanNode$SequenceNode; + public fun equals (Ljava/lang/Object;)Z + public final fun getNodes ()Ljava/util/List; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/Trace$QueryPlanNode$SequenceNode$Companion { +} + +public final class com/apollographql/execution/tracing/TracesAndStats : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/TracesAndStats$Companion; + public fun ()V + public fun (Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/List;Lokio/ByteString;)V + public synthetic fun (Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/List;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/List;Lokio/ByteString;)Lcom/apollographql/execution/tracing/TracesAndStats; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/TracesAndStats;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/List;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/TracesAndStats; + public fun equals (Ljava/lang/Object;)Z + public final fun getInternal_traces_contributing_to_stats ()Ljava/util/List; + public final fun getReferenced_fields_by_type ()Ljava/util/Map; + public final fun getStats_with_context ()Ljava/util/List; + public final fun getTrace ()Ljava/util/List; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/TracesAndStats$Companion { +} + +public final class com/apollographql/execution/tracing/TypeStat : com/squareup/wire/Message { + public static final field ADAPTER Lcom/squareup/wire/ProtoAdapter; + public static final field Companion Lcom/apollographql/execution/tracing/TypeStat$Companion; + public fun ()V + public fun (Ljava/util/Map;Lokio/ByteString;)V + public synthetic fun (Ljava/util/Map;Lokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/util/Map;Lokio/ByteString;)Lcom/apollographql/execution/tracing/TypeStat; + public static synthetic fun copy$default (Lcom/apollographql/execution/tracing/TypeStat;Ljava/util/Map;Lokio/ByteString;ILjava/lang/Object;)Lcom/apollographql/execution/tracing/TypeStat; + public fun equals (Ljava/lang/Object;)Z + public final fun getPer_field_stat ()Ljava/util/Map; + public fun hashCode ()I + public synthetic fun newBuilder ()Lcom/squareup/wire/Message$Builder; + public synthetic fun newBuilder ()Ljava/lang/Void; + public fun toString ()Ljava/lang/String; +} + +public final class com/apollographql/execution/tracing/TypeStat$Companion { +} + diff --git a/apollo-execution-tracing/api/apollo-execution-tracing.klib.api b/apollo-execution-tracing/api/apollo-execution-tracing.klib.api new file mode 100644 index 00000000..222b1327 --- /dev/null +++ b/apollo-execution-tracing/api/apollo-execution-tracing.klib.api @@ -0,0 +1,686 @@ +// Klib ABI Dump +// Targets: [macosArm64] +// Rendering settings: +// - Signature version: 2 +// - Show manifest properties: true +// - Show declarations: true + +// Library unique name: +final class com.apollographql.execution.tracing/ApolloOperationTracing { // com.apollographql.execution.tracing/ApolloOperationTracing|null[0] + constructor () // com.apollographql.execution.tracing/ApolloOperationTracing.|(){}[0] + final fun beforeField(com.apollographql.execution/ResolveInfo): com.apollographql.execution/InstrumentationCallback? // com.apollographql.execution.tracing/ApolloOperationTracing.beforeField|beforeField(com.apollographql.execution.ResolveInfo){}[0] + final fun toProtoTrace(): com.apollographql.execution.tracing/Trace // com.apollographql.execution.tracing/ApolloOperationTracing.toProtoTrace|toProtoTrace(){}[0] +} +final class com.apollographql.execution.tracing/ApolloTracingInstrumentation : com.apollographql.execution/Instrumentation { // com.apollographql.execution.tracing/ApolloTracingInstrumentation|null[0] + constructor () // com.apollographql.execution.tracing/ApolloTracingInstrumentation.|(){}[0] + final fun beforeField(com.apollographql.execution/ResolveInfo): com.apollographql.execution/InstrumentationCallback? // com.apollographql.execution.tracing/ApolloTracingInstrumentation.beforeField|beforeField(com.apollographql.execution.ResolveInfo){}[0] +} +final class com.apollographql.execution.tracing/ApolloTracingOperationContext : com.apollographql.apollo.api/ExecutionContext.Element { // com.apollographql.execution.tracing/ApolloTracingOperationContext|null[0] + constructor () // com.apollographql.execution.tracing/ApolloTracingOperationContext.|(){}[0] + final object Key : com.apollographql.apollo.api/ExecutionContext.Key // com.apollographql.execution.tracing/ApolloTracingOperationContext.Key|null[0] + final val apolloOperationTracing // com.apollographql.execution.tracing/ApolloTracingOperationContext.apolloOperationTracing|{}apolloOperationTracing[0] + final fun (): com.apollographql.execution.tracing/ApolloOperationTracing // com.apollographql.execution.tracing/ApolloTracingOperationContext.apolloOperationTracing.|(){}[0] + final val key // com.apollographql.execution.tracing/ApolloTracingOperationContext.key|{}key[0] + final fun (): com.apollographql.execution.tracing/ApolloTracingOperationContext.Key // com.apollographql.execution.tracing/ApolloTracingOperationContext.key.|(){}[0] +} +final class com.apollographql.execution.tracing/ContextualizedQueryLatencyStats : com.squareup.wire/Message { // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats|null[0] + constructor (com.apollographql.execution.tracing/QueryLatencyStats? = ..., com.apollographql.execution.tracing/StatsContext? = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.|(com.apollographql.execution.tracing.QueryLatencyStats?;com.apollographql.execution.tracing.StatsContext?;okio.ByteString){}[0] + final fun copy(com.apollographql.execution.tracing/QueryLatencyStats? = ..., com.apollographql.execution.tracing/StatsContext? = ..., okio/ByteString = ...): com.apollographql.execution.tracing/ContextualizedQueryLatencyStats // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.copy|copy(com.apollographql.execution.tracing.QueryLatencyStats?;com.apollographql.execution.tracing.StatsContext?;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.Companion.ADAPTER.|(){}[0] + } + final val context // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.context|{}context[0] + final fun (): com.apollographql.execution.tracing/StatsContext? // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.context.|(){}[0] + final val query_latency_stats // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.query_latency_stats|{}query_latency_stats[0] + final fun (): com.apollographql.execution.tracing/QueryLatencyStats? // com.apollographql.execution.tracing/ContextualizedQueryLatencyStats.query_latency_stats.|(){}[0] +} +final class com.apollographql.execution.tracing/ContextualizedStats : com.squareup.wire/Message { // com.apollographql.execution.tracing/ContextualizedStats|null[0] + constructor (com.apollographql.execution.tracing/StatsContext? = ..., com.apollographql.execution.tracing/QueryLatencyStats? = ..., kotlin.collections/Map = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/ContextualizedStats.|(com.apollographql.execution.tracing.StatsContext?;com.apollographql.execution.tracing.QueryLatencyStats?;kotlin.collections.Map;okio.ByteString){}[0] + final fun copy(com.apollographql.execution.tracing/StatsContext? = ..., com.apollographql.execution.tracing/QueryLatencyStats? = ..., kotlin.collections/Map = ..., okio/ByteString = ...): com.apollographql.execution.tracing/ContextualizedStats // com.apollographql.execution.tracing/ContextualizedStats.copy|copy(com.apollographql.execution.tracing.StatsContext?;com.apollographql.execution.tracing.QueryLatencyStats?;kotlin.collections.Map;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/ContextualizedStats.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/ContextualizedStats.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/ContextualizedStats.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/ContextualizedStats.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/ContextualizedStats.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/ContextualizedStats.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/ContextualizedStats.Companion.ADAPTER.|(){}[0] + } + final val context // com.apollographql.execution.tracing/ContextualizedStats.context|{}context[0] + final fun (): com.apollographql.execution.tracing/StatsContext? // com.apollographql.execution.tracing/ContextualizedStats.context.|(){}[0] + final val per_type_stat // com.apollographql.execution.tracing/ContextualizedStats.per_type_stat|{}per_type_stat[0] + final fun (): kotlin.collections/Map // com.apollographql.execution.tracing/ContextualizedStats.per_type_stat.|(){}[0] + final val query_latency_stats // com.apollographql.execution.tracing/ContextualizedStats.query_latency_stats|{}query_latency_stats[0] + final fun (): com.apollographql.execution.tracing/QueryLatencyStats? // com.apollographql.execution.tracing/ContextualizedStats.query_latency_stats.|(){}[0] +} +final class com.apollographql.execution.tracing/ContextualizedTypeStats : com.squareup.wire/Message { // com.apollographql.execution.tracing/ContextualizedTypeStats|null[0] + constructor (com.apollographql.execution.tracing/StatsContext? = ..., kotlin.collections/Map = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/ContextualizedTypeStats.|(com.apollographql.execution.tracing.StatsContext?;kotlin.collections.Map;okio.ByteString){}[0] + final fun copy(com.apollographql.execution.tracing/StatsContext? = ..., kotlin.collections/Map = ..., okio/ByteString = ...): com.apollographql.execution.tracing/ContextualizedTypeStats // com.apollographql.execution.tracing/ContextualizedTypeStats.copy|copy(com.apollographql.execution.tracing.StatsContext?;kotlin.collections.Map;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/ContextualizedTypeStats.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/ContextualizedTypeStats.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/ContextualizedTypeStats.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/ContextualizedTypeStats.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/ContextualizedTypeStats.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/ContextualizedTypeStats.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/ContextualizedTypeStats.Companion.ADAPTER.|(){}[0] + } + final val context // com.apollographql.execution.tracing/ContextualizedTypeStats.context|{}context[0] + final fun (): com.apollographql.execution.tracing/StatsContext? // com.apollographql.execution.tracing/ContextualizedTypeStats.context.|(){}[0] + final val per_type_stat // com.apollographql.execution.tracing/ContextualizedTypeStats.per_type_stat|{}per_type_stat[0] + final fun (): kotlin.collections/Map // com.apollographql.execution.tracing/ContextualizedTypeStats.per_type_stat.|(){}[0] +} +final class com.apollographql.execution.tracing/FieldStat : com.squareup.wire/Message { // com.apollographql.execution.tracing/FieldStat|null[0] + constructor (kotlin/String = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin.collections/List = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/FieldStat.|(kotlin.String;kotlin.Long;kotlin.Long;kotlin.Long;kotlin.Long;kotlin.collections.List;okio.ByteString){}[0] + final fun copy(kotlin/String = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin.collections/List = ..., okio/ByteString = ...): com.apollographql.execution.tracing/FieldStat // com.apollographql.execution.tracing/FieldStat.copy|copy(kotlin.String;kotlin.Long;kotlin.Long;kotlin.Long;kotlin.Long;kotlin.collections.List;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/FieldStat.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/FieldStat.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/FieldStat.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/FieldStat.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/FieldStat.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/FieldStat.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/FieldStat.Companion.ADAPTER.|(){}[0] + } + final val errors_count // com.apollographql.execution.tracing/FieldStat.errors_count|{}errors_count[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/FieldStat.errors_count.|(){}[0] + final val estimated_execution_count // com.apollographql.execution.tracing/FieldStat.estimated_execution_count|{}estimated_execution_count[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/FieldStat.estimated_execution_count.|(){}[0] + final val latency_count // com.apollographql.execution.tracing/FieldStat.latency_count|{}latency_count[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/FieldStat.latency_count.|(){}[0] + final val observed_execution_count // com.apollographql.execution.tracing/FieldStat.observed_execution_count|{}observed_execution_count[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/FieldStat.observed_execution_count.|(){}[0] + final val requests_with_errors_count // com.apollographql.execution.tracing/FieldStat.requests_with_errors_count|{}requests_with_errors_count[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/FieldStat.requests_with_errors_count.|(){}[0] + final val return_type // com.apollographql.execution.tracing/FieldStat.return_type|{}return_type[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/FieldStat.return_type.|(){}[0] +} +final class com.apollographql.execution.tracing/PathErrorStats : com.squareup.wire/Message { // com.apollographql.execution.tracing/PathErrorStats|null[0] + constructor (kotlin.collections/Map = ..., kotlin/Long = ..., kotlin/Long = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/PathErrorStats.|(kotlin.collections.Map;kotlin.Long;kotlin.Long;okio.ByteString){}[0] + final fun copy(kotlin.collections/Map = ..., kotlin/Long = ..., kotlin/Long = ..., okio/ByteString = ...): com.apollographql.execution.tracing/PathErrorStats // com.apollographql.execution.tracing/PathErrorStats.copy|copy(kotlin.collections.Map;kotlin.Long;kotlin.Long;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/PathErrorStats.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/PathErrorStats.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/PathErrorStats.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/PathErrorStats.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/PathErrorStats.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/PathErrorStats.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/PathErrorStats.Companion.ADAPTER.|(){}[0] + } + final val children // com.apollographql.execution.tracing/PathErrorStats.children|{}children[0] + final fun (): kotlin.collections/Map // com.apollographql.execution.tracing/PathErrorStats.children.|(){}[0] + final val errors_count // com.apollographql.execution.tracing/PathErrorStats.errors_count|{}errors_count[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/PathErrorStats.errors_count.|(){}[0] + final val requests_with_errors_count // com.apollographql.execution.tracing/PathErrorStats.requests_with_errors_count|{}requests_with_errors_count[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/PathErrorStats.requests_with_errors_count.|(){}[0] +} +final class com.apollographql.execution.tracing/QueryLatencyStats : com.squareup.wire/Message { // com.apollographql.execution.tracing/QueryLatencyStats|null[0] + constructor (kotlin.collections/List = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin.collections/List = ..., com.apollographql.execution.tracing/PathErrorStats? = ..., kotlin/Long = ..., kotlin.collections/List = ..., kotlin.collections/List = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin/Long = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/QueryLatencyStats.|(kotlin.collections.List;kotlin.Long;kotlin.Long;kotlin.Long;kotlin.Long;kotlin.collections.List;com.apollographql.execution.tracing.PathErrorStats?;kotlin.Long;kotlin.collections.List;kotlin.collections.List;kotlin.Long;kotlin.Long;kotlin.Long;okio.ByteString){}[0] + final fun copy(kotlin.collections/List = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin.collections/List = ..., com.apollographql.execution.tracing/PathErrorStats? = ..., kotlin/Long = ..., kotlin.collections/List = ..., kotlin.collections/List = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin/Long = ..., okio/ByteString = ...): com.apollographql.execution.tracing/QueryLatencyStats // com.apollographql.execution.tracing/QueryLatencyStats.copy|copy(kotlin.collections.List;kotlin.Long;kotlin.Long;kotlin.Long;kotlin.Long;kotlin.collections.List;com.apollographql.execution.tracing.PathErrorStats?;kotlin.Long;kotlin.collections.List;kotlin.collections.List;kotlin.Long;kotlin.Long;kotlin.Long;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/QueryLatencyStats.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/QueryLatencyStats.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/QueryLatencyStats.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/QueryLatencyStats.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/QueryLatencyStats.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/QueryLatencyStats.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/QueryLatencyStats.Companion.ADAPTER.|(){}[0] + } + final val cache_hits // com.apollographql.execution.tracing/QueryLatencyStats.cache_hits|{}cache_hits[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/QueryLatencyStats.cache_hits.|(){}[0] + final val cache_latency_count // com.apollographql.execution.tracing/QueryLatencyStats.cache_latency_count|{}cache_latency_count[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/QueryLatencyStats.cache_latency_count.|(){}[0] + final val forbidden_operation_count // com.apollographql.execution.tracing/QueryLatencyStats.forbidden_operation_count|{}forbidden_operation_count[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/QueryLatencyStats.forbidden_operation_count.|(){}[0] + final val latency_count // com.apollographql.execution.tracing/QueryLatencyStats.latency_count|{}latency_count[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/QueryLatencyStats.latency_count.|(){}[0] + final val persisted_query_hits // com.apollographql.execution.tracing/QueryLatencyStats.persisted_query_hits|{}persisted_query_hits[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/QueryLatencyStats.persisted_query_hits.|(){}[0] + final val persisted_query_misses // com.apollographql.execution.tracing/QueryLatencyStats.persisted_query_misses|{}persisted_query_misses[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/QueryLatencyStats.persisted_query_misses.|(){}[0] + final val private_cache_ttl_count // com.apollographql.execution.tracing/QueryLatencyStats.private_cache_ttl_count|{}private_cache_ttl_count[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/QueryLatencyStats.private_cache_ttl_count.|(){}[0] + final val public_cache_ttl_count // com.apollographql.execution.tracing/QueryLatencyStats.public_cache_ttl_count|{}public_cache_ttl_count[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/QueryLatencyStats.public_cache_ttl_count.|(){}[0] + final val registered_operation_count // com.apollographql.execution.tracing/QueryLatencyStats.registered_operation_count|{}registered_operation_count[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/QueryLatencyStats.registered_operation_count.|(){}[0] + final val request_count // com.apollographql.execution.tracing/QueryLatencyStats.request_count|{}request_count[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/QueryLatencyStats.request_count.|(){}[0] + final val requests_with_errors_count // com.apollographql.execution.tracing/QueryLatencyStats.requests_with_errors_count|{}requests_with_errors_count[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/QueryLatencyStats.requests_with_errors_count.|(){}[0] + final val requests_without_field_instrumentation // com.apollographql.execution.tracing/QueryLatencyStats.requests_without_field_instrumentation|{}requests_without_field_instrumentation[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/QueryLatencyStats.requests_without_field_instrumentation.|(){}[0] + final val root_error_stats // com.apollographql.execution.tracing/QueryLatencyStats.root_error_stats|{}root_error_stats[0] + final fun (): com.apollographql.execution.tracing/PathErrorStats? // com.apollographql.execution.tracing/QueryLatencyStats.root_error_stats.|(){}[0] +} +final class com.apollographql.execution.tracing/ReferencedFieldsForType : com.squareup.wire/Message { // com.apollographql.execution.tracing/ReferencedFieldsForType|null[0] + constructor (kotlin.collections/List = ..., kotlin/Boolean = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/ReferencedFieldsForType.|(kotlin.collections.List;kotlin.Boolean;okio.ByteString){}[0] + final fun copy(kotlin.collections/List = ..., kotlin/Boolean = ..., okio/ByteString = ...): com.apollographql.execution.tracing/ReferencedFieldsForType // com.apollographql.execution.tracing/ReferencedFieldsForType.copy|copy(kotlin.collections.List;kotlin.Boolean;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/ReferencedFieldsForType.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/ReferencedFieldsForType.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/ReferencedFieldsForType.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/ReferencedFieldsForType.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/ReferencedFieldsForType.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/ReferencedFieldsForType.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/ReferencedFieldsForType.Companion.ADAPTER.|(){}[0] + } + final val field_names // com.apollographql.execution.tracing/ReferencedFieldsForType.field_names|{}field_names[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/ReferencedFieldsForType.field_names.|(){}[0] + final val is_interface // com.apollographql.execution.tracing/ReferencedFieldsForType.is_interface|{}is_interface[0] + final fun (): kotlin/Boolean // com.apollographql.execution.tracing/ReferencedFieldsForType.is_interface.|(){}[0] +} +final class com.apollographql.execution.tracing/Report : com.squareup.wire/Message { // com.apollographql.execution.tracing/Report|null[0] + constructor (com.apollographql.execution.tracing/ReportHeader? = ..., kotlin.collections/Map = ..., com.squareup.wire/Instant? = ..., kotlin/Long = ..., kotlin/Boolean = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Report.|(com.apollographql.execution.tracing.ReportHeader?;kotlin.collections.Map;com.squareup.wire.Instant?;kotlin.Long;kotlin.Boolean;okio.ByteString){}[0] + final fun copy(com.apollographql.execution.tracing/ReportHeader? = ..., kotlin.collections/Map = ..., com.squareup.wire/Instant? = ..., kotlin/Long = ..., kotlin/Boolean = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Report // com.apollographql.execution.tracing/Report.copy|copy(com.apollographql.execution.tracing.ReportHeader?;kotlin.collections.Map;com.squareup.wire.Instant?;kotlin.Long;kotlin.Boolean;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Report.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Report.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Report.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Report.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Report.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Report.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Report.Companion.ADAPTER.|(){}[0] + } + final val end_time // com.apollographql.execution.tracing/Report.end_time|{}end_time[0] + final fun (): com.squareup.wire/Instant? // com.apollographql.execution.tracing/Report.end_time.|(){}[0] + final val header_ // com.apollographql.execution.tracing/Report.header_|{}header_[0] + final fun (): com.apollographql.execution.tracing/ReportHeader? // com.apollographql.execution.tracing/Report.header_.|(){}[0] + final val operation_count // com.apollographql.execution.tracing/Report.operation_count|{}operation_count[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/Report.operation_count.|(){}[0] + final val traces_per_query // com.apollographql.execution.tracing/Report.traces_per_query|{}traces_per_query[0] + final fun (): kotlin.collections/Map // com.apollographql.execution.tracing/Report.traces_per_query.|(){}[0] + final val traces_pre_aggregated // com.apollographql.execution.tracing/Report.traces_pre_aggregated|{}traces_pre_aggregated[0] + final fun (): kotlin/Boolean // com.apollographql.execution.tracing/Report.traces_pre_aggregated.|(){}[0] +} +final class com.apollographql.execution.tracing/ReportHeader : com.squareup.wire/Message { // com.apollographql.execution.tracing/ReportHeader|null[0] + constructor (kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/ReportHeader.|(kotlin.String;kotlin.String;kotlin.String;kotlin.String;kotlin.String;kotlin.String;kotlin.String;okio.ByteString){}[0] + final fun copy(kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., okio/ByteString = ...): com.apollographql.execution.tracing/ReportHeader // com.apollographql.execution.tracing/ReportHeader.copy|copy(kotlin.String;kotlin.String;kotlin.String;kotlin.String;kotlin.String;kotlin.String;kotlin.String;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/ReportHeader.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/ReportHeader.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/ReportHeader.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/ReportHeader.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/ReportHeader.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/ReportHeader.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/ReportHeader.Companion.ADAPTER.|(){}[0] + } + final val agent_version // com.apollographql.execution.tracing/ReportHeader.agent_version|{}agent_version[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/ReportHeader.agent_version.|(){}[0] + final val executable_schema_id // com.apollographql.execution.tracing/ReportHeader.executable_schema_id|{}executable_schema_id[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/ReportHeader.executable_schema_id.|(){}[0] + final val graph_ref // com.apollographql.execution.tracing/ReportHeader.graph_ref|{}graph_ref[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/ReportHeader.graph_ref.|(){}[0] + final val hostname // com.apollographql.execution.tracing/ReportHeader.hostname|{}hostname[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/ReportHeader.hostname.|(){}[0] + final val runtime_version // com.apollographql.execution.tracing/ReportHeader.runtime_version|{}runtime_version[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/ReportHeader.runtime_version.|(){}[0] + final val service_version // com.apollographql.execution.tracing/ReportHeader.service_version|{}service_version[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/ReportHeader.service_version.|(){}[0] + final val uname // com.apollographql.execution.tracing/ReportHeader.uname|{}uname[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/ReportHeader.uname.|(){}[0] +} +final class com.apollographql.execution.tracing/StatsContext : com.squareup.wire/Message { // com.apollographql.execution.tracing/StatsContext|null[0] + constructor (kotlin/String = ..., kotlin/String = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/StatsContext.|(kotlin.String;kotlin.String;okio.ByteString){}[0] + final fun copy(kotlin/String = ..., kotlin/String = ..., okio/ByteString = ...): com.apollographql.execution.tracing/StatsContext // com.apollographql.execution.tracing/StatsContext.copy|copy(kotlin.String;kotlin.String;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/StatsContext.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/StatsContext.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/StatsContext.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/StatsContext.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/StatsContext.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/StatsContext.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/StatsContext.Companion.ADAPTER.|(){}[0] + } + final val client_name // com.apollographql.execution.tracing/StatsContext.client_name|{}client_name[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/StatsContext.client_name.|(){}[0] + final val client_version // com.apollographql.execution.tracing/StatsContext.client_version|{}client_version[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/StatsContext.client_version.|(){}[0] +} +final class com.apollographql.execution.tracing/Trace : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace|null[0] + constructor (com.squareup.wire/Instant? = ..., com.squareup.wire/Instant? = ..., kotlin/Long = ..., com.apollographql.execution.tracing/Trace.Node? = ..., kotlin/Boolean = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., com.apollographql.execution.tracing/Trace.Details? = ..., kotlin/String = ..., kotlin/String = ..., com.apollographql.execution.tracing/Trace.HTTP? = ..., com.apollographql.execution.tracing/Trace.CachePolicy? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., kotlin/Boolean = ..., kotlin/Boolean = ..., kotlin/Boolean = ..., kotlin/Boolean = ..., kotlin/Boolean = ..., kotlin/Double = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.|(com.squareup.wire.Instant?;com.squareup.wire.Instant?;kotlin.Long;com.apollographql.execution.tracing.Trace.Node?;kotlin.Boolean;kotlin.String;kotlin.String;kotlin.String;com.apollographql.execution.tracing.Trace.Details?;kotlin.String;kotlin.String;com.apollographql.execution.tracing.Trace.HTTP?;com.apollographql.execution.tracing.Trace.CachePolicy?;com.apollographql.execution.tracing.Trace.QueryPlanNode?;kotlin.Boolean;kotlin.Boolean;kotlin.Boolean;kotlin.Boolean;kotlin.Boolean;kotlin.Double;okio.ByteString){}[0] + final class CachePolicy : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.CachePolicy|null[0] + constructor (com.apollographql.execution.tracing/Trace.CachePolicy.Scope = ..., kotlin/Long = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.CachePolicy.|(com.apollographql.execution.tracing.Trace.CachePolicy.Scope;kotlin.Long;okio.ByteString){}[0] + final enum class Scope : com.squareup.wire/WireEnum, kotlin/Enum { // com.apollographql.execution.tracing/Trace.CachePolicy.Scope|null[0] + enum entry PRIVATE // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.PRIVATE|null[0] + enum entry PUBLIC // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.PUBLIC|null[0] + enum entry UNKNOWN // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.UNKNOWN|null[0] + final fun valueOf(kotlin/String): com.apollographql.execution.tracing/Trace.CachePolicy.Scope // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.valueOf|valueOf#static(kotlin.String){}[0] + final fun values(): kotlin/Array // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.values|values#static(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.Companion|null[0] + final fun fromValue(kotlin/Int): com.apollographql.execution.tracing/Trace.CachePolicy.Scope? // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.Companion.fromValue|fromValue(kotlin.Int){}[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.Companion.ADAPTER.|(){}[0] + } + final val entries // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.entries|#static{}entries[0] + final fun (): kotlin.enums/EnumEntries // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.entries.|#static(){}[0] + final val value // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.value|{}value[0] + final fun (): kotlin/Int // com.apollographql.execution.tracing/Trace.CachePolicy.Scope.value.|(){}[0] + } + final fun copy(com.apollographql.execution.tracing/Trace.CachePolicy.Scope = ..., kotlin/Long = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.CachePolicy // com.apollographql.execution.tracing/Trace.CachePolicy.copy|copy(com.apollographql.execution.tracing.Trace.CachePolicy.Scope;kotlin.Long;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.CachePolicy.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.CachePolicy.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.CachePolicy.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.CachePolicy.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.CachePolicy.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.CachePolicy.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.CachePolicy.Companion.ADAPTER.|(){}[0] + } + final val max_age_ns // com.apollographql.execution.tracing/Trace.CachePolicy.max_age_ns|{}max_age_ns[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/Trace.CachePolicy.max_age_ns.|(){}[0] + final val scope // com.apollographql.execution.tracing/Trace.CachePolicy.scope|{}scope[0] + final fun (): com.apollographql.execution.tracing/Trace.CachePolicy.Scope // com.apollographql.execution.tracing/Trace.CachePolicy.scope.|(){}[0] + } + final class Details : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.Details|null[0] + constructor (kotlin.collections/Map = ..., kotlin/String = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.Details.|(kotlin.collections.Map;kotlin.String;okio.ByteString){}[0] + final fun copy(kotlin.collections/Map = ..., kotlin/String = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.Details // com.apollographql.execution.tracing/Trace.Details.copy|copy(kotlin.collections.Map;kotlin.String;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.Details.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.Details.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.Details.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.Details.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.Details.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.Details.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.Details.Companion.ADAPTER.|(){}[0] + } + final val operation_name // com.apollographql.execution.tracing/Trace.Details.operation_name|{}operation_name[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.Details.operation_name.|(){}[0] + final val variables_json // com.apollographql.execution.tracing/Trace.Details.variables_json|{}variables_json[0] + final fun (): kotlin.collections/Map // com.apollographql.execution.tracing/Trace.Details.variables_json.|(){}[0] + } + final class Error : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.Error|null[0] + constructor (kotlin/String = ..., kotlin.collections/List = ..., kotlin/Long = ..., kotlin/String = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.Error.|(kotlin.String;kotlin.collections.List;kotlin.Long;kotlin.String;okio.ByteString){}[0] + final fun copy(kotlin/String = ..., kotlin.collections/List = ..., kotlin/Long = ..., kotlin/String = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.Error // com.apollographql.execution.tracing/Trace.Error.copy|copy(kotlin.String;kotlin.collections.List;kotlin.Long;kotlin.String;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.Error.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.Error.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.Error.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.Error.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.Error.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.Error.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.Error.Companion.ADAPTER.|(){}[0] + } + final val json // com.apollographql.execution.tracing/Trace.Error.json|{}json[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.Error.json.|(){}[0] + final val location // com.apollographql.execution.tracing/Trace.Error.location|{}location[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/Trace.Error.location.|(){}[0] + final val message // com.apollographql.execution.tracing/Trace.Error.message|{}message[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.Error.message.|(){}[0] + final val time_ns // com.apollographql.execution.tracing/Trace.Error.time_ns|{}time_ns[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/Trace.Error.time_ns.|(){}[0] + } + final class HTTP : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.HTTP|null[0] + constructor (com.apollographql.execution.tracing/Trace.HTTP.Method = ..., kotlin.collections/Map = ..., kotlin.collections/Map = ..., kotlin/Int = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.HTTP.|(com.apollographql.execution.tracing.Trace.HTTP.Method;kotlin.collections.Map;kotlin.collections.Map;kotlin.Int;okio.ByteString){}[0] + final class Values : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.HTTP.Values|null[0] + constructor (kotlin.collections/List = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.HTTP.Values.|(kotlin.collections.List;okio.ByteString){}[0] + final fun copy(kotlin.collections/List = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.HTTP.Values // com.apollographql.execution.tracing/Trace.HTTP.Values.copy|copy(kotlin.collections.List;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.HTTP.Values.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.HTTP.Values.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.HTTP.Values.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.HTTP.Values.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.HTTP.Values.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.HTTP.Values.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.HTTP.Values.Companion.ADAPTER.|(){}[0] + } + final val value_ // com.apollographql.execution.tracing/Trace.HTTP.Values.value_|{}value_[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/Trace.HTTP.Values.value_.|(){}[0] + } + final enum class Method : com.squareup.wire/WireEnum, kotlin/Enum { // com.apollographql.execution.tracing/Trace.HTTP.Method|null[0] + enum entry CONNECT // com.apollographql.execution.tracing/Trace.HTTP.Method.CONNECT|null[0] + enum entry DELETE // com.apollographql.execution.tracing/Trace.HTTP.Method.DELETE|null[0] + enum entry GET // com.apollographql.execution.tracing/Trace.HTTP.Method.GET|null[0] + enum entry HEAD // com.apollographql.execution.tracing/Trace.HTTP.Method.HEAD|null[0] + enum entry OPTIONS // com.apollographql.execution.tracing/Trace.HTTP.Method.OPTIONS|null[0] + enum entry PATCH // com.apollographql.execution.tracing/Trace.HTTP.Method.PATCH|null[0] + enum entry POST // com.apollographql.execution.tracing/Trace.HTTP.Method.POST|null[0] + enum entry PUT // com.apollographql.execution.tracing/Trace.HTTP.Method.PUT|null[0] + enum entry TRACE // com.apollographql.execution.tracing/Trace.HTTP.Method.TRACE|null[0] + enum entry UNKNOWN // com.apollographql.execution.tracing/Trace.HTTP.Method.UNKNOWN|null[0] + final fun valueOf(kotlin/String): com.apollographql.execution.tracing/Trace.HTTP.Method // com.apollographql.execution.tracing/Trace.HTTP.Method.valueOf|valueOf#static(kotlin.String){}[0] + final fun values(): kotlin/Array // com.apollographql.execution.tracing/Trace.HTTP.Method.values|values#static(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.HTTP.Method.Companion|null[0] + final fun fromValue(kotlin/Int): com.apollographql.execution.tracing/Trace.HTTP.Method? // com.apollographql.execution.tracing/Trace.HTTP.Method.Companion.fromValue|fromValue(kotlin.Int){}[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.HTTP.Method.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.HTTP.Method.Companion.ADAPTER.|(){}[0] + } + final val entries // com.apollographql.execution.tracing/Trace.HTTP.Method.entries|#static{}entries[0] + final fun (): kotlin.enums/EnumEntries // com.apollographql.execution.tracing/Trace.HTTP.Method.entries.|#static(){}[0] + final val value // com.apollographql.execution.tracing/Trace.HTTP.Method.value|{}value[0] + final fun (): kotlin/Int // com.apollographql.execution.tracing/Trace.HTTP.Method.value.|(){}[0] + } + final fun copy(com.apollographql.execution.tracing/Trace.HTTP.Method = ..., kotlin.collections/Map = ..., kotlin.collections/Map = ..., kotlin/Int = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.HTTP // com.apollographql.execution.tracing/Trace.HTTP.copy|copy(com.apollographql.execution.tracing.Trace.HTTP.Method;kotlin.collections.Map;kotlin.collections.Map;kotlin.Int;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.HTTP.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.HTTP.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.HTTP.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.HTTP.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.HTTP.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.HTTP.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.HTTP.Companion.ADAPTER.|(){}[0] + } + final val method // com.apollographql.execution.tracing/Trace.HTTP.method|{}method[0] + final fun (): com.apollographql.execution.tracing/Trace.HTTP.Method // com.apollographql.execution.tracing/Trace.HTTP.method.|(){}[0] + final val request_headers // com.apollographql.execution.tracing/Trace.HTTP.request_headers|{}request_headers[0] + final fun (): kotlin.collections/Map // com.apollographql.execution.tracing/Trace.HTTP.request_headers.|(){}[0] + final val response_headers // com.apollographql.execution.tracing/Trace.HTTP.response_headers|{}response_headers[0] + final fun (): kotlin.collections/Map // com.apollographql.execution.tracing/Trace.HTTP.response_headers.|(){}[0] + final val status_code // com.apollographql.execution.tracing/Trace.HTTP.status_code|{}status_code[0] + final fun (): kotlin/Int // com.apollographql.execution.tracing/Trace.HTTP.status_code.|(){}[0] + } + final class Location : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.Location|null[0] + constructor (kotlin/Int = ..., kotlin/Int = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.Location.|(kotlin.Int;kotlin.Int;okio.ByteString){}[0] + final fun copy(kotlin/Int = ..., kotlin/Int = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.Location // com.apollographql.execution.tracing/Trace.Location.copy|copy(kotlin.Int;kotlin.Int;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.Location.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.Location.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.Location.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.Location.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.Location.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.Location.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.Location.Companion.ADAPTER.|(){}[0] + } + final val column // com.apollographql.execution.tracing/Trace.Location.column|{}column[0] + final fun (): kotlin/Int // com.apollographql.execution.tracing/Trace.Location.column.|(){}[0] + final val line // com.apollographql.execution.tracing/Trace.Location.line|{}line[0] + final fun (): kotlin/Int // com.apollographql.execution.tracing/Trace.Location.line.|(){}[0] + } + final class Node : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.Node|null[0] + constructor (kotlin/String? = ..., kotlin/Int? = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., com.apollographql.execution.tracing/Trace.CachePolicy? = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin.collections/List = ..., kotlin.collections/List = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.Node.|(kotlin.String?;kotlin.Int?;kotlin.String;kotlin.String;kotlin.String;com.apollographql.execution.tracing.Trace.CachePolicy?;kotlin.Long;kotlin.Long;kotlin.collections.List;kotlin.collections.List;okio.ByteString){}[0] + final fun copy(kotlin/String? = ..., kotlin/Int? = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., com.apollographql.execution.tracing/Trace.CachePolicy? = ..., kotlin/Long = ..., kotlin/Long = ..., kotlin.collections/List = ..., kotlin.collections/List = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.Node // com.apollographql.execution.tracing/Trace.Node.copy|copy(kotlin.String?;kotlin.Int?;kotlin.String;kotlin.String;kotlin.String;com.apollographql.execution.tracing.Trace.CachePolicy?;kotlin.Long;kotlin.Long;kotlin.collections.List;kotlin.collections.List;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.Node.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.Node.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.Node.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.Node.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.Node.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.Node.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.Node.Companion.ADAPTER.|(){}[0] + } + final val cache_policy // com.apollographql.execution.tracing/Trace.Node.cache_policy|{}cache_policy[0] + final fun (): com.apollographql.execution.tracing/Trace.CachePolicy? // com.apollographql.execution.tracing/Trace.Node.cache_policy.|(){}[0] + final val child // com.apollographql.execution.tracing/Trace.Node.child|{}child[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/Trace.Node.child.|(){}[0] + final val end_time // com.apollographql.execution.tracing/Trace.Node.end_time|{}end_time[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/Trace.Node.end_time.|(){}[0] + final val error // com.apollographql.execution.tracing/Trace.Node.error|{}error[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/Trace.Node.error.|(){}[0] + final val index // com.apollographql.execution.tracing/Trace.Node.index|{}index[0] + final fun (): kotlin/Int? // com.apollographql.execution.tracing/Trace.Node.index.|(){}[0] + final val original_field_name // com.apollographql.execution.tracing/Trace.Node.original_field_name|{}original_field_name[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.Node.original_field_name.|(){}[0] + final val parent_type // com.apollographql.execution.tracing/Trace.Node.parent_type|{}parent_type[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.Node.parent_type.|(){}[0] + final val response_name // com.apollographql.execution.tracing/Trace.Node.response_name|{}response_name[0] + final fun (): kotlin/String? // com.apollographql.execution.tracing/Trace.Node.response_name.|(){}[0] + final val start_time // com.apollographql.execution.tracing/Trace.Node.start_time|{}start_time[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/Trace.Node.start_time.|(){}[0] + final val type // com.apollographql.execution.tracing/Trace.Node.type|{}type[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.Node.type.|(){}[0] + } + final class QueryPlanNode : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.QueryPlanNode|null[0] + constructor (com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode? = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.QueryPlanNode.|(com.apollographql.execution.tracing.Trace.QueryPlanNode.SequenceNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode.ParallelNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode.FetchNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode.FlattenNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode.DeferNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode.ConditionNode?;okio.ByteString){}[0] + final class ConditionNode : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode|null[0] + constructor (kotlin/String = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.|(kotlin.String;com.apollographql.execution.tracing.Trace.QueryPlanNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode?;okio.ByteString){}[0] + final fun copy(kotlin/String = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.copy|copy(kotlin.String;com.apollographql.execution.tracing.Trace.QueryPlanNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode?;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.Companion.ADAPTER.|(){}[0] + } + final val condition // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.condition|{}condition[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.condition.|(){}[0] + final val else_clause // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.else_clause|{}else_clause[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode? // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.else_clause.|(){}[0] + final val if_clause // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.if_clause|{}if_clause[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode? // com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode.if_clause.|(){}[0] + } + final class DeferNode : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode|null[0] + constructor (com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary? = ..., kotlin.collections/List = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.|(com.apollographql.execution.tracing.Trace.QueryPlanNode.DeferNodePrimary?;kotlin.collections.List;okio.ByteString){}[0] + final fun copy(com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary? = ..., kotlin.collections/List = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.copy|copy(com.apollographql.execution.tracing.Trace.QueryPlanNode.DeferNodePrimary?;kotlin.collections.List;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.Companion.ADAPTER.|(){}[0] + } + final val deferred // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.deferred|{}deferred[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.deferred.|(){}[0] + final val primary // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.primary|{}primary[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary? // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode.primary.|(){}[0] + } + final class DeferNodePrimary : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary|null[0] + constructor (com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary.|(com.apollographql.execution.tracing.Trace.QueryPlanNode?;okio.ByteString){}[0] + final fun copy(com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary.copy|copy(com.apollographql.execution.tracing.Trace.QueryPlanNode?;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary.Companion.ADAPTER.|(){}[0] + } + final val node // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary.node|{}node[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode? // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNodePrimary.node.|(){}[0] + } + final class DeferredNode : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode|null[0] + constructor (kotlin.collections/List = ..., kotlin/String = ..., kotlin.collections/List = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.|(kotlin.collections.List;kotlin.String;kotlin.collections.List;com.apollographql.execution.tracing.Trace.QueryPlanNode?;okio.ByteString){}[0] + final fun copy(kotlin.collections/List = ..., kotlin/String = ..., kotlin.collections/List = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.copy|copy(kotlin.collections.List;kotlin.String;kotlin.collections.List;com.apollographql.execution.tracing.Trace.QueryPlanNode?;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.Companion.ADAPTER.|(){}[0] + } + final val depends // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.depends|{}depends[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.depends.|(){}[0] + final val label // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.label|{}label[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.label.|(){}[0] + final val node // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.node|{}node[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode? // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.node.|(){}[0] + final val path // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.path|{}path[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNode.path.|(){}[0] + } + final class DeferredNodeDepends : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends|null[0] + constructor (kotlin/String = ..., kotlin/String = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.|(kotlin.String;kotlin.String;okio.ByteString){}[0] + final fun copy(kotlin/String = ..., kotlin/String = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.copy|copy(kotlin.String;kotlin.String;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.Companion.ADAPTER.|(){}[0] + } + final val defer_label // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.defer_label|{}defer_label[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.defer_label.|(){}[0] + final val id // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.id|{}id[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferredNodeDepends.id.|(){}[0] + } + final class FetchNode : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode|null[0] + constructor (kotlin/String = ..., kotlin/Boolean = ..., com.apollographql.execution.tracing/Trace? = ..., kotlin/Long = ..., com.squareup.wire/Instant? = ..., com.squareup.wire/Instant? = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.|(kotlin.String;kotlin.Boolean;com.apollographql.execution.tracing.Trace?;kotlin.Long;com.squareup.wire.Instant?;com.squareup.wire.Instant?;okio.ByteString){}[0] + final fun copy(kotlin/String = ..., kotlin/Boolean = ..., com.apollographql.execution.tracing/Trace? = ..., kotlin/Long = ..., com.squareup.wire/Instant? = ..., com.squareup.wire/Instant? = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.copy|copy(kotlin.String;kotlin.Boolean;com.apollographql.execution.tracing.Trace?;kotlin.Long;com.squareup.wire.Instant?;com.squareup.wire.Instant?;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.Companion.ADAPTER.|(){}[0] + } + final val received_time // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.received_time|{}received_time[0] + final fun (): com.squareup.wire/Instant? // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.received_time.|(){}[0] + final val sent_time // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.sent_time|{}sent_time[0] + final fun (): com.squareup.wire/Instant? // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.sent_time.|(){}[0] + final val sent_time_offset // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.sent_time_offset|{}sent_time_offset[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.sent_time_offset.|(){}[0] + final val service_name // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.service_name|{}service_name[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.service_name.|(){}[0] + final val trace // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.trace|{}trace[0] + final fun (): com.apollographql.execution.tracing/Trace? // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.trace.|(){}[0] + final val trace_parsing_failed // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.trace_parsing_failed|{}trace_parsing_failed[0] + final fun (): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode.trace_parsing_failed.|(){}[0] + } + final class FlattenNode : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode|null[0] + constructor (kotlin.collections/List = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.|(kotlin.collections.List;com.apollographql.execution.tracing.Trace.QueryPlanNode?;okio.ByteString){}[0] + final fun copy(kotlin.collections/List = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.copy|copy(kotlin.collections.List;com.apollographql.execution.tracing.Trace.QueryPlanNode?;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.Companion.ADAPTER.|(){}[0] + } + final val node // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.node|{}node[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode? // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.node.|(){}[0] + final val response_path // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.response_path|{}response_path[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode.response_path.|(){}[0] + } + final class ParallelNode : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode|null[0] + constructor (kotlin.collections/List = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode.|(kotlin.collections.List;okio.ByteString){}[0] + final fun copy(kotlin.collections/List = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode.copy|copy(kotlin.collections.List;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode.Companion.ADAPTER.|(){}[0] + } + final val nodes // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode.nodes|{}nodes[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode.nodes.|(){}[0] + } + final class ResponsePathElement : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement|null[0] + constructor (kotlin/String? = ..., kotlin/Int? = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.|(kotlin.String?;kotlin.Int?;okio.ByteString){}[0] + final fun copy(kotlin/String? = ..., kotlin/Int? = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.copy|copy(kotlin.String?;kotlin.Int?;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.Companion.ADAPTER.|(){}[0] + } + final val field_name // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.field_name|{}field_name[0] + final fun (): kotlin/String? // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.field_name.|(){}[0] + final val index // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.index|{}index[0] + final fun (): kotlin/Int? // com.apollographql.execution.tracing/Trace.QueryPlanNode.ResponsePathElement.index.|(){}[0] + } + final class SequenceNode : com.squareup.wire/Message { // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode|null[0] + constructor (kotlin.collections/List = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode.|(kotlin.collections.List;okio.ByteString){}[0] + final fun copy(kotlin.collections/List = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode.copy|copy(kotlin.collections.List;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode.Companion.ADAPTER.|(){}[0] + } + final val nodes // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode.nodes|{}nodes[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode.nodes.|(){}[0] + } + final fun copy(com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode? = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace.QueryPlanNode // com.apollographql.execution.tracing/Trace.QueryPlanNode.copy|copy(com.apollographql.execution.tracing.Trace.QueryPlanNode.SequenceNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode.ParallelNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode.FetchNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode.FlattenNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode.DeferNode?;com.apollographql.execution.tracing.Trace.QueryPlanNode.ConditionNode?;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.QueryPlanNode.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.QueryPlanNode.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.QueryPlanNode.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.QueryPlanNode.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.QueryPlanNode.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.QueryPlanNode.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.QueryPlanNode.Companion.ADAPTER.|(){}[0] + } + final val condition // com.apollographql.execution.tracing/Trace.QueryPlanNode.condition|{}condition[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode.ConditionNode? // com.apollographql.execution.tracing/Trace.QueryPlanNode.condition.|(){}[0] + final val defer // com.apollographql.execution.tracing/Trace.QueryPlanNode.defer|{}defer[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode.DeferNode? // com.apollographql.execution.tracing/Trace.QueryPlanNode.defer.|(){}[0] + final val fetch // com.apollographql.execution.tracing/Trace.QueryPlanNode.fetch|{}fetch[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode.FetchNode? // com.apollographql.execution.tracing/Trace.QueryPlanNode.fetch.|(){}[0] + final val flatten // com.apollographql.execution.tracing/Trace.QueryPlanNode.flatten|{}flatten[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode.FlattenNode? // com.apollographql.execution.tracing/Trace.QueryPlanNode.flatten.|(){}[0] + final val parallel // com.apollographql.execution.tracing/Trace.QueryPlanNode.parallel|{}parallel[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode.ParallelNode? // com.apollographql.execution.tracing/Trace.QueryPlanNode.parallel.|(){}[0] + final val sequence // com.apollographql.execution.tracing/Trace.QueryPlanNode.sequence|{}sequence[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode.SequenceNode? // com.apollographql.execution.tracing/Trace.QueryPlanNode.sequence.|(){}[0] + } + final fun copy(com.squareup.wire/Instant? = ..., com.squareup.wire/Instant? = ..., kotlin/Long = ..., com.apollographql.execution.tracing/Trace.Node? = ..., kotlin/Boolean = ..., kotlin/String = ..., kotlin/String = ..., kotlin/String = ..., com.apollographql.execution.tracing/Trace.Details? = ..., kotlin/String = ..., kotlin/String = ..., com.apollographql.execution.tracing/Trace.HTTP? = ..., com.apollographql.execution.tracing/Trace.CachePolicy? = ..., com.apollographql.execution.tracing/Trace.QueryPlanNode? = ..., kotlin/Boolean = ..., kotlin/Boolean = ..., kotlin/Boolean = ..., kotlin/Boolean = ..., kotlin/Boolean = ..., kotlin/Double = ..., okio/ByteString = ...): com.apollographql.execution.tracing/Trace // com.apollographql.execution.tracing/Trace.copy|copy(com.squareup.wire.Instant?;com.squareup.wire.Instant?;kotlin.Long;com.apollographql.execution.tracing.Trace.Node?;kotlin.Boolean;kotlin.String;kotlin.String;kotlin.String;com.apollographql.execution.tracing.Trace.Details?;kotlin.String;kotlin.String;com.apollographql.execution.tracing.Trace.HTTP?;com.apollographql.execution.tracing.Trace.CachePolicy?;com.apollographql.execution.tracing.Trace.QueryPlanNode?;kotlin.Boolean;kotlin.Boolean;kotlin.Boolean;kotlin.Boolean;kotlin.Boolean;kotlin.Double;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/Trace.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/Trace.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/Trace.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/Trace.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/Trace.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/Trace.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/Trace.Companion.ADAPTER.|(){}[0] + } + final val cache_policy // com.apollographql.execution.tracing/Trace.cache_policy|{}cache_policy[0] + final fun (): com.apollographql.execution.tracing/Trace.CachePolicy? // com.apollographql.execution.tracing/Trace.cache_policy.|(){}[0] + final val client_name // com.apollographql.execution.tracing/Trace.client_name|{}client_name[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.client_name.|(){}[0] + final val client_version // com.apollographql.execution.tracing/Trace.client_version|{}client_version[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.client_version.|(){}[0] + final val details // com.apollographql.execution.tracing/Trace.details|{}details[0] + final fun (): com.apollographql.execution.tracing/Trace.Details? // com.apollographql.execution.tracing/Trace.details.|(){}[0] + final val duration_ns // com.apollographql.execution.tracing/Trace.duration_ns|{}duration_ns[0] + final fun (): kotlin/Long // com.apollographql.execution.tracing/Trace.duration_ns.|(){}[0] + final val end_time // com.apollographql.execution.tracing/Trace.end_time|{}end_time[0] + final fun (): com.squareup.wire/Instant? // com.apollographql.execution.tracing/Trace.end_time.|(){}[0] + final val field_execution_weight // com.apollographql.execution.tracing/Trace.field_execution_weight|{}field_execution_weight[0] + final fun (): kotlin/Double // com.apollographql.execution.tracing/Trace.field_execution_weight.|(){}[0] + final val forbidden_operation // com.apollographql.execution.tracing/Trace.forbidden_operation|{}forbidden_operation[0] + final fun (): kotlin/Boolean // com.apollographql.execution.tracing/Trace.forbidden_operation.|(){}[0] + final val full_query_cache_hit // com.apollographql.execution.tracing/Trace.full_query_cache_hit|{}full_query_cache_hit[0] + final fun (): kotlin/Boolean // com.apollographql.execution.tracing/Trace.full_query_cache_hit.|(){}[0] + final val http // com.apollographql.execution.tracing/Trace.http|{}http[0] + final fun (): com.apollographql.execution.tracing/Trace.HTTP? // com.apollographql.execution.tracing/Trace.http.|(){}[0] + final val is_incomplete // com.apollographql.execution.tracing/Trace.is_incomplete|{}is_incomplete[0] + final fun (): kotlin/Boolean // com.apollographql.execution.tracing/Trace.is_incomplete.|(){}[0] + final val persisted_query_hit // com.apollographql.execution.tracing/Trace.persisted_query_hit|{}persisted_query_hit[0] + final fun (): kotlin/Boolean // com.apollographql.execution.tracing/Trace.persisted_query_hit.|(){}[0] + final val persisted_query_register // com.apollographql.execution.tracing/Trace.persisted_query_register|{}persisted_query_register[0] + final fun (): kotlin/Boolean // com.apollographql.execution.tracing/Trace.persisted_query_register.|(){}[0] + final val query_plan // com.apollographql.execution.tracing/Trace.query_plan|{}query_plan[0] + final fun (): com.apollographql.execution.tracing/Trace.QueryPlanNode? // com.apollographql.execution.tracing/Trace.query_plan.|(){}[0] + final val registered_operation // com.apollographql.execution.tracing/Trace.registered_operation|{}registered_operation[0] + final fun (): kotlin/Boolean // com.apollographql.execution.tracing/Trace.registered_operation.|(){}[0] + final val root // com.apollographql.execution.tracing/Trace.root|{}root[0] + final fun (): com.apollographql.execution.tracing/Trace.Node? // com.apollographql.execution.tracing/Trace.root.|(){}[0] + final val signature // com.apollographql.execution.tracing/Trace.signature|{}signature[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.signature.|(){}[0] + final val start_time // com.apollographql.execution.tracing/Trace.start_time|{}start_time[0] + final fun (): com.squareup.wire/Instant? // com.apollographql.execution.tracing/Trace.start_time.|(){}[0] + final val unexecutedOperationBody // com.apollographql.execution.tracing/Trace.unexecutedOperationBody|{}unexecutedOperationBody[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.unexecutedOperationBody.|(){}[0] + final val unexecutedOperationName // com.apollographql.execution.tracing/Trace.unexecutedOperationName|{}unexecutedOperationName[0] + final fun (): kotlin/String // com.apollographql.execution.tracing/Trace.unexecutedOperationName.|(){}[0] +} +final class com.apollographql.execution.tracing/TracesAndStats : com.squareup.wire/Message { // com.apollographql.execution.tracing/TracesAndStats|null[0] + constructor (kotlin.collections/List = ..., kotlin.collections/List = ..., kotlin.collections/Map = ..., kotlin.collections/List = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/TracesAndStats.|(kotlin.collections.List;kotlin.collections.List;kotlin.collections.Map;kotlin.collections.List;okio.ByteString){}[0] + final fun copy(kotlin.collections/List = ..., kotlin.collections/List = ..., kotlin.collections/Map = ..., kotlin.collections/List = ..., okio/ByteString = ...): com.apollographql.execution.tracing/TracesAndStats // com.apollographql.execution.tracing/TracesAndStats.copy|copy(kotlin.collections.List;kotlin.collections.List;kotlin.collections.Map;kotlin.collections.List;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/TracesAndStats.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/TracesAndStats.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/TracesAndStats.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/TracesAndStats.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/TracesAndStats.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/TracesAndStats.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/TracesAndStats.Companion.ADAPTER.|(){}[0] + } + final val internal_traces_contributing_to_stats // com.apollographql.execution.tracing/TracesAndStats.internal_traces_contributing_to_stats|{}internal_traces_contributing_to_stats[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/TracesAndStats.internal_traces_contributing_to_stats.|(){}[0] + final val referenced_fields_by_type // com.apollographql.execution.tracing/TracesAndStats.referenced_fields_by_type|{}referenced_fields_by_type[0] + final fun (): kotlin.collections/Map // com.apollographql.execution.tracing/TracesAndStats.referenced_fields_by_type.|(){}[0] + final val stats_with_context // com.apollographql.execution.tracing/TracesAndStats.stats_with_context|{}stats_with_context[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/TracesAndStats.stats_with_context.|(){}[0] + final val trace // com.apollographql.execution.tracing/TracesAndStats.trace|{}trace[0] + final fun (): kotlin.collections/List // com.apollographql.execution.tracing/TracesAndStats.trace.|(){}[0] +} +final class com.apollographql.execution.tracing/TypeStat : com.squareup.wire/Message { // com.apollographql.execution.tracing/TypeStat|null[0] + constructor (kotlin.collections/Map = ..., okio/ByteString = ...) // com.apollographql.execution.tracing/TypeStat.|(kotlin.collections.Map;okio.ByteString){}[0] + final fun copy(kotlin.collections/Map = ..., okio/ByteString = ...): com.apollographql.execution.tracing/TypeStat // com.apollographql.execution.tracing/TypeStat.copy|copy(kotlin.collections.Map;okio.ByteString){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.execution.tracing/TypeStat.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // com.apollographql.execution.tracing/TypeStat.hashCode|hashCode(){}[0] + final fun newBuilder(): kotlin/Nothing // com.apollographql.execution.tracing/TypeStat.newBuilder|newBuilder(){}[0] + final fun toString(): kotlin/String // com.apollographql.execution.tracing/TypeStat.toString|toString(){}[0] + final object Companion { // com.apollographql.execution.tracing/TypeStat.Companion|null[0] + final val ADAPTER // com.apollographql.execution.tracing/TypeStat.Companion.ADAPTER|{}ADAPTER[0] + final fun (): com.squareup.wire/ProtoAdapter // com.apollographql.execution.tracing/TypeStat.Companion.ADAPTER.|(){}[0] + } + final val per_field_stat // com.apollographql.execution.tracing/TypeStat.per_field_stat|{}per_field_stat[0] + final fun (): kotlin.collections/Map // com.apollographql.execution.tracing/TypeStat.per_field_stat.|(){}[0] +} diff --git a/apollo-execution-tracing/build.gradle.kts b/apollo-execution-tracing/build.gradle.kts new file mode 100644 index 00000000..e5be76e5 --- /dev/null +++ b/apollo-execution-tracing/build.gradle.kts @@ -0,0 +1,34 @@ +import com.gradleup.librarian.gradle.librarianModule + +plugins { + id("org.jetbrains.kotlin.multiplatform") + id("com.squareup.wire") +} + +librarianModule(true) + +kotlin { + jvm() + macosArm64() + + sourceSets { + getByName("commonMain") { + dependencies { + api(project(":apollo-execution-runtime")) + implementation(libs.kotlinx.datetime) + } + } + + getByName("commonTest") { + dependencies { + implementation(libs.kotlin.test) + } } + + } +} + +wire { + kotlin { + + } +} diff --git a/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloNode.kt b/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloNode.kt new file mode 100644 index 00000000..e050429a --- /dev/null +++ b/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloNode.kt @@ -0,0 +1,44 @@ +package com.apollographql.execution.tracing + +import com.apollographql.apollo.api.Error +import com.apollographql.execution.ExternalValue + +/** + * An internal node. It is mostly a copy of [Trace.Node] but is 100% mutable so we can build the tree as + * execution is happening. + * Note that a node does not match a resolver invocation due to lists. + */ +internal class ApolloNode(private val id: Any?) { + val children = mutableListOf() + var parentType: String = "" + var originalFieldName: String = "" + var type: String = "" + var startNanos: Long = 0L + var endNanos: Long = 0L + var value: ExternalValue? = null + + fun toProtoNode(): Trace.Node { + val errors = mutableListOf() + val value = value + if (value is Error) { + errors.add( + Trace.Error( + message = value.message, + location = value.locations.orEmpty().map { Trace.Location(it.line, it.column) } + ) + ) + } + return Trace.Node( + response_name = id as? String, + index = id as? Int, + original_field_name = originalFieldName, + type = type, + parent_type = parentType, + cache_policy = null, + start_time = startNanos, + end_time = endNanos, + error = errors, + child = children.map { it.toProtoNode() } + ) + } +} \ No newline at end of file diff --git a/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloOperationTracing.kt b/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloOperationTracing.kt new file mode 100644 index 00000000..9c3c6ee8 --- /dev/null +++ b/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloOperationTracing.kt @@ -0,0 +1,61 @@ +package com.apollographql.execution.tracing + +import com.apollographql.apollo.ast.toUtf8 +import com.apollographql.execution.InstrumentationCallback +import com.apollographql.execution.ResolveInfo +import com.squareup.wire.ofEpochSecond +import kotlinx.datetime.Clock +import kotlin.time.TimeSource.Monotonic.markNow + +class ApolloOperationTracing { + private val nodes = mutableMapOf, ApolloNode>() + + private val rootNode = ApolloNode(null) + + internal val operationStartMark = markNow() + private val startInstant = Clock.System.now() + + init { + nodes.put(emptyList(), rootNode) + } + + internal fun newNode(path: List): ApolloNode { + val node = ApolloNode(path.last()) + nodes.put(path, node) + + val parent = ensureParent(path) + parent.children.add(node) + return node + } + + private fun ensureParent(path: List): ApolloNode { + val parentPath = path.dropLast(1) + val parentNode = nodes.get(parentPath) + if (parentNode != null) { + return parentNode + } + return newNode(parentPath) + } + + fun toProtoTrace(): Trace { + val endInstant = Clock.System.now() + return Trace( + start_time = ofEpochSecond(startInstant.epochSeconds, startInstant.nanosecondsOfSecond.toLong()), + end_time = ofEpochSecond(endInstant.epochSeconds, endInstant.nanosecondsOfSecond.toLong()), + duration_ns = (markNow() - operationStartMark).inWholeNanoseconds, + root = rootNode.toProtoNode() + ) + } + + fun beforeField(resolveInfo: ResolveInfo): InstrumentationCallback? { + val node = newNode(resolveInfo.path) + node.parentType = resolveInfo.parentType + node.originalFieldName = resolveInfo.fieldName + node.type = resolveInfo.fieldDefinition().type.toUtf8() + node.startNanos = markNow().minus(operationStartMark).inWholeNanoseconds + return InstrumentationCallback { + node.value = it + node.endNanos = markNow().minus(operationStartMark).inWholeNanoseconds + } + } +} \ No newline at end of file diff --git a/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloTracingInstrumentation.kt b/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloTracingInstrumentation.kt new file mode 100644 index 00000000..995f5694 --- /dev/null +++ b/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloTracingInstrumentation.kt @@ -0,0 +1,15 @@ +package com.apollographql.execution.tracing + +import com.apollographql.execution.Instrumentation +import com.apollographql.execution.InstrumentationCallback +import com.apollographql.execution.ResolveInfo + +class ApolloTracingInstrumentation: Instrumentation() { + override fun beforeField(resolveInfo: ResolveInfo): InstrumentationCallback? { + val atc = resolveInfo.executionContext[ApolloTracingOperationContext] + require(atc != null) { + "ApolloTracingInstrumentation requires an ApolloTracingContext" + } + return atc.apolloOperationTracing.beforeField(resolveInfo) + } +} \ No newline at end of file diff --git a/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloTracingOperationContext.kt b/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloTracingOperationContext.kt new file mode 100644 index 00000000..9bb80c77 --- /dev/null +++ b/apollo-execution-tracing/src/commonMain/kotlin/com/apollographql/execution/tracing/ApolloTracingOperationContext.kt @@ -0,0 +1,20 @@ +@file:OptIn(ExperimentalEncodingApi::class) + +package com.apollographql.execution.tracing + +import com.apollographql.apollo.api.Error +import com.apollographql.apollo.api.ExecutionContext +import com.apollographql.apollo.ast.responseName +import com.apollographql.apollo.ast.toUtf8 +import com.apollographql.execution.ExternalValue +import com.apollographql.execution.ResolveInfo +import kotlin.io.encoding.ExperimentalEncodingApi + +class ApolloTracingOperationContext() : ExecutionContext.Element { + val apolloOperationTracing = ApolloOperationTracing() + + override val key = Key + + companion object Key : ExecutionContext.Key +} + diff --git a/apollo-execution-tracing/src/commonMain/proto/reports.proto b/apollo-execution-tracing/src/commonMain/proto/reports.proto new file mode 100644 index 00000000..43352b8d --- /dev/null +++ b/apollo-execution-tracing/src/commonMain/proto/reports.proto @@ -0,0 +1,477 @@ +syntax = "proto3"; + +package com.apollographql.execution.tracing; + +import "google/protobuf/timestamp.proto"; + +message Trace { + message CachePolicy { + enum Scope { + UNKNOWN = 0; + PUBLIC = 1; + PRIVATE = 2; + } + + Scope scope = 1; + int64 max_age_ns = 2; // use 0 for absent, -1 for 0 + } + + message Details { + // The variables associated with this query (unless the reporting agent is + // configured to keep them all private). Values are JSON: ie, strings are + // enclosed in double quotes, etc. The value of a private variable is + // the empty string. + map variables_json = 4; + + + // This is deprecated and only used for legacy applications + // don't include this in traces inside a FullTracesReport; the operation + // name for these traces comes from the key of the traces_per_query map. + string operation_name = 3; + } + + message Error { + string message = 1; // required + repeated Location location = 2; + uint64 time_ns = 3; + string json = 4; + } + + message HTTP { + message Values { + repeated string value = 1; + } + + enum Method { + UNKNOWN = 0; + OPTIONS = 1; + GET = 2; + HEAD = 3; + POST = 4; + PUT = 5; + DELETE = 6; + TRACE = 7; + CONNECT = 8; + PATCH = 9; + } + Method method = 1; + + // Should exclude manual blacklist ("Auth" by default) + map request_headers = 4; + map response_headers = 5; + + uint32 status_code = 6; + + reserved 2, 3, 8, 9; + } + + message Location { + uint32 line = 1; + uint32 column = 2; + } + + // We store information on each resolver execution as a Node on a tree. + // The structure of the tree corresponds to the structure of the GraphQL + // response; it does not indicate the order in which resolvers were + // invoked. Note that nodes representing indexes (and the root node) + // don't contain all Node fields (eg types and times). + message Node { + // The name of the field (for Nodes representing a resolver call) or the + // index in a list (for intermediate Nodes representing elements of a list). + // field_name is the name of the field as it appears in the GraphQL + // response: ie, it may be an alias. (In that case, the original_field_name + // field holds the actual field name from the schema.) In any context where + // we're building up a path, we use the response_name rather than the + // original_field_name. + oneof id { + string response_name = 1; + uint32 index = 2; + } + + string original_field_name = 14; + + // The field's return type; e.g. "String!" for User.email:String! + string type = 3; + + // The field's parent type; e.g. "User" for User.email:String! + string parent_type = 13; + + CachePolicy cache_policy = 5; + + // relative to the trace's start_time, in ns + uint64 start_time = 8; + // relative to the trace's start_time, in ns + uint64 end_time = 9; + + repeated Error error = 11; + repeated Node child = 12; + + reserved 4; + } + + // represents a node in the query plan, under which there is a trace tree for that service fetch. + // In particular, each fetch node represents a call to an implementing service, and calls to implementing + // services may not be unique. See https://github.com/apollographql/federation/blob/main/query-planner-js/src/QueryPlan.ts + // for more information and details. + message QueryPlanNode { + // This represents a set of nodes to be executed sequentially by the Router/Gateway executor + message SequenceNode { + repeated QueryPlanNode nodes = 1; + } + // This represents a set of nodes to be executed in parallel by the Router/Gateway executor + message ParallelNode { + repeated QueryPlanNode nodes = 1; + } + // This represents a node to send an operation to an implementing service + message FetchNode { + // XXX When we want to include more details about the sub-operation that was + // executed against this service, we should include that here in each fetch node. + // This might include an operation signature, requires directive, reference resolutions, etc. + string service_name = 1; + + bool trace_parsing_failed = 2; + + // This Trace only contains start_time, end_time, duration_ns, and root; + // all timings were calculated **on the subgraph**, and clock skew + // will be handled by the ingress server. + Trace trace = 3; + + // relative to the outer trace's start_time, in ns, measured in the Router/Gateway. + uint64 sent_time_offset = 4; + + // Wallclock times measured in the Router/Gateway for when this operation was + // sent and received. + google.protobuf.Timestamp sent_time = 5; + google.protobuf.Timestamp received_time = 6; + } + + // This node represents a way to reach into the response path and attach related entities. + // XXX Flatten is really not the right name and this node may be renamed in the query planner. + message FlattenNode { + repeated ResponsePathElement response_path = 1; + QueryPlanNode node = 2; + } + + // A `DeferNode` corresponds to one or more @defer at the same level of "nestedness" in the planned query. + message DeferNode { + DeferNodePrimary primary = 1; + repeated DeferredNode deferred = 2; + } + + message ConditionNode { + string condition = 1; + QueryPlanNode if_clause = 2; + QueryPlanNode else_clause = 3; + } + + message DeferNodePrimary { + QueryPlanNode node = 1; + } + message DeferredNode { + repeated DeferredNodeDepends depends = 1; + string label = 2; + repeated ResponsePathElement path = 3; + QueryPlanNode node = 4; + } + message DeferredNodeDepends { + string id = 1; + string defer_label = 2; + } + + message ResponsePathElement { + oneof id { + string field_name = 1; + uint32 index = 2; + } + } + oneof node { + SequenceNode sequence = 1; + ParallelNode parallel = 2; + FetchNode fetch = 3; + FlattenNode flatten = 4; + DeferNode defer = 5; + ConditionNode condition = 6; + } + } + + // Wallclock time when the trace began. + google.protobuf.Timestamp start_time = 4; // required + // Wallclock time when the trace ended. + google.protobuf.Timestamp end_time = 3; // required + // High precision duration of the trace; may not equal end_time-start_time + // (eg, if your machine's clock changed during the trace). + uint64 duration_ns = 11; // required + // A tree containing information about all resolvers run directly by this + // service, including errors. + Node root = 14; + + // If this is true, the trace is potentially missing some nodes that were + // present on the query plan. This can happen if the trace span buffer used + // in the Router fills up and some spans have to be dropped. In these cases + // the overall trace timing will still be correct, but the trace data could + // be missing some referenced or executed fields, and some nodes may be + // missing. If this is true we should display a warning to the user when they + // view the trace in Explorer. + bool is_incomplete = 33; + + // ------------------------------------------------------------------------- + // Fields below this line are *not* included in inline traces (the traces + // sent from subgraphs to the Router/Gateway). + + // In addition to details.raw_query, we include a "signature" of the query, + // which can be normalized: for example, you may want to discard aliases, drop + // unused operations and fragments, sort fields, etc. The most important thing + // here is that the signature match the signature in StatsReports. In + // StatsReports signatures show up as the key in the per_query map (with the + // operation name prepended). The signature should be a valid GraphQL query. + // All traces must have a signature; if this Trace is in a FullTracesReport + // that signature is in the key of traces_per_query rather than in this field. + // Engineproxy provides the signature in legacy_signature_needs_resigning + // instead. + string signature = 19; + + // Optional: when GraphQL parsing or validation against the GraphQL schema fails, these fields + // can include reference to the operation being sent for users to dig into the set of operations + // that are failing validation. + string unexecutedOperationBody = 27; + string unexecutedOperationName = 28; + + Details details = 6; + + string client_name = 7; + string client_version = 8; + + HTTP http = 10; + + CachePolicy cache_policy = 18; + + // If this Trace was created by a Router/Gateway, this is the query plan, including + // sub-Traces for subgraphs. Note that the 'root' tree on the + // top-level Trace won't contain any resolvers (though it could contain errors + // that occurred in the Router/Gateway itself). + QueryPlanNode query_plan = 26; + + // Was this response served from a full query response cache? (In that case + // the node tree will have no resolvers.) + bool full_query_cache_hit = 20; + + // Was this query specified successfully as a persisted query hash? + bool persisted_query_hit = 21; + // Did this query contain both a full query string and a persisted query hash? + // (This typically means that a previous request was rejected as an unknown + // persisted query.) + bool persisted_query_register = 22; + + // Was this operation registered and a part of the safelist? + bool registered_operation = 24; + + // Was this operation forbidden due to lack of safelisting? + bool forbidden_operation = 25; + + // Some servers don't do field-level instrumentation for every request and assign + // each request a "weight" for each request that they do instrument. When this + // trace is aggregated into field usage stats, it should count as this value + // towards the estimated_execution_count rather than just 1. This value should + // typically be at least 1. + // + // 0 is treated as 1 for backwards compatibility. + double field_execution_weight = 31; + + + + // removed: Node parse = 12; Node validate = 13; + // Id128 server_id = 1; Id128 client_id = 2; + // String client_reference_id = 23; String client_address = 9; + reserved 1, 2, 9, 12, 13, 23; +} + +// The `service` value embedded within the header key is not guaranteed to contain an actual service, +// and, in most cases, the service information is trusted to come from upstream processing. If the +// service _is_ specified in this header, then it is checked to match the context that is reporting it. +// Otherwise, the service information is deduced from the token context of the reporter and then sent +// along via other mechanisms (in Kafka, the `ReportKafkaKey). The other information (hostname, +// agent_version, etc.) is sent by the Apollo Engine Reporting agent, but we do not currently save that +// information to any of our persistent storage. +message ReportHeader { + // eg "mygraph@myvariant" + string graph_ref = 12; + + // eg "host-01.example.com" + string hostname = 5; + + // eg "engineproxy 0.1.0" + string agent_version = 6; // required + // eg "prod-4279-20160804T065423Z-5-g3cf0aa8" (taken from `git describe --tags`) + string service_version = 7; + // eg "node v4.6.0" + string runtime_version = 8; + // eg "Linux box 4.6.5-1-ec2 #1 SMP Mon Aug 1 02:31:38 PDT 2016 x86_64 GNU/Linux" + string uname = 9; + // An id that is used to represent the schema to Apollo Graph Manager + // Using this in place of what used to be schema_hash, since that is no longer + // attached to a schema in the backend. + string executable_schema_id = 11; + + reserved 3; // removed string service = 3; +} + +message PathErrorStats { + map children = 1; + uint64 errors_count = 4; + uint64 requests_with_errors_count = 5; +} + +message QueryLatencyStats { + repeated sint64 latency_count = 13; + uint64 request_count = 2; + uint64 cache_hits = 3; + uint64 persisted_query_hits = 4; + uint64 persisted_query_misses = 5; + repeated sint64 cache_latency_count = 14; + PathErrorStats root_error_stats = 7; + uint64 requests_with_errors_count = 8; + repeated sint64 public_cache_ttl_count = 15; + repeated sint64 private_cache_ttl_count = 16; + uint64 registered_operation_count = 11; + uint64 forbidden_operation_count = 12; + // The number of requests that were executed without field-level + // instrumentation (and thus do not contribute to `observed_execution_count` + // fields on this message's cousin-twice-removed FieldStats). + uint64 requests_without_field_instrumentation = 17; + // 1, 6, 9, and 10 were old int64 histograms + reserved 1, 6, 9, 10; +} + +message StatsContext { + // string client_reference_id = 1; + reserved 1; + string client_name = 2; + string client_version = 3; +} + +message ContextualizedQueryLatencyStats { + QueryLatencyStats query_latency_stats = 1; + StatsContext context = 2; +} + +message ContextualizedTypeStats { + StatsContext context = 1; + map per_type_stat = 2; +} + +message FieldStat { + string return_type = 3; // required; eg "String!" for User.email:String! + // Number of errors whose path is this field. Note that we assume that error + // tracking does *not* require field-level instrumentation so this *will* + // include errors from requests that don't contribute to the + // `observed_execution_count` field (and does not need to be scaled by + // field_execution_weight). + uint64 errors_count = 4; + // Number of times that the resolver for this field is directly observed being + // executed. + uint64 observed_execution_count = 5; + // Same as `count` but potentially scaled upwards if the server was only + // performing field-level instrumentation on a sampling of operations. For + // example, if the server randomly instruments 1% of requests for this + // operation, this number will be 100 times greater than + // `observed_execution_count`. (When aggregating a Trace into FieldStats, + // this number goes up by the trace's `field_execution_weight` for each + // observed field execution, while `observed_execution_count` above goes + // up by 1.) + uint64 estimated_execution_count = 10; + // Number of times the resolver for this field is executed that resulted in + // at least one error. "Request" is a misnomer here as this corresponds to + // resolver calls, not overall operations. Like `errors_count` above, this + // includes all requests rather than just requests with field-level + // instrumentation. + uint64 requests_with_errors_count = 6; + // Duration histogram for the latency of this field. Note that it is scaled in + // the same way as estimated_execution_count so its "total count" might be + // greater than `observed_execution_count` and may not exactly equal + // `estimated_execution_count` due to rounding. + repeated sint64 latency_count = 9; + reserved 1, 2, 7, 8; +} + +message TypeStat { + // Key is (eg) "email" for User.email:String! + map per_field_stat = 3; + reserved 1, 2; +} + +message ReferencedFieldsForType { + // Contains (eg) "email" for User.email:String! + repeated string field_names = 1; + // True if this type is an interface. + bool is_interface = 2; +} + + + +// This is the top-level message used by the new traces ingress. This +// is designed for the apollo-engine-reporting TypeScript agent and will +// eventually be documented as a public ingress API. This message consists +// solely of traces; the equivalent of the StatsReport is automatically +// generated server-side from this message. Agent should either send a trace or include it in the stats +// for every request in this report. Generally, buffering up until a large +// size has been reached (say, 4MB) or 5-10 seconds has passed is appropriate. +// This message used to be know as FullTracesReport, but got renamed since it isn't just for traces anymore +message Report { + ReportHeader header = 1; + + // key is statsReportKey (# operationName\nsignature) Note that the nested + // traces will *not* have a signature or details.operationName (because the + // key is adequate). + // + // We also assume that traces don't have + // legacy_per_query_implicit_operation_name, and we don't require them to have + // details.raw_query (which would consume a lot of space and has privacy/data + // access issues, and isn't currently exposed by our app anyway). + map traces_per_query = 5; + + // This is the time that the requests in this trace are considered to have taken place + // If this field is not present the max of the end_time of each trace will be used instead. + // If there are no traces and no end_time present the report will not be able to be processed. + // Note: This will override the end_time from traces. + google.protobuf.Timestamp end_time = 2; // required if no traces in this message + + // Total number of operations processed during this period. + uint64 operation_count = 6; + + // If this is set to true, the stats in TracesWithStats.stats_with_context + // represent all of the operations described from this report, and the + // traces in TracesWithStats.trace are a sampling of some of the same + // operations. If this is false, each operation is described in precisely + // one of those two fields. + bool traces_pre_aggregated = 7; +} + +message ContextualizedStats { + StatsContext context = 1; + QueryLatencyStats query_latency_stats = 2; + // Key is type name. This structure provides data for the count and latency of individual + // field executions and thus only reflects operations for which field-level tracing occurred. + map per_type_stat = 3; + +} + +// A sequence of traces and stats. If Report.traces_pre_aggregated (at the top +// level of the report) is false, an individual operation should either be +// described as a trace or as part of stats, but not both. If that flag +// is true, then all operations are described as stats and some are also +// described as traces. +message TracesAndStats { + repeated Trace trace = 1; + repeated ContextualizedStats stats_with_context = 2; + // This describes the fields referenced in the operation. Note that this may + // include fields that don't show up in FieldStats (due to being interface fields, + // being nested under null fields or empty lists or non-matching fragments or + // `@include` or `@skip`, etc). It also may be missing fields that show up in FieldStats + // (as FieldStats will include the concrete object type for fields referenced + // via an interface type). + map referenced_fields_by_type = 4; + // This field is used to validate that the algorithm used to construct `stats_with_context` + // matches similar algorithms in Apollo's servers. It is otherwise ignored and should not + // be included in reports. + repeated Trace internal_traces_contributing_to_stats = 3; +} \ No newline at end of file diff --git a/apollo-execution-tracing/src/commonTest/kotlin/TracingTest.kt b/apollo-execution-tracing/src/commonTest/kotlin/TracingTest.kt new file mode 100644 index 00000000..10c310fe --- /dev/null +++ b/apollo-execution-tracing/src/commonTest/kotlin/TracingTest.kt @@ -0,0 +1,132 @@ +@file:OptIn(ExperimentalEncodingApi::class) + +import com.apollographql.apollo.ast.toGQLDocument +import com.apollographql.execution.ExecutableSchema +import com.apollographql.execution.toGraphQLRequest +import com.apollographql.execution.tracing.ApolloTracingInstrumentation +import com.apollographql.execution.tracing.ApolloTracingOperationContext +import com.apollographql.execution.tracing.Trace +import kotlinx.coroutines.runBlocking +import kotlin.io.encoding.Base64 +import kotlin.io.encoding.ExperimentalEncodingApi +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertTrue + +class TracingTest { + private fun schema(): ExecutableSchema { + // language=graphql + val sdl = """ + type Query { + widgets: [Widget!] + listOfLists: [[Widget!]!] + listOfScalars: [String!]! + } + + type Widget { + foo: String + bar: String + } + """.trimIndent() + + return ExecutableSchema.Builder() + .schema(sdl.toGQLDocument()) + .resolver { + when (it.fieldName) { + "widgets" -> listOf(0, 1) + "listOfLists" -> listOf(0, 1).map { listOf(0, 1) } + "listOfScalars" -> listOf("one", "two", "three") + "foo" -> "hello world" + "bar" -> throw Exception("woops") + else -> Unit + } + } + .addInstrumentation(ApolloTracingInstrumentation()) + .build() + } + + @Test + fun testTracing() { + val context = ApolloTracingOperationContext() + runBlocking { + schema().execute("{ widgets { foo, baz: bar }, listOfLists { foo }, listOfScalars }".toGraphQLRequest(), context) + } + + val trace = context.apolloOperationTracing.toProtoTrace() + + assertTrue(trace.start_time!!.getEpochSecond() > 0, "Start time has seconds") + assertTrue(trace.start_time.getNano() > 0, "Start time has nanoseconds") + assertTrue(trace.end_time!!.getEpochSecond() > 0, "End time has seconds") + assertTrue(trace.end_time.getNano() > 0, "End time has nanoseconds") + assertTrue(trace.duration_ns > 0, "DurationNs is greater than zero") + assertEquals(3, trace.root!!.child.size) + + val widgets = trace.root.child.get(0) + assertTrue(widgets.start_time > 0, "Field start time is greater than zero") + assertTrue(widgets.end_time > 0, "Field end time is greater than zero") + assertEquals("Query", widgets.parent_type) + assertEquals("[Widget!]", widgets.type) + assertEquals("widgets", widgets.response_name) + assertEquals(2, widgets.child.size) + + val secondItem = widgets.child.get(1) + assertEquals(1, secondItem.index) + assertEquals(2, secondItem.child.count()) + + val foo = secondItem.child.get(0) + assertTrue(foo.start_time > 0, "Field start time is greater than zero") + assertTrue(foo.end_time > 0, "Field end time is greater than zero") + assertEquals("Widget", foo.parent_type) + assertEquals("String", foo.type) + assertEquals("foo", foo.response_name) + assertEquals(0, foo.error.size) + + val bar = secondItem.child.get(1) + assertTrue(bar.start_time > 0, "Field start time is greater than zero") + assertTrue(bar.end_time > 0, "Field end time is greater than zero") + assertEquals("Widget", bar.parent_type) + assertEquals("String", bar.type) + assertEquals("baz", bar.response_name) + assertEquals("bar", bar.original_field_name) + assertEquals(1, bar.error.size) + + val error = bar.error.get(0) + assertEquals("Cannot resolve 'baz': woops", error.message) + + val listOfLists = trace.root.child.get(1) + assertEquals(0, listOfLists.child.get(0).index) + assertEquals(2, listOfLists.child.get(0).child.size) + assertEquals(1, listOfLists.child.get(1).index) + assertEquals(2, listOfLists.child.get(1).child.size) + + assertEquals(0, listOfLists.child.get(0).child.get(0).index) + assertEquals(1, listOfLists.child.get(0).child.get(0).child.size) + assertEquals(1, listOfLists.child.get(0).child.get(1).index) + assertEquals(1, listOfLists.child.get(0).child.get(1).child.size) + + val deeplyNestedFoo = listOfLists.child.get(0).child.get(0).child.get(0) + assertTrue(deeplyNestedFoo.start_time > 0, "Field start time is greater than zero") + assertTrue(deeplyNestedFoo.end_time > 0, "Field end time is greater than zero") + assertEquals("Widget", deeplyNestedFoo.parent_type) + assertEquals("String", deeplyNestedFoo.type) + assertEquals("foo", deeplyNestedFoo.response_name) + assertEquals(0, deeplyNestedFoo.error.size) + + val listOfScalars = trace.root.child.get(2) + assertTrue(listOfScalars.start_time > 0, "Field start time is greater than zero") + assertTrue(listOfScalars.end_time > 0, "Field end time is greater than zero") + assertEquals("Query", listOfScalars.parent_type) + assertEquals("[String!]!", listOfScalars.type) + assertEquals("listOfScalars", listOfScalars.response_name) + } + + @Test + fun decodeBase64() { + val ftv1 = "IgsI1+L/uAYQ5+OsdBoLCNfi/7gGEInX23RYxecvcp8BYpwBcghwcm9kdWN0cxoLW1Byb2R1Y3QhXSFqBVF1ZXJ5QPihH0jfzStiImIecgJpZBoDSUQhagdQcm9kdWN0QO6xJkitjCcKAmlkEABiImIecgJpZBoDSUQhagdQcm9kdWN0QMDLKUjw4ykKAmlkEAFiImIecgJpZBoDSUQhagdQcm9kdWN0QPyJK0iKnisKAmlkEAIKCHByb2R1Y3Rz" + val bytes = Base64.decode(ftv1) + val trace = Trace.ADAPTER.decode(bytes) + + println(trace) + } +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 6ce4a30f..10546dc6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,14 @@ import com.gradleup.librarian.gradle.librarianRoot -plugins { - alias(libs.plugins.kgp.jvm).apply(false) - alias(libs.plugins.librarian).apply(false) +buildscript { + dependencies { + classpath(libs.kotlin.gradle.plugin) + classpath(libs.librarian.gradle.plugin) + classpath(libs.wire.gradle.plugin) + } + repositories { + mavenCentral() + } } librarianRoot() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 872fe3ca..18105bcf 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ apollo-compiler = { group = "com.apollographql.apollo", name = "apollo-compiler" apollo-api = { group = "com.apollographql.apollo", name = "apollo-api", version.ref = "apollo" } atomicfu = "org.jetbrains.kotlinx:atomicfu:0.24.0" kotlinpoet = "com.squareup:kotlinpoet:1.18.0" - +kotlinx-datetime = "org.jetbrains.kotlinx:kotlinx-datetime:0.6.1" arrowCore = "io.arrow-kt:arrow-core:1.2.4" coroutines = "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1" ktor-server-netty = { group = "io.ktor", name = "ktor-server-netty", version.ref ="ktor" } @@ -28,17 +28,18 @@ ksp-api = { module = "com.google.devtools.ksp:symbol-processing-api", version.re ksp-implementation = { module = "com.google.devtools.ksp:symbol-processing", version.ref = "ksp" } ksp-gradle = { module = "com.google.devtools.ksp:symbol-processing-gradle-plugin", version.ref = "ksp" } kotlin-test = { group = "org.jetbrains.kotlin", name = "kotlin-test" } # the Kotlin plugin resolves the version +kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin-plugin" } http4k-bom = "org.http4k:http4k-bom:5.8.0.0" http4k-core = { module = "org.http4k:http4k-core" } http4k-realtime-core = { module = "org.http4k:http4k-realtime-core" } http4k-server-undertow = { module = "org.http4k:http4k-server-undertow" } http4k-server-netty = { module = "org.http4k:http4k-server-netty" } +librarian-gradle-plugin = "com.gradleup.librarian:librarian-gradle-plugin:0.0.6" apollo-execution-runtime = { module = "com.apollographql.execution:apollo-execution-runtime" } apollo-execution-federation = { module = "com.apollographql.execution:apollo-execution-federation" } spring-webflux = "org.springframework:spring-webflux:6.1.10" - +wire-gradle-plugin = "com.squareup.wire:wire-gradle-plugin:5.1.0" [plugins] kgp-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin-plugin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } -librarian = { id = "com.gradleup.librarian", version = "0.0.6" } apollo-execution = { id = "com.apollographql.execution" } \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 53226f64..6bdda27a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,5 +11,6 @@ include( "apollo-execution-ktor", "apollo-execution-http4k", "apollo-execution-spring", - "apollo-execution-federation" + "apollo-execution-federation", + "apollo-execution-tracing" )