class Bluepill::Triggers::Flapping
Constants
- PARAMS
- TRIGGER_STATES
Attributes
timeline[R]
Public Class Methods
new(process, options = {})
click to toggle source
Calls superclass method
Bluepill::Trigger::new
# File lib/bluepill/triggers/flapping.rb, line 11 def initialize(process, options = {}) options.reverse_merge!(times: 5, within: 1, retry_in: 5) options.each_pair do |name, val| instance_variable_set("@#{name}", val) if PARAMS.include?(name) end @timeline = Util::RotationalArray.new(@times) super end
Public Instance Methods
check_flapping()
click to toggle source
# File lib/bluepill/triggers/flapping.rb, line 33 def check_flapping # The process has not flapped if we haven't encountered enough incidents return unless @timeline.compact.length == times # Check if the incident happend within the timeframe return unless @timeline.last - @timeline.first <= within logger.info "Flapping detected: retrying in #{retry_in} seconds" schedule_event(:start, retry_in) unless retry_in.zero? # retry_in zero means "do not retry, ever" schedule_event(:unmonitor, 0) @timeline.clear # This will prevent a transition from happening in the process state_machine throw :halt end
notify(transition)
click to toggle source
# File lib/bluepill/triggers/flapping.rb, line 22 def notify(transition) return unless TRIGGER_STATES.include?(transition.to_name) timeline << Time.now.to_i check_flapping end
reset!()
click to toggle source
Calls superclass method
Bluepill::Trigger#reset!
# File lib/bluepill/triggers/flapping.rb, line 28 def reset! @timeline.clear super end