class God::Conditions::SocketResponding
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.port = '/tmp/sock'
end
Attributes
addr[RW]
family[RW]
path[RW]
port[RW]
responding[RW]
times[RW]
Public Class Methods
new()
click to toggle source
Calls superclass method
# 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
Public Instance Methods
prepare()
click to toggle source
# 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()
click to toggle source
# File lib/god/conditions/socket_responding.rb, line 83 def reset @timeline.clear @history.clear end
socket=(s)
click to toggle source
# 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()
click to toggle source
# 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?()
click to toggle source
# 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