Class: Logtailer

Inherits:
Object
  • Object
show all
Defined in:
lib/smart_machine/templates/dotsmartmachine/config/emailer/docker/logtailer.rb

Instance Method Summary collapse

Constructor Details

#initializeLogtailer

Returns a new instance of Logtailer.



9
10
11
12
13
14
15
16
# File 'lib/smart_machine/templates/dotsmartmachine/config/emailer/docker/logtailer.rb', line 9

def initialize
  @tailers = {
    "/var/log/monit.log"    => 1,
    "/var/log/haproxy.log"  => 1,
    "/var/log/mail.log"     => 1,
    "/home/spamd/spamd.log" => 1
  }
end

Instance Method Details

#flushObject



43
44
45
46
47
48
49
# File 'lib/smart_machine/templates/dotsmartmachine/config/emailer/docker/logtailer.rb', line 43

def flush
  set_start_from_line
  @tailers.each do |path, start_from_line|
    system("tail --lines=+#{start_from_line} -q #{path} >> /proc/1/fd/1")
  end
  save_start_from_line
end

#startObject



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/smart_machine/templates/dotsmartmachine/config/emailer/docker/logtailer.rb', line 18

def start
  set_start_from_line

  pids = []
  @tailers.each do |path, start_from_line|
    pid = Process.spawn("tail", "--lines=+#{start_from_line}", "-q", "-F", "#{path}", [:out, :err] => "/proc/1/fd/1")
    Process.detach(pid)
    pids.push(pid)
  end
  IO.write("/run/tmpfs/logtailer.pid", "#{pids.join(' ')}\n")

  puts "Started Logtailer with PIDs " + `cat /run/tmpfs/logtailer.pid`.chomp + "."
end

#stopObject



32
33
34
35
36
37
38
39
40
41
# File 'lib/smart_machine/templates/dotsmartmachine/config/emailer/docker/logtailer.rb', line 32

def stop
  pids = `cat /run/tmpfs/logtailer.pid`.chomp.split(" ")
  pids.each do |pid|
    system("/bin/kill --signal SIGTERM #{pid}")
  end
  save_start_from_line

  puts "Stopped Logtailer with PIDs " + `cat /run/tmpfs/logtailer.pid`.chomp + "."
  FileUtils.rm("/run/tmpfs/logtailer.pid")
end