Class: God::Conditions::Flapping
- Inherits:
-
TriggerCondition
- Object
- Behavior
- God::Condition
- TriggerCondition
- God::Conditions::Flapping
- Defined in:
- lib/god/conditions/flapping.rb
Overview
Condition Symbol :flapping Type: Trigger
Trigger when a Task transitions to or from a state or states a given number of times within a given period.
Paramaters
Required
times is the number of times that the Task must transition before
triggering.
within is the number of seconds within which the Task must transition
the specified number of times before triggering. You may use
the sugar methods #seconds, #minutes, #hours, #days to clarify
your code (see examples).
--one or both of--
from_state is the state (as a Symbol) from which the transition must occur.
+to_state is the state (as a Symbol) to which the transition must occur.
Optional:
+retry_in+ is the number of seconds after which to re-monitor the Task after
it has been disabled by the condition.
+retry_times+ is the number of times after which to permanently unmonitor
the Task.
+retry_within+ is the number of seconds within which
Examples
Trigger if
Instance Attribute Summary collapse
-
#from_state ⇒ Object
Returns the value of attribute from_state.
-
#retry_in ⇒ Object
Returns the value of attribute retry_in.
-
#retry_times ⇒ Object
Returns the value of attribute retry_times.
-
#retry_within ⇒ Object
Returns the value of attribute retry_within.
-
#times ⇒ Object
Returns the value of attribute times.
-
#to_state ⇒ Object
Returns the value of attribute to_state.
-
#within ⇒ Object
Returns the value of attribute within.
Attributes inherited from God::Condition
#info, #notify, #phase, #transition
Attributes inherited from Behavior
Instance Method Summary collapse
-
#initialize ⇒ Flapping
constructor
A new instance of Flapping.
- #prepare ⇒ Object
- #process(event, payload) ⇒ Object
- #valid? ⇒ Boolean
Methods inherited from TriggerCondition
#deregister, #register, #trigger
Methods inherited from God::Condition
#friendly_name, generate, valid?
Methods inherited from Behavior
#after_restart, #after_start, #after_stop, #before_restart, #before_start, #before_stop, #friendly_name, generate
Methods included from God::Configurable
#base_name, #complain, complain, #friendly_name, #reset
Constructor Details
#initialize ⇒ Flapping
41 42 43 |
# File 'lib/god/conditions/flapping.rb', line 41 def initialize self.info = "process is flapping" end |
Instance Attribute Details
#from_state ⇒ Object
Returns the value of attribute from_state.
33 34 35 |
# File 'lib/god/conditions/flapping.rb', line 33 def from_state @from_state end |
#retry_in ⇒ Object
Returns the value of attribute retry_in.
33 34 35 |
# File 'lib/god/conditions/flapping.rb', line 33 def retry_in @retry_in end |
#retry_times ⇒ Object
Returns the value of attribute retry_times.
33 34 35 |
# File 'lib/god/conditions/flapping.rb', line 33 def retry_times @retry_times end |
#retry_within ⇒ Object
Returns the value of attribute retry_within.
33 34 35 |
# File 'lib/god/conditions/flapping.rb', line 33 def retry_within @retry_within end |
#times ⇒ Object
Returns the value of attribute times.
33 34 35 |
# File 'lib/god/conditions/flapping.rb', line 33 def times @times end |
#to_state ⇒ Object
Returns the value of attribute to_state.
33 34 35 |
# File 'lib/god/conditions/flapping.rb', line 33 def to_state @to_state end |
#within ⇒ Object
Returns the value of attribute within.
33 34 35 |
# File 'lib/god/conditions/flapping.rb', line 33 def within @within end |
Instance Method Details
#prepare ⇒ Object
45 46 47 48 |
# File 'lib/god/conditions/flapping.rb', line 45 def prepare @timeline = Timeline.new(self.times) @retry_timeline = Timeline.new(self.retry_times) end |
#process(event, payload) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/god/conditions/flapping.rb', line 58 def process(event, payload) begin if event == :state_change event_from_state, event_to_state = *payload from_state_match = !self.from_state || self.from_state && Array(self.from_state).include?(event_from_state) to_state_match = !self.to_state || self.to_state && Array(self.to_state).include?(event_to_state) if from_state_match && to_state_match @timeline << Time.now concensus = (@timeline.size == self.times) duration = (@timeline.last - @timeline.first) < self.within if concensus && duration @timeline.clear trigger retry_mechanism end end end rescue => e puts e. puts e.backtrace.join("\n") end end |
#valid? ⇒ Boolean
50 51 52 53 54 55 56 |
# File 'lib/god/conditions/flapping.rb', line 50 def valid? valid = true valid &= complain("Attribute 'times' must be specified", self) if self.times.nil? valid &= complain("Attribute 'within' must be specified", self) if self.within.nil? valid &= complain("Attributes 'from_state', 'to_state', or both must be specified", self) if self.from_state.nil? && self.to_state.nil? valid end |