Class: God::Conditions::SocketResponding
- Inherits:
-
PollCondition
- Object
- Behavior
- God::Condition
- PollCondition
- God::Conditions::SocketResponding
- Defined in:
- lib/god/conditions/socket_responding.rb
Overview
Condition Symbol :socket_running Type: Poll
Trigger when a TCP or UNIX socket is running or not
Parameters Required
+family+ is the family of socket: either 'tcp' or 'unix'
--one of port or path--
+port+ is the port (required if +family+ is 'tcp')
+path+ is the path (required if +family+ is 'unix')
Optional
+responding+ is the boolean specifying whether you want to trigger if the socket is responding (true)
or if it is not responding (false) (default false)
Examples
Trigger if the TCP socket on port 80 is not responding or the connection is refused
on.condition(:socket_responding) do |c|
c.family = 'tcp'
c.port = '80'
end
Trigger if the socket is not responding or the connection is refused (use alternate compact socket
interface)
on.condition(:socket_responding) do |c|
c.socket = 'tcp:80'
end
Trigger if the socket is responding
on.condition(:socket_responding) do |c|
c.socket = 'tcp:80'
c.responding = true
end
Trigger if the socket is not responding or the connection is refused 5 times in a row
on.condition(:socket_responding) do |c|
c.socket = 'tcp:80'
c.times = 5
end
Trigger if the Unix socket on path ‘/tmp/sock’ is not responding or non-existent
on.condition(:socket_responding) do |c|
c.family = 'unix'
c.path = '/tmp/sock'
end
Instance Attribute Summary collapse
-
#addr ⇒ Object
Returns the value of attribute addr.
-
#family ⇒ Object
Returns the value of attribute family.
-
#path ⇒ Object
Returns the value of attribute path.
-
#port ⇒ Object
Returns the value of attribute port.
-
#responding ⇒ Object
Returns the value of attribute responding.
-
#times ⇒ Object
Returns the value of attribute times.
Attributes inherited from PollCondition
Attributes inherited from God::Condition
#info, #notify, #phase, #transition
Attributes inherited from Behavior
Instance Method Summary collapse
-
#initialize ⇒ SocketResponding
constructor
A new instance of SocketResponding.
- #prepare ⇒ Object
- #reset ⇒ Object
- #socket=(s) ⇒ Object
- #test ⇒ Object
- #valid? ⇒ Boolean
Methods inherited from PollCondition
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
Constructor Details
#initialize ⇒ SocketResponding
Returns a new instance of SocketResponding.
61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/god/conditions/socket_responding.rb', line 61 def initialize super # default to tcp on the localhost self.family = 'tcp' self.addr = '127.0.0.1' # Set these to nil/0 values self.port = 0 self.path = nil self.responding = false self.times = [1, 1] end |
Instance Attribute Details
#addr ⇒ Object
Returns the value of attribute addr.
59 60 61 |
# File 'lib/god/conditions/socket_responding.rb', line 59 def addr @addr end |
#family ⇒ Object
Returns the value of attribute family.
59 60 61 |
# File 'lib/god/conditions/socket_responding.rb', line 59 def family @family end |
#path ⇒ Object
Returns the value of attribute path.
59 60 61 |
# File 'lib/god/conditions/socket_responding.rb', line 59 def path @path end |
#port ⇒ Object
Returns the value of attribute port.
59 60 61 |
# File 'lib/god/conditions/socket_responding.rb', line 59 def port @port end |
#responding ⇒ Object
Returns the value of attribute responding.
59 60 61 |
# File 'lib/god/conditions/socket_responding.rb', line 59 def responding @responding end |
#times ⇒ Object
Returns the value of attribute times.
59 60 61 |
# File 'lib/god/conditions/socket_responding.rb', line 59 def times @times end |
Instance Method Details
#prepare ⇒ Object
74 75 76 77 78 79 80 81 |
# File 'lib/god/conditions/socket_responding.rb', line 74 def prepare if self.times.kind_of?(Integer) self.times = [self.times, self.times] end @timeline = Timeline.new(self.times[1]) @history = Timeline.new(self.times[1]) end |
#reset ⇒ Object
83 84 85 86 |
# File 'lib/god/conditions/socket_responding.rb', line 83 def reset @timeline.clear @history.clear end |
#socket=(s) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/god/conditions/socket_responding.rb', line 88 def socket=(s) components = s.split(':') if components.size == 3 @family,@addr,@port = components @port = @port.to_i elsif components[0] =~ /^tcp$/ @family = components[0] @port = components[1].to_i elsif components[0] =~ /^unix$/ @family = components[0] @path = components[1] end end |
#test ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/god/conditions/socket_responding.rb', line 114 def test self.info = [] if self.family == 'tcp' begin s = TCPSocket.new(self.addr, self.port) rescue SystemCallError end status = self.responding == !s.nil? elsif self.family == 'unix' begin s = UNIXSocket.new(self.path) rescue SystemCallError end status = self.responding == !s.nil? else status = false end @timeline.push(status) history = "[" + @timeline.map {|t| t ? '*' : ''}.join(',') + "]" if @timeline.select { |x| x }.size >= self.times.first self.info = "socket out of bounds #{history}" return true else return false end end |
#valid? ⇒ Boolean
102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/god/conditions/socket_responding.rb', line 102 def valid? valid = true if self.family == 'tcp' and @port == 0 valid &= complain("Attribute 'port' must be specified for tcp sockets", self) end if self.family == 'unix' and self.path.nil? valid &= complain("Attribute 'path' must be specified for unix sockets", self) end valid = false unless %w{tcp unix}.member?(self.family) valid end |