class DataStore::AverageCalculator
Constants
- TIMESTAMP_CORRECTION_FACTOR
Attributes
base[R]
identifier[R]
table[R]
table_index[R]
Public Class Methods
new(table)
click to toggle source
# File lib/data_store/average_calculator.rb, line 9 def initialize(table) @table = table @identifier = table.identifier @table_index = table.table_index @base = Base.find(identifier: identifier) end
Public Instance Methods
perform()
click to toggle source
Calculate average value if needed Average value is store through an add call by a Table
object So the average calculator is called again recursively
# File lib/data_store/average_calculator.rb, line 19 def perform if calculation_needed? average = previous_average_record ? calculate! : dataset.avg(:value) table.add(average, table_index: table_index + 1, created: last[:created], type: :gauge) end end
Private Instance Methods
calculate!()
click to toggle source
# File lib/data_store/average_calculator.rb, line 28 def calculate! last_time = previous_average_record[:created] + TIMESTAMP_CORRECTION_FACTOR dataset.where{created > last_time}.avg(:value) end
calculation_needed?()
click to toggle source
# File lib/data_store/average_calculator.rb, line 33 def calculation_needed? return false if compression_finished if previous_average_record tolerance = DataStore.configuration.frequency_tolerance time_difference_since_last_calculation >= (time_resolution - (time_resolution * tolerance)) else dataset.count >= base.compression_schema[table_index] end end
compression_factors()
click to toggle source
# File lib/data_store/average_calculator.rb, line 51 def compression_factors array, factor = [], 1 base.compression_schema.each do |compression| factor = (factor * compression) array << factor end array end
compression_finished()
click to toggle source
# File lib/data_store/average_calculator.rb, line 64 def compression_finished table_index == base.compression_schema.size end
dataset()
click to toggle source
# File lib/data_store/average_calculator.rb, line 72 def dataset base.db[table_name] end
last()
click to toggle source
# File lib/data_store/average_calculator.rb, line 68 def last dataset.order(:created).last end
next_table()
click to toggle source
# File lib/data_store/average_calculator.rb, line 84 def next_table (prefix + compression_factors[table_index].to_s).to_sym end
prefix()
click to toggle source
# File lib/data_store/average_calculator.rb, line 88 def prefix DataStore.configuration.prefix + identifier.to_s + '_' end
previous_average_record()
click to toggle source
# File lib/data_store/average_calculator.rb, line 60 def previous_average_record base.db[next_table].order(:created).last end
table_name()
click to toggle source
# File lib/data_store/average_calculator.rb, line 76 def table_name if table_index == 0 prefix.chop.to_sym else (prefix + compression_factors[table_index - 1].to_s).to_sym end end
time_difference_since_last_calculation()
click to toggle source
# File lib/data_store/average_calculator.rb, line 43 def time_difference_since_last_calculation last[:created].round - previous_average_record[:created].round end
time_resolution()
click to toggle source
# File lib/data_store/average_calculator.rb, line 47 def time_resolution table.parent.frequency * compression_factors[table_index] end