Sha256: 70aa69aa9da60469e725c1d48f05655f0e349cb1754d870f31170f4ead838861

Contents?: true

Size: 1018 Bytes

Versions: 1

Compression:

Stored size: 1018 Bytes

Contents

class Fanforce::Worker

  def self.run(init_params, &worker_code)
    self.new(init_params, &worker_code)
  end

  def initialize(init_params, &worker_code)
    require_dependencies
    run_validations

    @init_params = init_params
    @worker_code = worker_code

    msg = iron_mq.queue(init_params['worker_id']).get #(timeout: 3600)

    (msg.nil?) ? (return) : run_worker(msg, 0)
  end


  def require_dependencies
    require '.pluginenv'
    require 'fanforce/api'
    require 'iron_mq'
  end

  def run_validations

  end

  def iron_mq
    @iron_mq ||= IronMQ::Client.new
  end

  def run_worker(msg, retries)
    params = Fanforce.decode_json(msg.body)
    @worker_code.call(params, retries)
  rescue => e
    params = (params.blank?) ? {original_body: msg.body} : {original_params: params}
    params[:retries] = retries + 1
    params[:error_message] = e.message
    params[:error_backtrace] = e.backtrace
    Fanforce::Workers.iron.queue "#{@init_params['worker_id']}-RETRIES", params
    raise
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fanforce-workers-0.0.4.pre2 lib/fanforce/workers/worker.rb