Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2. require 'invoker'
  3.  
  4. class Tailer
  5. attr_accessor :process_names
  6. def initialize(process_names)
  7. verify_process_name(process_names)
  8. @process_names = process_names
  9. @unix_socket = Invoker::IPC::UnixClient.new
  10. end
  11.  
  12. def run
  13. socket = @unix_socket.send_and_wait('tail', process_names: process_names)
  14. trap('INT') { socket.close }
  15. loop do
  16. message = read_next_line(socket)
  17. break unless message
  18. puts message.tail_line
  19.  
  20. if message.tail_line =~ /port=|Listening/
  21. socket.close
  22. break
  23. end
  24. end
  25. end
  26.  
  27. private
  28.  
  29. def verify_process_name(process_names)
  30. if process_names.empty?
  31. abort("Tail command requires one or more process name")
  32. end
  33. end
  34.  
  35. def read_next_line(socket)
  36. Invoker::IPC.message_from_io(socket)
  37. rescue
  38. nil
  39. end
  40. end
  41.  
  42. socket = Invoker::IPC::UnixClient.new
  43. socket.send_command('list') do |response_object|
  44. response_object.processes.each do |process|
  45. if Dir.getwd.start_with?(process.dir)
  46. puts "Restarting #{process.process_name}"
  47. socket.send_command('reload', process_name: process.process_name)
  48. Tailer.new([process.process_name]).run
  49. exit 1
  50. end
  51. end
  52.  
  53. abort('No process configured for this directory')
  54. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement