Module: ActiveMetric::GraphCalculation
- Included in:
- Subject
- Defined in:
- lib/active_metric/behavior/graph_calculation.rb
Constant Summary collapse
- MONGO_MAX_LIMIT =
REQUIRES SUMMARY AND INTERVAL SAMPLES AND SERIES DATA
(1 << 31) - 1
Class Method Summary collapse
Instance Method Summary collapse
- #calculate_data_to_pop(interval_sample) ⇒ Object
- #debug(message) ⇒ Object
- #graph_view_model_starting_at(index) ⇒ Object
- #has_graph_data ⇒ Object
- #initialize_graph_view_model ⇒ Object
- #pop_from_series(data_to_pop) ⇒ Object
- #pop_necessary_samples(interval_sample) ⇒ Object
- #series ⇒ Object
- #start_time ⇒ Object
- #time(sample_time) ⇒ Object
- #update_graph_model(interval_sample) ⇒ Object
Class Method Details
.included(klass) ⇒ Object
6 7 8 9 10 11 12 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 6 def self.included(klass) klass.has_one :graph_view_model, :class_name => "ActiveMetric::GraphViewModel", :autosave => true klass.after_initialize do self.graph_view_model ||= initialize_graph_view_model end end |
Instance Method Details
#calculate_data_to_pop(interval_sample) ⇒ Object
42 43 44 45 46 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 42 def calculate_data_to_pop(interval_sample) incoming_index = interval_sample.sample_index next_index = graph_view_model.size next_index - incoming_index end |
#debug(message) ⇒ Object
73 74 75 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 73 def debug() ActiveMetric.logger.error "DEBUGAM #{self.name} #{}" end |
#graph_view_model_starting_at(index) ⇒ Object
23 24 25 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 23 def graph_view_model_starting_at(index) GraphViewModel.where(subject_id: id).slice("series_data.data" => [index, MONGO_MAX_LIMIT]).first end |
#has_graph_data ⇒ Object
19 20 21 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 19 def has_graph_data true end |
#initialize_graph_view_model ⇒ Object
54 55 56 57 58 59 60 61 62 63 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 54 def initialize_graph_view_model if self.class.sample_type axises_defined = self.class.sample_type.axises_defined stats_defined = self.class.sample_type.stats_defined else axises_defined = [] stats_defined = [] end GraphViewModel.(axises_defined, stats_defined, name: name) end |
#pop_from_series(data_to_pop) ⇒ Object
48 49 50 51 52 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 48 def pop_from_series(data_to_pop) graph_view_model.series_data.each do |series| series.pop_data(data_to_pop) end end |
#pop_necessary_samples(interval_sample) ⇒ Object
37 38 39 40 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 37 def pop_necessary_samples(interval_sample) data_to_pop = calculate_data_to_pop(interval_sample) pop_from_series(data_to_pop) if data_to_pop > 0 end |
#series ⇒ Object
14 15 16 17 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 14 def series return nil unless attributes["series_data"] attributes["series_data"].values end |
#start_time ⇒ Object
69 70 71 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 69 def start_time @start_time ||= summary.start_time end |
#time(sample_time) ⇒ Object
65 66 67 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 65 def time(sample_time) ((sample_time - start_time)).to_i end |
#update_graph_model(interval_sample) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/active_metric/behavior/graph_calculation.rb', line 27 def update_graph_model(interval_sample) pop_necessary_samples(interval_sample) interval_sample.stats.each do |stat| series = graph_view_model.series_for(stat.access_name.to_s) series.push_data([time(interval_sample.), stat.value]) if series && interval_sample. && start_time end self.save! end |