class CanvasSync::Jobs::CanvasProcessWaiter
def build_next_job(job, kwargs, response)
def build_next_job(job, kwargs, response) job = job.symbolize_keys if kwargs[:progress_as].present? job[:kwargs] ||= {} job[:kwargs][kwargs[:progress_as].to_sym] = response end job end
def perform(progress_url, next_job, kwargs = {})
def perform(progress_url, next_job, kwargs = {}) kwargs = kwargs.symbolize_keys response = canvas_sync_client.get(progress_url) status = kwargs[:status_key].present? ? response[kwargs[:status_key]] : response['workflow_state'] || response['status'] if %w[completed complete].include? status InvokeCallbackWorker.perform_later(build_next_job(next_job, kwargs, response)) if next_job elsif %w[failed error].include? status if kwargs[:on_failure].is_a?(Hash) InvokeCallbackWorker.perform_later(build_next_job(kwargs[:on_failure], kwargs, response)) else Rails.logger.error("Progress #{progress_url} failed") end else # if status == 'queued' || status == 'running' interval = kwargs[:interval] || (Rails.env.development? ? 3 : 60) CanvasProcessWaiter.set(wait: interval).perform_later(progress_url, next_job, kwargs) end end