class Senedsa::SendNsca
Constants
- STATUS
Attributes
defaults[RW]
Public Class Methods
configure(cfg_file)
click to toggle source
# File lib/senedsa/send_nsca.rb, line 32 def self.configure(cfg_file) cfg_options = {} unless cfg_file.nil? raise ConfigurationError, "unable to read configuration file #{cfg_file}" unless File.readable? cfg_file begin cfg_options = Psych.load File.open(cfg_file) raise ConfigurationError, "senedsa_config not allowed in configuration file (#{cfg_file})" unless cfg_options[:senedsa_config].nil? rescue Psych::SyntaxError => e raise ConfigurationError, "syntax error in configuration file #{cfg_file}: #{e.message}" rescue Errno::ENOENT, Errno::EACCES => e raise ConfigurationError, e.message end end cfg_options end
new(*args)
click to toggle source
# File lib/senedsa/send_nsca.rb, line 53 def initialize(*args) @options = {} case args.size when 1 if args[0].is_a? String cfg_file = args[0].nil? ? nil : args[0] cfg_options = cfg_file.nil? ? {} : SendNsca.configure(cfg_file) hsh_options = {} elsif args[0].is_a? Hash cfg_file = args[0][:senedsa_config].nil? ? nil : args[0][:senedsa_config] cfg_options = cfg_file.nil? ? {} : SendNsca.configure(cfg_file) hsh_options = args[0] else raise InitializationError, "invalid argument types" end when 2 raise InitializationError, "invalid argument types" unless args[0].is_a? String and args[1].is_a? String cfg_options = SendNsca.configure(@options[:senedsa_config]) hsh_options = { :svc_hostname => args[0], :svc_descr => args[1] } when 3 raise InitializationError, "invalid argument types" unless args[0].is_a? String and args[1].is_a? String and args[2].is_a? Hash cfg_options = SendNsca.configure(args[0][:senedsa_config]) hsh_options = args[2].merge({ :svc_hostname => args[0], :svc_descr => args[1] }) else raise ArgumentError, "wrong number of arguments" end @options = SendNsca.defaults.merge(cfg_options).merge(hsh_options) @options[:svc_hostname] = Socket.gethostname if @options[:svc_hostname].nil? end
Public Instance Methods
inspect()
click to toggle source
# File lib/senedsa/send_nsca.rb, line 122 def inspect @options end
send(*args)
click to toggle source
# File lib/senedsa/send_nsca.rb, line 89 def send(*args) svc_status = nil svc_output = nil case args.size when 0 # svc_status and svc_output should be set on @options raise ArgumentError, "svc_status or svc_output not set" if @options[:svc_status].nil? or @options[:svc_output].nil? svc_status = @options[:status] svc_output = @options[:svc_output] when 2 raise ArgumentError, "invalid svc_status" unless args[0].is_a? Symbol and STATUS.keys.include?(args[0]) raise ArgumentError, "invalid svc_output" unless args[1].is_a? String svc_status = args[0] svc_output = args[1] else raise ArgumentError, "wrong number of arguments" end SendNsca.defaults.each_key do |option| next if [:send_nsca_config, :svc_status, :svc_output].include? option raise ArgumentError, "missing send_nsca option #{option}" if @options[option].nil? end raise ArgumentError, "missing send_nsca svc_status" if @options[:svc_status].nil? raise ArgumentError, "missing send_nsca svc_output" if @options[:svc_output].nil? run @options[:svc_status], @options[:svc_output] end
Private Instance Methods
command()
click to toggle source
# File lib/senedsa/send_nsca.rb, line 128 def command c = "#{send_nsca_binary} -H #{nsca_hostname} -p #{nsca_port} -to #{send_nsca_timeout} -d '#{send_nsca_delim}'" c << " -c #{send_nsca_config}" unless send_nsca_config.nil? c end
run(svc_status,svc_output)
click to toggle source
# File lib/senedsa/send_nsca.rb, line 134 def run(svc_status,svc_output) begin Open3.popen3(command) do |stdin, stdout, stderr, wait_thr| payload = "%s\n" % [svc_hostname,svc_descr,STATUS[svc_status],svc_output].join(send_nsca_delim) stdin.write(payload) stdin.close $stdout.write stdout.gets if STDIN.tty? raise SendNscaError, stderr.gets.chomp unless wait_thr.value.exitstatus == 0 end rescue Errno::ENOENT, Errno::EACCES => e raise SendNscaError, e.message end end