Method: GraphQL::Tracing::DetailedTrace.use

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

.use(schema, trace_mode: :profile_sample, memory: false, debug: debug?, , redis: nil, limit: nil, model_class: nil) ⇒ Object

Parameters:

  • redis (Redis) (defaults to: nil)

    If provided, profiles will be stored in Redis for later review

  • limit (Integer) (defaults to: nil)

    A maximum number of profiles to store

  • debug (Boolean) (defaults to: debug?, )

    if false, it won't create debug annotations in Perfetto traces (reduces overhead)

  • model_class (Class<ActiveRecord::Base>) (defaults to: nil)


69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/graphql/tracing/detailed_trace.rb', line 69

def self.use(schema, trace_mode: :profile_sample, memory: false, debug: debug?, redis: nil, limit: nil, model_class: nil)
  storage = if redis
    RedisBackend.new(redis: redis, limit: limit)
  elsif memory
    MemoryBackend.new(limit: limit)
  elsif defined?(ActiveRecord)
    ActiveRecordBackend.new(limit: limit, model_class: model_class)
  else
    raise ArgumentError, "To store traces, install ActiveRecord or provide `redis: ...`"
  end
  detailed_trace = self.new(storage: storage, trace_mode: trace_mode, debug: debug)
  schema.detailed_trace = detailed_trace
  schema.trace_with(PerfettoTrace, mode: trace_mode, save_profile: true)
end