class Paraduct::ParallelRunner
Public Class Methods
perform_all(script: nil, after_script: nil, product_variables: nil)
click to toggle source
run script with arguments @param script [String, Array<String>] script file, script(s) @param after_script [String, Array<String>] script file, script(s) @param product_variables [Array<Hash{String => String}>] @return [Paraduct::TestResponse]
# File lib/paraduct/parallel_runner.rb, line 10 def self.perform_all(script: nil, after_script: nil, product_variables: nil) test_response = Paraduct::TestResponse.new base_job_dir = Paraduct.config.base_job_dir FileUtils.mkdir_p(base_job_dir) unless base_job_dir.exist? Paraduct.logger.info <<-EOS ====================================================== START matrix test EOS pool = Thread.pool(Paraduct.config.max_threads) begin product_variables.each_with_index do |params, index| runner = Paraduct::Runner.new( params: params, base_job_dir: base_job_dir, job_id: index + 1 ) pool.process do runner.logger.info "[START] params: #{runner.formatted_params}" runner.setup_dir if Paraduct.config.enable_rsync? stdout, successful = perform_runner(runner, script) unless after_script.blank? after_stdout, after_successful = perform_runner(runner, after_script) stdout << after_stdout successful &&= after_successful end runner.logger.info "[END] params: #{runner.formatted_params}" test_response.jobs_push( job_name: runner.job_name, params: runner.params, formatted_params: runner.formatted_params, successful: successful, stdout: stdout ) end end ensure pool.shutdown end raise Paraduct::Errors::DirtyExitError unless test_response.jobs_count == product_variables.count test_response end
Private Class Methods
perform_runner(runner, script)
click to toggle source
# File lib/paraduct/parallel_runner.rb, line 62 def self.perform_runner(runner, script) stdout = runner.perform(script) [stdout, true] rescue Paraduct::Errors::ProcessError => e runner.logger.error "exitstatus=#{e.status}, #{e.inspect}" [e.message, false] rescue => e runner.logger.error "Unknown error: #{e.inspect}" runner.logger.error e.backtrace.join("\n") [nil, false] end