Class: Flapjack::Data::Metrics

Inherits:
Object
  • Object
show all
Extended by:
ActiveModel::Naming
Includes:
Extensions::ShortName, Swagger::Blocks
Defined in:
lib/flapjack/data/metrics.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.jsonapi_associationsObject



189
190
191
# File 'lib/flapjack/data/metrics.rb', line 189

def self.jsonapi_associations
  @jsonapi_associations ||= {}
end

.jsonapi_methodsObject



179
180
181
182
183
184
185
186
187
# File 'lib/flapjack/data/metrics.rb', line 179

def self.jsonapi_methods
  @jsonapi_methods ||= {
    :get => Flapjack::Gateways::JSONAPI::Data::MethodDescriptor.new(
      :attributes => [:total_keys, :processed_events, :event_queue_length,
                      :check_freshness, :check_counts],
      :description => "Get global metrics and event counter values."
    )
  }
end

.swagger_included_classesObject



174
175
176
177
# File 'lib/flapjack/data/metrics.rb', line 174

def self.swagger_included_classes
  # hack -- hardcoding for now
  []
end

Instance Method Details

#check_countsObject



64
65
66
67
68
69
70
# File 'lib/flapjack/data/metrics.rb', line 64

def check_counts
  {
    :all     => Flapjack::Data::Check.count,
    :enabled => Flapjack::Data::Check.intersect(:enabled => true).count,
    :failing => Flapjack::Data::Check.intersect(:failing => true).count
  }
end

#check_freshnessObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/flapjack/data/metrics.rb', line 38

def check_freshness
  ages = [0, 60, 300, 900, 3600]

  start_time = Time.now

  current_checks = Flapjack::Data::Check.intersect(:enabled => true).all

  skeleton = {}
  ages.each {|a| skeleton[a] = 0 }
  age_ranges = ages.reverse.each_cons(2)

  current_checks.each_with_object(skeleton) do |check, memo|
    current_state = check.current_state
    last_update = current_state.nil? ? nil : current_state.updated_at
    next if last_update.nil?
    check_age = start_time - last_update
    check_age = 0 unless check_age > 0
    if check_age >= ages.last
      memo[ages.last] += 1
    else
      age_range = age_ranges.detect {|a, b| (check_age < a) && (check_age >= b) }
      memo[age_range.last] += 1 unless age_range.nil?
    end
  end
end

#event_queue_lengthObject



23
24
25
# File 'lib/flapjack/data/metrics.rb', line 23

def event_queue_length
  Flapjack.redis.llen('events')
end

#processed_eventsObject



27
28
29
30
31
32
33
34
35
36
# File 'lib/flapjack/data/metrics.rb', line 27

def processed_events
  global_stats = Flapjack::Data::Statistic.
    intersect(:instance_name => 'global').all.first

  [:all_events, :ok_events, :failure_events, :action_events,
   :invalid_events].each_with_object({}) do |event_type, memo|

    memo[event_type] = global_stats.nil? ? 0 : global_stats.send(event_type)
  end
end

#total_keysObject



19
20
21
# File 'lib/flapjack/data/metrics.rb', line 19

def total_keys
  Flapjack.redis.dbsize
end