Class: ActiveMetric::Sample

Inherits:
Object
  • Object
show all
Includes:
Mongoid::Document
Defined in:
lib/active_metric/sample.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attr = nil, options = nil, measurement = nil, index = 0) ⇒ Sample

Returns a new instance of Sample.



20
21
22
23
24
25
26
27
28
# File 'lib/active_metric/sample.rb', line 20

def initialize(attr = nil, options = nil, measurement = nil, index = 0)
  @seed_measurement = measurement
  @latest_measurement = nil
  super(attr, options)
  self.sample_index = index
  if stats.empty?
    self.stats = self.class.stats_defined.map(&:create_stat)
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object



30
31
32
33
# File 'lib/active_metric/sample.rb', line 30

def method_missing(method, *args)
  self.class.send(:define_method, method.to_sym) { get_stat_by_name(method) }
  get_stat_by_name(method)
end

Instance Attribute Details

#latest_measurementObject

Returns the value of attribute latest_measurement.



10
11
12
# File 'lib/active_metric/sample.rb', line 10

def latest_measurement
  @latest_measurement
end

#seed_measurementObject

Returns the value of attribute seed_measurement.



10
11
12
# File 'lib/active_metric/sample.rb', line 10

def seed_measurement
  @seed_measurement
end

Instance Method Details

#calculate(measurement) ⇒ Object



35
36
37
38
39
40
# File 'lib/active_metric/sample.rb', line 35

def calculate(measurement)
  set_start_time(measurement)
  @latest_measurement = measurement
  update_time(measurement)
  update_stats(measurement)
end

#completeObject



42
43
44
45
46
47
# File 'lib/active_metric/sample.rb', line 42

def complete
  return false if measurement_count < 1
  self.stats.each do |statistic|
    statistic.complete
  end
end

#duration_from_previous_sample_in_secondsObject



54
55
56
57
# File 'lib/active_metric/sample.rb', line 54

def duration_from_previous_sample_in_seconds
  return duration_in_seconds unless seed_measurement
  end_time - seed_measurement.timestamp
end

#duration_in_secondsObject



49
50
51
52
# File 'lib/active_metric/sample.rb', line 49

def duration_in_seconds
  return end_time - start_time if end_time && start_time
  return 0
end

#get_stat_by_name(name_of_stat) ⇒ Object



59
60
61
# File 'lib/active_metric/sample.rb', line 59

def get_stat_by_name(name_of_stat)
  stats_by_name[name_of_stat] || raw_stat
end

#is_summary?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/active_metric/sample.rb', line 67

def is_summary?
  !interval
end

#new_sampleObject



77
78
79
# File 'lib/active_metric/sample.rb', line 77

def new_sample
  self.class.new({:samplable => self.samplable, :interval => interval}, {}, @latest_measurement, sample_index + 1)
end

#stats_by_nameObject



63
64
65
# File 'lib/active_metric/sample.rb', line 63

def stats_by_name
  @stats_by_name ||= generate_stats_by_name
end

#within_interval?(measurement) ⇒ Boolean

Returns:

  • (Boolean)


71
72
73
74
75
# File 'lib/active_metric/sample.rb', line 71

def within_interval?(measurement)
  return true if is_summary?
  return true unless self.start_time
  (measurement.timestamp - self.start_time) < self.interval
end