Method: GraphQL::Tracing::AppOpticsTrace#execute_field

Defined in:
lib/graphql/tracing/appoptics_trace.rb

#execute_field(query:, field:, ast_node:, arguments:, object:) ⇒ Object

[View source] [View on GitHub]

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/graphql/tracing/appoptics_trace.rb', line 60

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 = ({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