Class: GraphQL::Tracing::DetailedTrace::MemoryBackend

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

Overview

An in-memory trace storage backend. Suitable for testing and development only. It won’t work for multi-process deployments and everything is erased when the app is restarted.

Instance Method Summary collapse

Constructor Details

#initialize(limit: nil) ⇒ MemoryBackend

Returns a new instance of MemoryBackend.



9
10
11
12
13
# File 'lib/graphql/tracing/detailed_trace/memory_backend.rb', line 9

def initialize(limit: nil)
  @limit = limit
  @traces = {}
  @next_id = 0
end

Instance Method Details

#delete_all_tracesObject



36
37
38
39
# File 'lib/graphql/tracing/detailed_trace/memory_backend.rb', line 36

def delete_all_traces
  @traces.clear
  nil
end

#delete_trace(id) ⇒ Object



31
32
33
34
# File 'lib/graphql/tracing/detailed_trace/memory_backend.rb', line 31

def delete_trace(id)
  @traces.delete(id.to_i)
  nil
end

#find_trace(id) ⇒ Object



27
28
29
# File 'lib/graphql/tracing/detailed_trace/memory_backend.rb', line 27

def find_trace(id)
  @traces[id]
end

#save_trace(operation_name, duration, begin_ms, trace_data) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/graphql/tracing/detailed_trace/memory_backend.rb', line 41

def save_trace(operation_name, duration, begin_ms, trace_data)
  id = @next_id
  @next_id += 1
  @traces[id] = DetailedTrace::StoredTrace.new(
    id: id,
    operation_name: operation_name,
    duration_ms: duration,
    begin_ms: begin_ms,
    trace_data: trace_data
  )
  if @limit && @traces.size > @limit
    del_keys = @traces.keys[0...-@limit]
    del_keys.each { |k| @traces.delete(k) }
  end
  id
end

#traces(last:, before:) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/graphql/tracing/detailed_trace/memory_backend.rb', line 15

def traces(last:, before:)
  page = []
  @traces.values.reverse_each do |trace|
    if page.size == last
      break
    elsif before.nil? || trace.begin_ms < before
      page << trace
    end
  end
  page
end