Class: Bluepill::Controller
- Inherits:
-
Object
- Object
- Bluepill::Controller
- Defined in:
- lib/bluepill/controller.rb
Instance Attribute Summary collapse
-
#base_dir ⇒ Object
Returns the value of attribute base_dir.
-
#log_file ⇒ Object
Returns the value of attribute log_file.
-
#pids_dir ⇒ Object
Returns the value of attribute pids_dir.
-
#sockets_dir ⇒ Object
Returns the value of attribute sockets_dir.
Instance Method Summary collapse
- #grep_pattern(application, query = nil) ⇒ Object
- #handle_command(application, command, *args) ⇒ Object
-
#initialize(options = {}) ⇒ Controller
constructor
A new instance of Controller.
- #running_applications ⇒ Object
- #send_to_daemon(application, command, *args) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Controller
Returns a new instance of Controller.
8 9 10 11 12 13 14 15 16 |
# File 'lib/bluepill/controller.rb', line 8 def initialize( = {}) self.log_file = [:log_file] self.base_dir = [:base_dir] self.sockets_dir = File.join(base_dir, 'socks') self.pids_dir = File.join(base_dir, 'pids') setup_dir_structure cleanup_bluepill_directory end |
Instance Attribute Details
#base_dir ⇒ Object
Returns the value of attribute base_dir.
6 7 8 |
# File 'lib/bluepill/controller.rb', line 6 def base_dir @base_dir end |
#log_file ⇒ Object
Returns the value of attribute log_file.
6 7 8 |
# File 'lib/bluepill/controller.rb', line 6 def log_file @log_file end |
#pids_dir ⇒ Object
Returns the value of attribute pids_dir.
6 7 8 |
# File 'lib/bluepill/controller.rb', line 6 def pids_dir @pids_dir end |
#sockets_dir ⇒ Object
Returns the value of attribute sockets_dir.
6 7 8 |
# File 'lib/bluepill/controller.rb', line 6 def sockets_dir @sockets_dir end |
Instance Method Details
#grep_pattern(application, query = nil) ⇒ Object
79 80 81 82 |
# File 'lib/bluepill/controller.rb', line 79 def grep_pattern(application, query = nil) pattern = [application, query].compact.join(':') ['\[.*', Regexp.escape(pattern), '.*'].compact.join end |
#handle_command(application, command, *args) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/bluepill/controller.rb', line 22 def handle_command(application, command, *args) case command.to_sym when :status puts send_to_daemon(application, :status, *args) when :quit pid = pid_for(application) if System.pid_alive?(pid) ::Process.kill('TERM', pid) puts "Killing bluepilld[#{pid}]" else puts "bluepilld[#{pid}] not running" end when :log log_file_location = send_to_daemon(application, :log_file) log_file_location = log_file if log_file_location.to_s.strip.empty? requested_pattern = args.first grep_pattern = self.grep_pattern(application, requested_pattern) tail = "tail -n 100 -f #{log_file_location} | grep -E '#{grep_pattern}'" puts "Tailing log for #{requested_pattern}..." Kernel.exec(tail) when *Application::PROCESS_COMMANDS # these need to be sent to the daemon and the results printed out affected = send_to_daemon(application, command, *args) if affected.empty? puts 'No processes effected' else puts "Sent #{command} to:" affected.each do |process| puts " #{process}" end end else $stderr.puts(format('Unknown command `%s` (or application `%s` has not been loaded yet)', command, command)) exit(1) end end |
#running_applications ⇒ Object
18 19 20 |
# File 'lib/bluepill/controller.rb', line 18 def running_applications Dir[File.join(sockets_dir, '*.sock')].collect { |x| File.basename(x, '.sock') } end |
#send_to_daemon(application, command, *args) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/bluepill/controller.rb', line 61 def send_to_daemon(application, command, *args) verify_version!(application) command = ([command, *args]).join(':') response = Socket.client_command(base_dir, application, command) if response.is_a?(Exception) $stderr.puts 'Received error from server:' $stderr.puts response.inspect $stderr.puts response.backtrace.join("\n") exit(8) else response end rescue Errno::ECONNREFUSED abort('Connection Refused: Server is not running') end |