summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSaku Ytti <saku@ytti.fi>2014-02-28 23:05:20 +0200
committerSaku Ytti <saku@ytti.fi>2014-02-28 23:05:20 +0200
commit65df741de7bdd837dc64f40b1fd3083cc98c9ad3 (patch)
tree133e0cfa13d5f9fbe303ebe99373bf62001d829d
parent554ed10e16544c76447cc4e97865055eeef47482 (diff)
Rescue all StandardError from modules
If module crashes with unexpected error class, rescue it, and write it backtrace Also log if unknown model is attempted instead of crash
-rw-r--r--lib/oxidized/node.rb9
-rw-r--r--lib/oxidized/nodes.rb8
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/oxidized/node.rb b/lib/oxidized/node.rb
index 6c7b3aa..3027ccd 100644
--- a/lib/oxidized/node.rb
+++ b/lib/oxidized/node.rb
@@ -53,6 +53,15 @@ module Oxidized
end
Log.send(level, '%s raised %s%s with msg "%s"' % [self.ip, err.class, resc, err.message])
return false
+ rescue => err
+ file = Oxidized::Config::Crash + '.' + self.ip.to_s
+ open file, 'w' do |fh|
+ fh.puts Time.now.utc
+ fh.puts err.message + ' [' + err.class.to_s + ']'
+ fh.puts '-' * 50
+ fh.puts err.backtrace
+ end
+ Log.error '%s raised %s with msg "%s", %s saved' % [self.ip, err.class, err.message, file]
end
end
diff --git a/lib/oxidized/nodes.rb b/lib/oxidized/nodes.rb
index a6aa2f9..4cdbfbb 100644
--- a/lib/oxidized/nodes.rb
+++ b/lib/oxidized/nodes.rb
@@ -11,7 +11,13 @@ module Oxidized
@source = CFG.source[:default]
Oxidized.mgr.source = @source
Oxidized.mgr.source[@source].new.load.each do |node|
- new.push Node.new node
+ n = nil
+ begin
+ n = Node.new node
+ rescue LoadError => err
+ Log.warn 'load error %s with node %s' % [err.message, node]
+ end
+ new.push n if n
end
replace new
end