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
Returns a new instance of 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 |