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

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(message)
  ActiveMetric.logger.error "DEBUGAM #{self.name} #{message}"
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_dataObject



19
20
21
# File 'lib/active_metric/behavior/graph_calculation.rb', line 19

def has_graph_data
  true
end

#initialize_graph_view_modelObject



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

#seriesObject



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_timeObject



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.timestamp), stat.value]) if series && interval_sample.timestamp && start_time
  end

  self.save!
end