Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- require 'invoker'
- class Tailer
- attr_accessor :process_names
- def initialize(process_names)
- verify_process_name(process_names)
- @process_names = process_names
- @unix_socket = Invoker::IPC::UnixClient.new
- end
- def run
- socket = @unix_socket.send_and_wait('tail', process_names: process_names)
- trap('INT') { socket.close }
- loop do
- message = read_next_line(socket)
- break unless message
- puts message.tail_line
- if message.tail_line =~ /port=|Listening/
- socket.close
- break
- end
- end
- end
- private
- def verify_process_name(process_names)
- if process_names.empty?
- abort("Tail command requires one or more process name")
- end
- end
- def read_next_line(socket)
- Invoker::IPC.message_from_io(socket)
- rescue
- nil
- end
- end
- socket = Invoker::IPC::UnixClient.new
- socket.send_command('list') do |response_object|
- response_object.processes.each do |process|
- if Dir.getwd.start_with?(process.dir)
- puts "Restarting #{process.process_name}"
- socket.send_command('reload', process_name: process.process_name)
- Tailer.new([process.process_name]).run
- exit 1
- end
- end
- abort('No process configured for this directory')
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement