Sha256: 472c16346e4aa59815f2052bba98e486fb16929bc5796d0e411376871352bc03

Contents?: true

Size: 1.09 KB

Versions: 2

Compression:

Stored size: 1.09 KB

Contents

require "fluent/input"

module Fluent
  class SystemdInput < Input
    class PosWriter
      def initialize(pos_file)
        @path = pos_file
        setup
      end

      attr_reader :cursor, :path

      def start
        return unless path
        @running = true
        @thread = Thread.new(&method(:work))
      end

      def shutdown
        return unless path
        @running = false
        thread.join
        write_pos
      end

      def update(c)
        return unless path
        lock.synchronize { @cursor = c }
      end

      private

      attr_reader :lock, :thread, :running

      def setup
        return unless path
        @lock = Mutex.new
        @cursor = IO.read(path).chomp if File.exist?(path)
      end

      def work
        while running
          write_pos
          sleep 1
        end
      end

      def write_pos
        lock.synchronize do
          if @written_cursor != cursor
            file = File.open(path, "w+")
            file.print cursor
            file.close
            @written_cursor = cursor
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fluent-plugin-systemd-0.0.5 lib/fluent/plugin/systemd/pos_writer.rb
fluent-plugin-systemd-0.0.4 lib/fluent/plugin/systemd/pos_writer.rb