Sha256: babfcbdb2cf82e85ec865d3ce26452e2705d418f36ce67dd9fa607731060b782

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

module FlashPlayer

  class LogFile

    attr_accessor :logger

    def initialize
      @logger      = $stdout
    end

    def tail thread
      tail_path flashlog_path, thread
    end

    private

    def tail_path path, thread=nil
      logger.puts ">> Tailing '#{path}', press CTRL+C to quit"
      create_flashlog_at path
      clear_flashlog_at path
      read_flashlog_at path, thread
    end

    def read_flashlog_at path, thread=nil
      thread ||= Thread.new{}
      lines_put = 0

      trap("INT") { thread.kill }
      
      while thread.alive? do
        lines_put = read_from_file path, lines_put
        logger.flush
        sleep(0.2)
      end

      logger.puts ""
      logger.puts ">> Exiting from tailing '#{path}' at user request"
    end

    def read_from_file path, lines_put
      File.open(path, 'r') do |file|
        lines_read = 0
        file.readlines.each do |line|
          if(lines_read >= lines_put)
            logger.puts "[trace] #{line}"
            logger.flush
            lines_put += 1
          end
          lines_read += 1
        end
      end unless !File.exists?(path)
      lines_put
    end

    def flashlog_path
      begin
        FlashPlayer.flashlog
      rescue FlashPlayer::PathError
        "/dev/null"
      end
    end

    def clear_flashlog_at path
      File.open(path, 'w') do |f|
        f.write('')
      end
    end

    def create_flashlog_at path
      if(!File.exists?(path))
        FileUtils.makedirs(File.dirname(path))
        FileUtils.touch(path)
      end
    end

  end
end

desc "Tail the flashlog.txt and block"
task :flashlog do
  reader = FlashPlayer::LogFile.new
  reader.tail
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
flashplayer-10.1.6.pre lib/flashplayer/log_file.rb