Class: TingYun::Agent::Collector::TransactionSampler::TransactionSampleBufferBase

Inherits:
Object
  • Object
show all
Defined in:
lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb

Direct Known Subclasses

SlowestSampleBuffer

Constant Summary collapse

SINGLE_BUFFER_MAX =
1000
NO_SAMPLES =
[].freeze

Instance Method Summary collapse

Constructor Details

#initializeTransactionSampleBufferBase

Returns a new instance of TransactionSampleBufferBase.



13
14
15
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 13

def initialize
  @samples = []
end

Instance Method Details

#allow_sample?(sample) ⇒ Boolean

If a buffer needs to modify, override this method.

Returns:

  • (Boolean)


18
19
20
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 18

def allow_sample?(sample)
  true
end

#capacityObject

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

Raises:

  • (NotImplementedError)


66
67
68
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 66

def capacity
  raise NotImplementedError.new("TransactionSampleBufferBase subclasses must provide a capacity override")
end

#enabled?Boolean

If a buffer needs to modify, override this method.

Returns:

  • (Boolean)


23
24
25
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 23

def enabled?
  true
end

#full?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 57

def full?
  @samples.length >= max_capacity
end

#harvest_samplesObject



31
32
33
34
35
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 31

def harvest_samples
  @samples
ensure
  reset!
end

#max_capacityObject



70
71
72
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 70

def max_capacity
  capacity > SINGLE_BUFFER_MAX ? SINGLE_BUFFER_MAX : capacity
end

#reset!Object



27
28
29
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 27

def reset!
  @samples = []
end

#store(sample) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 37

def store(sample)
  return unless enabled?
  if allow_sample?(sample)
    add_sample(sample)
    truncate_samples_if_needed
  end
end

#store_previous(previous_samples) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 45

def store_previous(previous_samples)
  return unless enabled?
  previous_samples.each do |sample|
    add_sample(sample) if allow_sample?(sample)
  end
  truncate_samples_if_needed
end

#truncate_samplesObject

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



77
78
79
80
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 77

def truncate_samples
  @samples.sort!{|a,b| a.duration <=> b.duration}
  @samples.slice!(0..-(max_capacity + 1))
end

#truncate_samples_if_neededObject



53
54
55
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 53

def truncate_samples_if_needed
  truncate_samples if full?
end