From 227ea783d3598c2bd974cdaf4aac8c255870e264 Mon Sep 17 00:00:00 2001 From: Saku Ytti Date: Mon, 10 Feb 2014 12:26:59 +0200 Subject: Handle exceptions with different log levels --- lib/oxidized/input/input.rb | 18 +++++++++++------- lib/oxidized/input/ssh.rb | 14 +++++++++----- lib/oxidized/input/telnet.rb | 4 ++-- lib/oxidized/node.rb | 25 +++++++++++++++++-------- 4 files changed, 39 insertions(+), 22 deletions(-) (limited to 'lib/oxidized') diff --git a/lib/oxidized/input/input.rb b/lib/oxidized/input/input.rb index d59c4f3..61f4634 100644 --- a/lib/oxidized/input/input.rb +++ b/lib/oxidized/input/input.rb @@ -1,12 +1,16 @@ module Oxidized class Input - RescueFail = [ - Timeout::Error, - Errno::ECONNREFUSED, - Errno::ECONNRESET, - Errno::EHOSTUNREACH, - Errno::EPIPE, - ] + RescueFail = { + :debug => [ + Errno::ECONNREFUSED, + ], + :warn => [ + Timeout::Error, + Errno::ECONNRESET, + Errno::EHOSTUNREACH, + Errno::EPIPE, + ], + } class << self def inherited klass Oxidized.mgr.loader = { :class => klass } diff --git a/lib/oxidized/input/ssh.rb b/lib/oxidized/input/ssh.rb index 3fdaa70..67be180 100644 --- a/lib/oxidized/input/ssh.rb +++ b/lib/oxidized/input/ssh.rb @@ -2,11 +2,15 @@ module Oxidized require 'net/ssh' require 'oxidized/input/cli' class SSH < Input - RescueFail = [ - Net::SSH::Disconnect, - Net::SSH::AuthenticationFailed, - RuntimeError, - ] + RescueFail = { + :debug => [ + Net::SSH::Disconnect, + ], + :warn => [ + RuntimeError, + Net::SSH::AuthenticationFailed, + ], + } include CLI class NoShell < StandardError; end diff --git a/lib/oxidized/input/telnet.rb b/lib/oxidized/input/telnet.rb index 0ae6877..31ed8d0 100644 --- a/lib/oxidized/input/telnet.rb +++ b/lib/oxidized/input/telnet.rb @@ -2,8 +2,8 @@ module Oxidized require 'net/telnet' require 'oxidized/input/cli' class Telnet < Input - RescueFail = [] - include CLI + RescueFail = {} + include CLI attr_reader :telnet def connect node diff --git a/lib/oxidized/node.rb b/lib/oxidized/node.rb index b7dc134..5f09096 100644 --- a/lib/oxidized/node.rb +++ b/lib/oxidized/node.rb @@ -21,9 +21,8 @@ module Oxidized status, config = :fail, nil @input.each do |input| @model.input = input = input.new - if connect input - config = input.get - status = :success if config + if config=run_input(input) + status = :success break else status = :no_connection @@ -32,12 +31,22 @@ module Oxidized [status, config] end - def connect input - rescue_fail = input.class::RescueFail + input.class.superclass::RescueFail + def run_input input + rescue_fail = {} + [input.class::RescueFail, input.class.superclass::RescueFail].each do |hash| + hash.each do |level,errors| + errors.each do |err| + rescue_fail[err] = level + end + end + end begin - input.connect self - rescue *rescue_fail => err - Log.warn '%s raised %s with msg "%s"' % [self.ip, err.class, err.message] + if input.connect self + input.get + end + rescue *rescue_fail.keys.flatten => err + level = rescue_fail[err.class] + Log.send(level, '%s raised %s with msg "%s"' % [self.ip, err.class, err.message]) return false end end -- cgit v1.2.1