Sha256: 6539134c12644abc2b88118d02bad816b3b41d00c469e463f458b42084c26151

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

require 'instrumentality/constants'
require 'claide'
require 'colorize'
require 'timeout'

module Instrumentality
  class Executor
    class ExecutorError < StandardError; include CLAide::InformativeError; end

    def self.execute(cmd, verbose = false)
      puts "#{Constants::OUTPUT_PREFIX} Executing command: #{cmd}"
      if verbose
        system(cmd)
      else
        `#{cmd}`
      end
      status = $?.exitstatus
      raise ExecutorError, "Previous command execution failed with status: #{status}".red if status != 0
    end

    def self.execute_async(cmd)
      spawn("#{cmd}").tap do |pid|
        puts "#{Constants::OUTPUT_PREFIX} Spawned process (PID: #{pid}) from command: #{cmd}"
      end
    end

    def self.timeout(process, seconds = Constants::TIMEOUT)
      pid = ""
      Timeout.timeout(seconds) do
        loop do
          pid = `ps aux | grep #{process}.app | grep -v grep | awk '{print $2}'`.strip
          break if pid != ""
        end
      end
      pid.tap do |pid|
        puts "#{Constants::OUTPUT_PREFIX} Found process #{process} with PID: #{pid}"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
instrumentality-0.1.0 lib/instrumentality/executor.rb