lib/fusuma/plugin/inputs/input.rb in fusuma-3.3.1 vs lib/fusuma/plugin/inputs/input.rb in fusuma-3.4.0

- old
+ new

@@ -23,22 +23,25 @@ ios = IO.select(inputs.map(&:io)) io = ios&.first&.first input = inputs.find { |i| i.io == io } - begin - # NOTE: io.readline is blocking method - # each input plugin must write line to pipe (include `\n`) - line = io.readline(chomp: true) - rescue EOFError => e - MultiLogger.error "#{input.class.name}: #{e}" - MultiLogger.error "Shutdown fusuma process..." - Process.kill("TERM", Process.pid) - rescue => e - MultiLogger.error "#{input.class.name}: #{e}" - exit 1 - end - input.create_event(record: line) + input.create_event(record: input.read_from_io) + end + + # @return [String, Record] + # IO#readline is blocking method + # so input plugin must write line to pipe (include `\n`) + # or, override read_from_io and implement your own read method + def read_from_io + io.readline(chomp: true) + rescue EOFError => e + MultiLogger.error "#{self.class.name}: #{e}" + MultiLogger.error "Shutdown fusuma process..." + Process.kill("TERM", Process.pid) + rescue => e + MultiLogger.error "#{self.class.name}: #{e}" + exit 1 end # @return [Integer] def pid raise NotImplementedError, "override #{self.class.name}##{__method__}"