class OneApm::Collector::Samplers::VMSampler
Constants
- OA_CONSTANT_INVALIDATIONS_METRIC
- OA_GC_RUNS_METRIC
- OA_HEAP_FREE_METRIC
- OA_HEAP_LIVE_METRIC
- OA_MAJOR_GC_METRIC
- OA_METHOD_INVALIDATIONS_METRIC
- OA_MINOR_GC_METRIC
- OA_OBJECT_ALLOCATIONS_METRIC
- OA_THREAD_COUNT_METRIC
Attributes
transaction_count[R]
Public Class Methods
new()
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 24 def initialize @lock = Mutex.new @transaction_count = 0 @last_snapshot = take_snapshot end
Public Instance Methods
on_transaction_finished(*_)
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 38 def on_transaction_finished(*_) @lock.synchronize { @transaction_count += 1 } end
poll()
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 105 def poll snap = take_snapshot tcount = reset_transaction_count record_gc_runs_metric(snap, tcount) record_delta(snap, :total_allocated_object, OA_OBJECT_ALLOCATIONS_METRIC, tcount) record_delta(snap, :major_gc_count, OA_MAJOR_GC_METRIC, tcount) record_delta(snap, :minor_gc_count, OA_MINOR_GC_METRIC, tcount) record_delta(snap, :method_cache_invalidations, OA_METHOD_INVALIDATIONS_METRIC, tcount) record_delta(snap, :constant_cache_invalidations, OA_CONSTANT_INVALIDATIONS_METRIC, tcount) record_heap_live_metric(snap) record_heap_free_metric(snap) record_thread_count_metric(snap) @last_snapshot = snap end
record_delta(snapshot, key, metric, txn_count)
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 69 def record_delta(snapshot, key, metric, txn_count) value = snapshot.send(key) if value delta = value - @last_snapshot.send(key) OneApm::Manager.agent.stats_engine.tl_record_unscoped_metrics(metric) do |stats| stats.call_count += txn_count stats.total_call_time += delta end end end
record_gauge_metric(metric_name, value)
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 80 def record_gauge_metric(metric_name, value) OneApm::Manager.agent.stats_engine.tl_record_unscoped_metrics(metric_name) do |stats| stats.call_count = value stats.sum_of_squares = 1 end end
record_gc_runs_metric(snapshot, txn_count)
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 50 def record_gc_runs_metric(snapshot, txn_count) if snapshot.gc_total_time || snapshot.gc_runs if snapshot.gc_total_time gc_time = snapshot.gc_total_time - @last_snapshot.gc_total_time.to_f end if snapshot.gc_runs gc_runs = snapshot.gc_runs - @last_snapshot.gc_runs end wall_clock_time = snapshot.taken_at - @last_snapshot.taken_at OneApm::Manager.agent.stats_engine.tl_record_unscoped_metrics(OA_GC_RUNS_METRIC) do |stats| stats.call_count += txn_count stats.total_call_time += gc_runs if gc_runs stats.total_exclusive_time += gc_time if gc_time stats.max_call_time = (gc_time.nil? ? 0 : 1) stats.sum_of_squares += wall_clock_time end end end
record_heap_free_metric(snapshot)
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 93 def record_heap_free_metric(snapshot) if snapshot.heap_free record_gauge_metric(OA_HEAP_FREE_METRIC, snapshot.heap_free) end end
record_heap_live_metric(snapshot)
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 87 def record_heap_live_metric(snapshot) if snapshot.heap_live record_gauge_metric(OA_HEAP_LIVE_METRIC, snapshot.heap_live) end end
record_thread_count_metric(snapshot)
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 99 def record_thread_count_metric(snapshot) if snapshot.thread_count record_gauge_metric(OA_THREAD_COUNT_METRIC, snapshot.thread_count) end end
reset_transaction_count()
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 42 def reset_transaction_count @lock.synchronize do old_count = @transaction_count @transaction_count = 0 old_count end end
setup_events(event_listener)
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 34 def setup_events(event_listener) event_listener.subscribe(:transaction_finished, &method(:on_transaction_finished)) end
take_snapshot()
click to toggle source
# File lib/one_apm/collector/samplers/vm_sampler.rb, line 30 def take_snapshot OneApm::Support::VM.snapshot end