class Datadog::Profiling::Recorder
Stores profiling events gathered by `Collector`s
Attributes
max_size[R]
Public Class Methods
new(event_classes, max_size, last_flush_time: Time.now.utc)
click to toggle source
# File lib/ddtrace/profiling/recorder.rb, line 11 def initialize(event_classes, max_size, last_flush_time: Time.now.utc) @buffers = {} @last_flush_time = last_flush_time @max_size = max_size # Add a buffer for each class event_classes.each do |event_class| @buffers[event_class] = Profiling::Buffer.new(max_size) end # Event classes can only be added ahead of time @buffers.freeze end
Public Instance Methods
[](event_class)
click to toggle source
# File lib/ddtrace/profiling/recorder.rb, line 25 def [](event_class) @buffers[event_class] end
empty?()
click to toggle source
NOTE: Remember that if the recorder is being accessed by multiple threads, this is an inherently racy operation.
# File lib/ddtrace/profiling/recorder.rb, line 67 def empty? @buffers.values.all?(&:empty?) end
flush()
click to toggle source
# File lib/ddtrace/profiling/recorder.rb, line 45 def flush event_count = 0 event_groups, start, finish = update_time do @buffers.collect do |event_class, buffer| events = buffer.pop next if events.empty? event_count += events.length EventGroup.new(event_class, events) end.compact end Flush.new( start, finish, event_groups, event_count ) end
push(events)
click to toggle source
# File lib/ddtrace/profiling/recorder.rb, line 29 def push(events) if events.is_a?(Array) # Push multiple events event_class = events.first.class raise UnknownEventError, event_class unless @buffers.key?(event_class) @buffers[event_class].concat(events) else # Push single event event_class = events.class raise UnknownEventError, event_class unless @buffers.key?(event_class) @buffers[event_class].push(events) end end
Private Instance Methods
update_time() { || ... }
click to toggle source
# File lib/ddtrace/profiling/recorder.rb, line 86 def update_time start = @last_flush_time result = yield @last_flush_time = Time.now.utc # Return event groups, start time, finish time [result, start, @last_flush_time] end