lib/syslogstash.rb in syslogstash-0.2.0 vs lib/syslogstash.rb in syslogstash-0.3.0

- old
+ new

@@ -1,8 +1,9 @@ require 'uri' require 'socket' require 'json' +require 'thwait' # Read syslog messages from one or more sockets, and send it to a logstash # server. # class Syslogstash @@ -14,11 +15,30 @@ def run @writer.run @readers.each { |w| w.run } - @writer.wait - @readers.each { |w| w.wait } + tw = ThreadsWait.new(@writer.thread, *(@readers.map { |r| r.thread })) + + dead_thread = tw.next_wait + + if dead_thread == @writer.thread + $stderr.puts "Writer thread crashed." + exit 1 + else + reader = @readers.find { |r| r.thread == dead_thread } + + $stderr.puts "Reader thread for #{reader.file} crashed." + end + + begin + dead_thread.join + rescue Exception => ex + $stderr.puts "Exception in worker thread was: #{ex.message} (#{ex.class})" + $stderr.puts ex.backtrace.map { |l| " #{l}" }.join("\n") + end + + exit 1 end end require_relative 'syslogstash/syslog_reader' require_relative 'syslogstash/logstash_writer'