class SknUtils::ConcurrentJobs

Attributes

elapsed_time_string[R]

Public Class Methods

call(async: true) click to toggle source
# File lib/skn_utils/concurrent_jobs.rb, line 75
def self.call(async: true)
  worker = async ? AsyncWorker : SyncWorker
  new(worker: worker)
end
new(worker:) click to toggle source
# File lib/skn_utils/concurrent_jobs.rb, line 80
def initialize(worker:)
  @worker  = worker
  @workers = []
end

Public Instance Methods

register_job(&blk) click to toggle source
# File lib/skn_utils/concurrent_jobs.rb, line 96
def register_job(&blk)
  @workers << @worker.new(&blk)
end
register_jobs(commands, callable) click to toggle source

commands: array of command objects related to callable callable: callable class or proc, ex:SknUtils::HttpProcessor callable must return SknSuccess || SknFailure

# File lib/skn_utils/concurrent_jobs.rb, line 88
def register_jobs(commands, callable)
  commands.each do |command|
    register_job do
      JobWrapper.call(command,callable)
    end
  end
end
render_jobs() click to toggle source
# File lib/skn_utils/concurrent_jobs.rb, line 100
def render_jobs
  stime = SknUtils.duration
  merged = @workers.each_with_object([]) do |worker, acc|
    begin
      res = worker.call
      acc.push( res.nil? ? SknFailure.("Unknown", {cause: "Nil Return Value to render Jobs", backtrace: []}) : res )
    rescue => ex
      failures = ex.backtrace.map {|x| x.split("/").last }.join(",")
      acc.push SknFailure.(ex.class.name, { cause: ex.message, backtrace: failures})
    end
  end
  @elapsed_time_string = SknUtils.duration(stime)
  Result.new(merged)
rescue => e
  Result.new(merged || [])
end