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