Sha256: e8e952b54ca57dd9d19021319422d210e1bcda7ce04c7e164804ac1b51fb6cea
Contents?: true
Size: 1.34 KB
Versions: 2
Compression:
Stored size: 1.34 KB
Contents
module Asyncapi::Server class JobWorker include Sidekiq::Worker sidekiq_options retry: false MAX_RETRIES = 2 def perform(job_id, retries=0) job = Job.find(job_id) runner_class = job.class_name.constantize job_status = :success job_message = runner_class.call(job.params) rescue => e job_status = :error job_message = [e.message, e.backtrace].flatten.join("\n") raise e ensure if job job.update_attributes(status: job_status) report_job_status(job, job_message) else # For some reason "ActiveRecord::Base.after_transaction", # ":after_commit" and ":after_create" does not prevent # the ActiveRecord-Sidekiq race condition. In order to # prevent this just retry running JobWorker until it finds # the job by job_id. if retries <= MAX_RETRIES JobWorker.perform_async(job_id, retries+1) end end end private def report_job_status(job, job_message) Typhoeus.put( job.callback_url, body: { job: { status: job.status, message: job_message, secret: job.secret, } }.to_json, headers: { "Content-Type" => "application/json", Accept: "application/json" } ) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
asyncapi-server-1.2.0 | app/workers/asyncapi/server/job_worker.rb |
asyncapi-server-1.1.3 | app/workers/asyncapi/server/job_worker.rb |