Class: Flapjack::Processor

Inherits:
Object
  • Object
show all
Includes:
Utility
Defined in:
lib/flapjack/processor.rb

Instance Method Summary collapse

Methods included from Utility

#hashify, #load_template, #local_timezone, #relative_time_ago, #remove_utc_offset, #stringify, #symbolize, #time_period_in_words, #truncate

Constructor Details

#initialize(opts = {}) ⇒ Processor

Returns a new instance of Processor.



27
28
29
30
31
32
33
34
35
36
37
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/flapjack/processor.rb', line 27

def initialize(opts = {})
  @lock = opts[:lock]

  @config = opts[:config]

  @boot_time = opts[:boot_time]

  @queue = @config['queue'] || 'events'

  @initial_failure_delay = @config['initial_failure_delay']
  if !@initial_failure_delay.is_a?(Integer) || (@initial_failure_delay < 0)
    @initial_failure_delay = nil
  end

  @repeat_failure_delay = @config['repeat_failure_delay']
  if !@repeat_failure_delay.is_a?(Integer) || (@repeat_failure_delay < 0)
    @repeat_failure_delay = nil
  end

  @initial_recovery_delay = @config['initial_recovery_delay']
  if !@initial_recovery_delay.is_a?(Integer) || (@initial_recovery_delay < 0)
    @initial_recovery_delay = nil
  end

  @notifier_queue = Flapjack::RecordQueue.new(@config['notifier_queue'] || 'notifications',
             Flapjack::Data::Notification)

  @archive_events        = @config['archive_events'] || false
  @events_archive_maxage = @config['events_archive_maxage']

  ncsm_duration_conf = @config['new_check_scheduled_maintenance_duration'] || '100 years'
  @ncsm_duration = ChronicDuration.parse(ncsm_duration_conf, :keep_zero => true)

  ncsm_ignore = @config['new_check_scheduled_maintenance_ignore_regex']
  @ncsm_ignore_regex = if ncsm_ignore.nil? || ncsm_ignore.strip.empty?
    nil
  else
    Regexp.new(ncsm_ignore)
  end

  @exit_on_queue_empty = !!@config['exit_on_queue_empty']

  @filters = [Flapjack::Filters::Ok.new,
              Flapjack::Filters::ScheduledMaintenance.new,
              Flapjack::Filters::UnscheduledMaintenance.new,
              Flapjack::Filters::Delays.new,
              Flapjack::Filters::Acknowledgement.new]

  fqdn          = `/bin/hostname -f`.chomp
  pid           = Process.pid
  @instance_id  = "#{fqdn}:#{pid}"
end

Instance Method Details

#startObject



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/flapjack/processor.rb', line 99

def start
  Flapjack.logger.info("Booting main loop.")

  begin
    Zermelo.redis = Flapjack.redis

    start_stats

    queue = (@config['queue'] || 'events')

    loop do
      @lock.synchronize do
        foreach_on_queue(queue) {|event| process_event(event)}
      end

      raise Flapjack::GlobalStop if @exit_on_queue_empty

      wait_for_queue(queue)
    end

  ensure
    @instance_stats.destroy unless @instance_stats.nil? || !@instance_stats.persisted?
    Flapjack.redis.quit
  end
end

#start_statsObject



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/flapjack/processor.rb', line 80

def start_stats
  empty_stats = {:created_at => @boot_time, :all_events => 0,
    :ok_events => 0, :failure_events => 0, :action_events => 0,
    :invalid_events => 0}

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

  if @global_stats.nil?
    @global_stats = Flapjack::Data::Statistic.new(empty_stats.merge(
      :instance_name => 'global'))
    @global_stats.save!
  end

  @instance_stats = Flapjack::Data::Statistic.new(empty_stats.merge(
    :instance_name => @instance_id))
  @instance_stats.save!
end

#stop_typeObject



125
126
127
# File 'lib/flapjack/processor.rb', line 125

def stop_type
  :exception
end