Class: GraphQL::Tracing::PlatformTracing Private

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/tracing/platform_tracing.rb

Overview

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

Each platform provides: - .platform_keys - #platform_trace - #platform_field_key(type, field)

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ PlatformTracing

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.

Returns a new instance of PlatformTracing.



19
20
21
22
23
# File 'lib/graphql/tracing/platform_tracing.rb', line 19

def initialize(options = {})
  @options = options
  @platform_keys = self.class.platform_keys
  @trace_scalars = options.fetch(:trace_scalars, false)
end

Class Attribute Details

.platform_keysObject

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.



12
13
14
# File 'lib/graphql/tracing/platform_tracing.rb', line 12

def platform_keys
  @platform_keys
end

Class Method Details

.use(schema_defn, options = {}) ⇒ 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.



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/graphql/tracing/platform_tracing.rb', line 75

def self.use(schema_defn, options = {})
  if options[:legacy_tracing]
    tracer = self.new(**options)
    schema_defn.tracer(tracer)
  else
    tracing_name = self.name.split("::").last
    trace_name = tracing_name.sub("Tracing", "Trace")
    if GraphQL::Tracing.const_defined?(trace_name, false)
      trace_module = GraphQL::Tracing.const_get(trace_name)
      schema_defn.trace_with(trace_module, **options)
    else
      tracer = self.new(**options)
      schema_defn.tracer(tracer)
    end
  end
end

Instance Method Details

#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