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'