Sha256: e845caf3e890ce1e922b91284661de4805316c268728268d20dc02d28c6c3fde

Contents?: true

Size: 1.06 KB

Versions: 1

Compression:

Stored size: 1.06 KB

Contents

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

1 entries across 1 versions & 1 rubygems

Version Path
fluent-plugin-systemd-0.0.3 lib/fluent/plugin/systemd/pos_writer.rb