class TingYun::Agent::Collector::TransactionSampler::TransactionSampleBufferBase

Constants

NO_SAMPLES
SINGLE_BUFFER_MAX

Public Class Methods

new() click to toggle source
# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 13
def initialize
  @samples = []
end

Public Instance Methods

allow_sample?(sample) click to toggle source

If a buffer needs to modify, override this method.

# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 18
def allow_sample?(sample)
  true
end
capacity() click to toggle source

Capacity is the desired number of samples a buffer will hold. This can be user dictated via config if a feature wants.

This value will be forcibly capped by the max_capacity

# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 79
def capacity
  raise NotImplementedError.new("TransactionSampleBufferBase subclasses must provide a capacity override")
end
enabled?() click to toggle source

If a buffer needs to modify, override this method.

# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 23
def enabled?
  true
end
full?() click to toggle source
# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 70
def full?
  @samples.length >= max_capacity
end
harvest_samples() click to toggle source
# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 31
def harvest_samples
  @samples
ensure
  reset!
end
max_capacity() click to toggle source
# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 83
def max_capacity
  capacity > SINGLE_BUFFER_MAX ? SINGLE_BUFFER_MAX : capacity
end
reset!() click to toggle source
# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 27
def reset!
  @samples = []
end
store(sample) click to toggle source
# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 45
def store(sample)
  return unless enabled?
  add_sample(sample)
end
storeV2(sample) click to toggle source
# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 37
def storeV2(sample)
  return unless enabled?
  if allow_sample?(sample)
    add_sample(sample)
    truncate_samples_if_needed
  end
end
store_previous(previous_samples) click to toggle source
# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 58
def store_previous(previous_samples)
  return unless enabled?
  previous_samples.each do |sample|
    add_sample(sample)
  end
end
store_previousV2(previous_samples) click to toggle source
# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 50
def store_previousV2(previous_samples)
  return unless enabled?
  previous_samples.each do |sample|
    add_sample(sample) if allow_sample?(sample)
  end
  truncate_samples_if_needed
end
truncate_samples() click to toggle source

Our default truncation strategy is to keep max_capacity worth of the longest samples. Override this method for alternate behavior.

# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 90
def truncate_samples
  @samples.sort!{|a,b| a.duration <=> b.duration}
  @samples.slice!(0..-(max_capacity + 1))
end
truncate_samples_if_needed() click to toggle source
# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 66
def truncate_samples_if_needed
  truncate_samples if full?
end

Private Instance Methods

add_sample(sample) click to toggle source

If a buffer needs to modify an added sample, override this method. Bounds checking, allowing samples and truncation belongs elsewhere.

# File lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb, line 100
def add_sample(sample)
  @samples << sample
end