Class: Datadog::Profiling::Recorder
- Inherits:
-
Object
- Object
- Datadog::Profiling::Recorder
- Defined in:
- lib/ddtrace/profiling/recorder.rb
Overview
Stores profiling events gathered by Collector
s
Defined Under Namespace
Classes: UnknownEventError
Instance Attribute Summary collapse
-
#max_size ⇒ Object
readonly
Returns the value of attribute max_size.
Instance Method Summary collapse
- #[](event_class) ⇒ Object
-
#empty? ⇒ Boolean
NOTE: Remember that if the recorder is being accessed by multiple threads, this is an inherently racy operation.
- #flush ⇒ Object
-
#initialize(event_classes, max_size, last_flush_time: Time.now.utc) ⇒ Recorder
constructor
A new instance of Recorder.
- #push(events) ⇒ Object
Constructor Details
#initialize(event_classes, max_size, last_flush_time: Time.now.utc) ⇒ Recorder
Returns a new instance of Recorder.
11 12 13 14 15 16 17 18 19 20 21 22 23 |
# 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 |
Instance Attribute Details
#max_size ⇒ Object (readonly)
Returns the value of attribute max_size.
9 10 11 |
# File 'lib/ddtrace/profiling/recorder.rb', line 9 def max_size @max_size end |
Instance Method Details
#[](event_class) ⇒ Object
25 26 27 |
# File 'lib/ddtrace/profiling/recorder.rb', line 25 def [](event_class) @buffers[event_class] end |
#empty? ⇒ Boolean
NOTE: Remember that if the recorder is being accessed by multiple threads, this is an inherently racy operation.
67 68 69 |
# File 'lib/ddtrace/profiling/recorder.rb', line 67 def empty? @buffers.values.all?(&:empty?) end |
#flush ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# 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) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# 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 |