class Procodile::ControlSession

Public Class Methods

new(supervisor, client) click to toggle source
# File lib/procodile/control_session.rb, line 7
def initialize(supervisor, client)
  @supervisor = supervisor
  @client = client
end

Public Instance Methods

check_concurrency(options) click to toggle source
# File lib/procodile/control_session.rb, line 54
def check_concurrency(options)
  result = @supervisor.check_concurrency(:reload => options['reload'])
  result = result.each_with_object({}) { |(type, instances), hash| hash[type] = instances.map(&:to_hash) }
  "200 #{result.to_json}"
end
receive_data(data) click to toggle source
# File lib/procodile/control_session.rb, line 12
def receive_data(data)
  command, options = data.split(/\s+/, 2)
  options = JSON.parse(options)
  if self.class.instance_methods(false).include?(command.to_sym) && command != 'receive_data'
    begin
      public_send(command, options)
    rescue Procodile::Error => e
      Procodile.log nil, 'control', "Error: #{e.message}".color(31)
      "500 #{e.message}"
    end
  else
    "404 Invaid command"
  end
end
reload_config(options) click to toggle source
# File lib/procodile/control_session.rb, line 49
def reload_config(options)
  @supervisor.reload_config
  "200"
end
restart(options) click to toggle source
# File lib/procodile/control_session.rb, line 44
def restart(options)
  instances = @supervisor.restart(:processes => options['processes'], :tag => options['tag'])
  "200 " + instances.map { |a| a.map { |i| i ? i.to_hash : nil } }.to_json
end
start_processes(options) click to toggle source
# File lib/procodile/control_session.rb, line 27
def start_processes(options)
  if options['port_allocations']
    if @supervisor.run_options[:port_allocations]
      @supervisor.run_options[:port_allocations].merge!(options['port_allocations'])
    else
      @supervisor.run_options[:port_allocations] = options['port_allocations']
    end
  end
  instances = @supervisor.start_processes(options['processes'], :tag => options['tag'])
  "200 " + instances.map(&:to_hash).to_json
end
status(options) click to toggle source
# File lib/procodile/control_session.rb, line 60
def status(options)
  instances = {}
  @supervisor.processes.each do |process, process_instances|
    instances[process.name] = []
    for instance in process_instances
      instances[process.name] << instance.to_hash
    end
  end

  processes = @supervisor.processes.keys.map(&:to_hash)
  result = {
    :version => Procodile::VERSION,
    :messages => @supervisor.messages,
    :root => @supervisor.config.root,
    :app_name => @supervisor.config.app_name,
    :supervisor => @supervisor.to_hash,
    :instances => instances,
    :processes => processes,
    :environment_variables => @supervisor.config.environment_variables,
    :procfile_path => @supervisor.config.procfile_path,
    :options_path => @supervisor.config.options_path,
    :local_options_path => @supervisor.config.local_options_path,
    :sock_path => @supervisor.config.sock_path,
    :log_root => @supervisor.config.log_root,
    :supervisor_pid_path => @supervisor.config.supervisor_pid_path,
    :pid_root => @supervisor.config.pid_root,
    :loaded_at => @supervisor.config.loaded_at.to_i,
  }
  "200 #{result.to_json}"
end
stop(options) click to toggle source
# File lib/procodile/control_session.rb, line 39
def stop(options)
  instances = @supervisor.stop(:processes => options['processes'], :stop_supervisor => options['stop_supervisor'])
  "200 " + instances.map(&:to_hash).to_json
end