class Explorer::ProcessManager

Public Class Methods

new(options={}) click to toggle source
# File lib/explorer/process_manager.rb, line 6
def initialize options={}
  @log_watcher = options.fetch(:log_watcher) { Explorer.log_watcher }
  @processes = {}
end

Public Instance Methods

add(label, command, working_dir: ENV['PWD']) click to toggle source
# File lib/explorer/process_manager.rb, line 17
def add(label, command, working_dir: ENV['PWD'])
  env = load_env(working_dir)
  @processes[label] = Process.new(label, command, working_dir: working_dir, log_watcher: @log_watcher, env: env)
end
exists?(label) click to toggle source
# File lib/explorer/process_manager.rb, line 43
def exists?(label)
  !!@processes[label]
end
labels() click to toggle source
# File lib/explorer/process_manager.rb, line 56
def labels
  @processes.keys
end
load(file) click to toggle source
# File lib/explorer/process_manager.rb, line 60
def load file
  return unless File.exist? file

  yaml = YAML.load_file file
  yaml.each do |cfg|
    add(cfg[:label], cfg[:command], working_dir: cfg[:working_dir])
  end
end
processes() click to toggle source
# File lib/explorer/process_manager.rb, line 52
def processes
  @processes.values
end
remove(label) click to toggle source
# File lib/explorer/process_manager.rb, line 22
def remove(label)
  fail "Label is unknown" unless @processes[label]
  @processes[label].terminate
  @processes.delete label
end
restart(label) click to toggle source
# File lib/explorer/process_manager.rb, line 38
def restart(label)
  stop(label)
  start(label)
end
running?(label) click to toggle source
# File lib/explorer/process_manager.rb, line 47
def running?(label)
  fail "Label is unknown" unless @processes[label]
  @processes[label].started?
end
save(file) click to toggle source
# File lib/explorer/process_manager.rb, line 69
def save file
  Dir.mkdir File.dirname(file) unless Dir.exist?(File.dirname(file))
  File.write file, YAML.dump(processes.map do |p|
    {
      label: p.label,
      command: p.command,
      working_dir: p.working_dir
    }
  end)
end
start(label) click to toggle source
# File lib/explorer/process_manager.rb, line 28
def start(label)
  fail "Label is unknown" unless @processes[label]
  @processes[label].start
end
stop(label) click to toggle source
# File lib/explorer/process_manager.rb, line 33
def stop(label)
  fail "Label is unknown" unless @processes[label]
  @processes[label].stop
end
terminate() click to toggle source
# File lib/explorer/process_manager.rb, line 11
def terminate
  labels.each do |label|
    remove(label)
  end
end

Private Instance Methods

load_env(directory = ENV['PWD']) click to toggle source
# File lib/explorer/process_manager.rb, line 82
def load_env(directory = ENV['PWD'])
  path = File.expand_path File.join(directory, '.env')
  return {} unless File.exist?(path)
  Dotenv::Environment.new(path)
end