class Plextail::Tracker

Constants

URL

Attributes

glob[R]

Public Class Methods

new(*glob) click to toggle source
# File lib/plextail/tracker.rb, line 8
def initialize(*glob)
  @glob = File.join *glob
end

Public Instance Methods

pipe(&block) click to toggle source
# File lib/plextail/tracker.rb, line 12
def pipe(&block)
  if @glob.empty?
    pipe_from_input nil, &block
  else
    pipe_from_glob Dir[glob].first, &block
  end
end

Private Instance Methods

connection() click to toggle source
# File lib/plextail/tracker.rb, line 24
def connection
  @connection ||= Faraday.new(:url => URL) do |connection|
    connection.request :retry, :max => 3, :interval => 0.05,
      :exceptions => [Faraday::Error::ConnectionFailed, 'Timeout::Error']
    connection.use Faraday::Adapter::NetHttp
  end
end
pipe_from_glob(file, &block) click to toggle source
# File lib/plextail/tracker.rb, line 32
def pipe_from_glob(file, &block)
  PTY.spawn("tail -f #{glob}") do |stdin, stdout, pid|
    stdin.each do |string|
      file = process_line file, string, &block
    end
  end
rescue PTY::ChildExited
  puts "The child process exited!"
end
pipe_from_input(file, &block) click to toggle source
# File lib/plextail/tracker.rb, line 42
def pipe_from_input(file, &block)
  ARGF.each_line do |string|
    file = process_line file, string, &block
  end
end
process_line(file, string, &block) click to toggle source
# File lib/plextail/tracker.rb, line 48
def process_line(file, string, &block)
  string.strip!
  return $1 if string[/^==> (.+) <==$/]

  to_plex Plextail::Line.new file, string, &block if string.length > 0

  file
end
to_plex(line) click to toggle source
# File lib/plextail/tracker.rb, line 57
def to_plex(line)
  connection.basic_auth 'token', line.token
  connection.post('/logs', line.to_s) do |request|
    request.headers['Content-Type']   = 'application/logplex-1'
    request.headers['Content-Length'] = line.to_s.bytes.to_a.length.to_s
  end
end