module GraphQL::Tracing::AppOpticsTrace
This class uses the AppopticsAPM SDK from the appoptics_apm gem to create traces for GraphQL.
There are 4 configurations available. They can be set in the appoptics_apm config file or in code. Please see: docs.appoptics.com/kb/apm_tracing/ruby/configure
AppOpticsAPM::Config[:graphql][:enabled] = true|false AppOpticsAPM::Config[:graphql][:transaction_name] = true|false AppOpticsAPM::Config[:graphql][:sanitize_query] = true|false AppOpticsAPM::Config[:graphql][:remove_comments] = true|false
Constants
Public Class Methods
Source
# File lib/graphql/tracing/appoptics_trace.rb, line 32 def self.version Gem::Version.new('1.0.0') end
During auto-instrumentation this version of AppOpticsTracing is compared with the version provided in the appoptics_apm gem, so that the newer version of the class can be used
Public Instance Methods
# File lib/graphql/tracing/appoptics_trace.rb, line 67 def execute_field(query:, field:, ast_node:, arguments:, object:) return_type = field.type.unwrap trace_field = if return_type.kind.scalar? || return_type.kind.enum? (field.trace.nil? && @trace_scalars) || field.trace else true end platform_key = if trace_field @platform_key_cache[AppOpticsTrace].platform_field_key_cache[field] else nil end if platform_key && trace_field return super if !defined?(AppOpticsAPM) || gql_config[:enabled] == false layer = platform_key kvs = metadata({query: query, field: field, ast_node: ast_node, arguments: arguments, object: object}, layer) ::AppOpticsAPM::SDK.trace(layer, kvs) do kvs.clear # we don't have to send them twice super end else super end end
rubocop:enable Development/NoEvalCop
Calls superclass method
# File lib/graphql/tracing/appoptics_trace.rb, line 93 def execute_field_lazy(query:, field:, ast_node:, arguments:, object:) # rubocop:disable Development/TraceCallsSuperCop execute_field(query: query, field: field, ast_node: ast_node, arguments: arguments, object: object) end
Source
# File lib/graphql/tracing/appoptics_trace.rb, line 144 def platform_field_key(field) "graphql.#{field.owner.graphql_name}.#{field.graphql_name}" end
# File lib/graphql/tracing/appoptics_trace.rb, line 152 def platform_resolve_type_key(type) "graphql.resolve_type.#{type.graphql_name}" end
Source
# File lib/graphql/tracing/appoptics_trace.rb, line 119 def resolve_type(**data) return super if !defined?(AppOpticsAPM) || gql_config[:enabled] == false layer = @platform_key_cache[AppOpticsTrace].platform_resolve_type_key_cache[data[:type]] kvs = metadata(data, layer) ::AppOpticsAPM::SDK.trace(layer, kvs) do kvs.clear # we don't have to send them twice super end end
Calls superclass method
Source
# File lib/graphql/tracing/appoptics_trace.rb, line 131 def resolve_type_lazy(**data) return super if !defined?(AppOpticsAPM) || gql_config[:enabled] == false layer = @platform_key_cache[AppOpticsTrace].platform_resolve_type_key_cache[data[:type]] kvs = metadata(data, layer) ::AppOpticsAPM::SDK.trace(layer, kvs) do kvs.clear # we don't have to send them twice super end end
Calls superclass method