class Flapjack::CLI::Simulate
Public Class Methods
new(global_options, options)
click to toggle source
# File lib/flapjack/cli/simulate.rb, line 12 def initialize(global_options, options) @global_options = global_options @options = options if @global_options[:'force-utf8'] Encoding.default_external = 'UTF-8' Encoding.default_internal = 'UTF-8' end config = Flapjack::Configuration.new config.load(global_options[:config]) @config_env = config.all if @config_env.nil? || @config_env.empty? exit_now! "No config data found in '#{global_options[:config]}'" end Flapjack::RedisProxy.config = config.for_redis Zermelo.redis = Flapjack.redis end
Public Instance Methods
_fail()
click to toggle source
# File lib/flapjack/cli/simulate.rb, line 33 def _fail events(:state => @options[:state], :recover => false, :check => @options[:check], :minutes => @options[:time].to_f, :interval => @options[:interval].to_f) end
fail_and_recover()
click to toggle source
# File lib/flapjack/cli/simulate.rb, line 39 def fail_and_recover events(:state => @options[:state], :recover => true, :check => @options[:check], :minutes => @options[:time].to_f, :interval => @options[:interval].to_f) end
ok()
click to toggle source
# File lib/flapjack/cli/simulate.rb, line 45 def ok events(:state => 'ok', :recover => false, :check => @options[:check], :minutes => @options[:time].to_f, :interval => @options[:interval].to_f) end
Private Instance Methods
events(opts = {})
click to toggle source
# File lib/flapjack/cli/simulate.rb, line 53 def events(opts = {}) stop_after = (opts[:minutes] * 60).to_i recover = opts[:recover] state = opts[:state] || 'critical' event = { 'check' => opts[:check] || 'HTTP', 'type' => 'service' } failure = event.merge('state' => state, 'summary' => 'Simulated check output (test by operator)') recovery = event.merge('state' => 'ok', 'summary' => 'Simulated check output (test by operator)') key = event['check'] lock = Monitor.new stop_cond = lock.new_cond @finish = false failer = Thread.new do fin = nil loop do lock.synchronize do unless fin = @finish puts "#{Time.now}: sending failure event (#{state}) for #{key}" Flapjack::Data::Event.push('events', failure.merge('time' => Time.now.to_i)) stop_cond.wait(opts[:interval]) end end break if fin end end stopper = Thread.new do sleep stop_after lock.synchronize do puts "#{Time.now}: stopping" if recover puts "#{Time.now}: sending recovery event for #{key}" Flapjack::Data::Event.push('events', recovery.merge('time' => Time.now.to_i)) end @finish = true stop_cond.signal end end stopper.join failer.join Flapjack.redis.quit end