class Devkitkat::Processor

Attributes

command[R]
config[R]
services[R]

Public Class Methods

new(services, command, config) click to toggle source
# File lib/devkitkat/processor.rb, line 7
def initialize(services, command, config)
  @services = services
  @command = command
  @config = config
end

Public Instance Methods

execute() click to toggle source
# File lib/devkitkat/processor.rb, line 13
def execute
  results = []

  print_log_paths

  if services.count == 1
    # If the target is only one, it could be console access (TTY)
    # so we can't run in parallel.
    results << services.first.execute
  else
    results = Parallel.map(services, progress: 'Executing', in_processes: 8) do |service|
      service.execute.tap do |success|
        raise Parallel::Kill unless success
      end
    end
  end

  results&.all? { |result| result == true } || terminate_process_group!
end

Private Instance Methods

print_log_paths() click to toggle source
terminate_process_group!() click to toggle source
# File lib/devkitkat/processor.rb, line 35
def terminate_process_group!
  pgid = Process.getpgid(Process.pid)

  Process.kill('TERM', -pgid)
end