Class: TingYun::Agent::Collector::TransactionSampler::TransactionSampleBufferBase
- Inherits:
-
Object
- Object
- TingYun::Agent::Collector::TransactionSampler::TransactionSampleBufferBase
- Defined in:
- lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb
Direct Known Subclasses
Constant Summary collapse
- SINGLE_BUFFER_MAX =
1000
- NO_SAMPLES =
[].freeze
Instance Method Summary collapse
-
#allow_sample?(sample) ⇒ Boolean
If a buffer needs to modify, override this method.
-
#capacity ⇒ Object
Capacity is the desired number of samples a buffer will hold.
-
#enabled? ⇒ Boolean
If a buffer needs to modify, override this method.
- #full? ⇒ Boolean
- #harvest_samples ⇒ Object
-
#initialize ⇒ TransactionSampleBufferBase
constructor
A new instance of TransactionSampleBufferBase.
- #max_capacity ⇒ Object
- #reset! ⇒ Object
- #store(sample) ⇒ Object
- #store_previous(previous_samples) ⇒ Object
- #store_previousV2(previous_samples) ⇒ Object
- #storeV2(sample) ⇒ Object
-
#truncate_samples ⇒ Object
Our default truncation strategy is to keep max_capacity worth of the longest samples.
- #truncate_samples_if_needed ⇒ Object
Constructor Details
#initialize ⇒ TransactionSampleBufferBase
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.
18 19 20 |
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 18 def allow_sample?(sample) true end |
#capacity ⇒ Object
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
79 80 81 |
# 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? ⇒ Boolean
If a buffer needs to modify, override this method.
23 24 25 |
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 23 def enabled? true end |
#full? ⇒ Boolean
70 71 72 |
# File 'lib/ting_yun/agent/collector/transaction_sampler/transaction_sample_buffer_base.rb', line 70 def full? @samples.length >= max_capacity end |
#harvest_samples ⇒ Object
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_capacity ⇒ Object
83 84 85 |
# 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! ⇒ 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
45 46 47 48 |
# 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 |
#store_previous(previous_samples) ⇒ Object
58 59 60 61 62 63 |
# 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) ⇒ Object
50 51 52 53 54 55 56 |
# 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 |
#storeV2(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 storeV2(sample) return unless enabled? if allow_sample?(sample) add_sample(sample) truncate_samples_if_needed end end |
#truncate_samples ⇒ Object
Our default truncation strategy is to keep max_capacity worth of the longest samples. Override this method for alternate behavior.
90 91 92 93 |
# 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 ⇒ Object
66 67 68 |
# 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 |