Method: GraphQL::Tracing::PlatformTracing#trace

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

#trace(key, data) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/graphql/tracing/platform_tracing.rb', line 25

def trace(key, data)
  case key
  when "lex", "parse", "validate", "analyze_query", "analyze_multiplex", "execute_query", "execute_query_lazy", "execute_multiplex"
    platform_key = @platform_keys.fetch(key)
    platform_trace(platform_key, key, data) do
      yield
    end
  when "execute_field", "execute_field_lazy"
    field = data[:field]
    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
      context = data.fetch(:query).context
      cached_platform_key(context, field, :field) { platform_field_key(field.owner, field) }
    else
      nil
    end

    if platform_key && trace_field
      platform_trace(platform_key, key, data) do
        yield
      end
    else
      yield
    end
  when "authorized", "authorized_lazy"
    type = data.fetch(:type)
    context = data.fetch(:context)
    platform_key = cached_platform_key(context, type, :authorized) { platform_authorized_key(type) }
    platform_trace(platform_key, key, data) do
      yield
    end
  when "resolve_type", "resolve_type_lazy"
    type = data.fetch(:type)
    context = data.fetch(:context)
    platform_key = cached_platform_key(context, type, :resolve_type) { platform_resolve_type_key(type) }
    platform_trace(platform_key, key, data) do
      yield
    end
  else
    # it's a custom key
    yield
  end
end