class XymonClient::Client
Client
object for interacting with Xymon server(s) Params:
-
servers: array of string 'hostname' or 'hostname:port'
(port default to 1984)
Attributes
retry_count[RW]
retry_interval[RW]
servers[R]
Public Class Methods
new(servers = [], retry_count = 3, retry_interval = 5)
click to toggle source
# File lib/xymonclient.rb, line 18 def initialize(servers = [], retry_count = 3, retry_interval = 5) @servers = \ if servers.empty? XymonClient::ServerDiscovery.find_from_file else _parse_servers(servers) end @retry_count = retry_count @retry_interval = retry_interval end
Public Instance Methods
ack(host, service, duration, message)
click to toggle source
# File lib/xymonclient.rb, line 67 def ack(host, service, duration, message) raise XymonClient::InvalidDuration, duration \ unless XymonClient.valid_duration?(duration) cookies = board(host, service, ['cookie']) @servers.each do |server| next if cookies[server].to_i == -1 _send( server, "xymondack #{cookies[server].to_i} #{duration} #{message}" ) end end
board(host, service, fields = [])
click to toggle source
# File lib/xymonclient.rb, line 56 def board(host, service, fields = []) response = {} @servers.each do |server| response[server] = _send( server, "xymondboard host=#{host} test=#{service} fields=#{fields.join(';')}" ) end response end
disable(host, service, duration, message)
click to toggle source
# File lib/xymonclient.rb, line 40 def disable(host, service, duration, message) raise XymonClient::InvalidDuration, duration \ unless XymonClient.valid_duration?(duration) _send_to_all( "disable #{XymonClient.hostsvc(host, service)} #{duration} #{message}" ) end
drop(host, service = '')
click to toggle source
# File lib/xymonclient.rb, line 52 def drop(host, service = '') _send_to_all("drop #{host} #{service}") end
enable(host, service)
click to toggle source
# File lib/xymonclient.rb, line 48 def enable(host, service) _send_to_all("enable #{XymonClient.hostsvc(host, service)}") end
status(host, service, status, message, lifetime = '30m')
click to toggle source
# File lib/xymonclient.rb, line 29 def status(host, service, status, message, lifetime = '30m') raise XymonClient::InvalidDuration, lifetime \ unless XymonClient.valid_duration?(lifetime) raise XymonClient::InvalidStatus, status \ unless XymonClient.valid_status?(status) _send_to_all( "status+#{lifetime} " \ "#{XymonClient.hostsvc(host, service)} #{status} #{message}" ) end
Private Instance Methods
_parse_servers(servers = [])
click to toggle source
# File lib/xymonclient.rb, line 114 def _parse_servers(servers = []) raise XymonClient::NoXymonServerDefined if servers.empty? servers.map do |server| case server when /[^:]+:[0-9]*/ { host: server.split(':')[0], port: server.split(':')[1].to_i } when /[^:]*/ { host: server, port: 1984 } else raise XymonClient::InvalidServer, server end end end
_send(server, message)
click to toggle source
# File lib/xymonclient.rb, line 105 def _send(server, message) socket = TCPSocket.open(server[:host], server[:port]) socket.puts message socket.close_write socket.gets ensure socket.close if socket end
_send_to_all(message)
click to toggle source
# File lib/xymonclient.rb, line 82 def _send_to_all(message) fail_srv = [] send_result = true @servers.each do |server| retry_count = 0 begin _send(server, message) rescue if retry_count < @retry_count || @retry_count == -1 sleep @retry_interval retry_count += 1 retry else send_result = false fail_srv << server end end end raise XymonClient::SendFailure if fail_srv.count == @servers.count raise XymonClient::PartialSendFailure, fail_srv \ if (1..@servers.count - 1).cover?(fail_srv.count) end