Sha256: 72f3d2269e4837df808af95ca67c2005ba133a42f55700ee73982cd849113411

Contents?: true

Size: 1.62 KB

Versions: 33

Compression:

Stored size: 1.62 KB

Contents

module CanvasSync::Jobs
  class CanvasProcessWaiter < ActiveJob::Base
    # rubocop:disable Metrics/PerceivedComplexity
    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 imported imported_with_messages].include? status
        InvokeCallbackWorker.perform_later(build_next_job(next_job, kwargs, response)) if next_job
      elsif %w[failed error failed_with_messages].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
    # rubocop:enable Metrics/PerceivedComplexity

    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

    # This is a separate job so that, if it fails and a retry is triggered, it doesn't query the API needlessly
    class InvokeCallbackWorker < ActiveJob::Base
      def perform(job)
        CanvasSync::MiscHelper.invoke_task(job)
      end
    end
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
canvas_sync-0.22.0 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.22.0.beta8 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.22.0.beta7 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.22.0.beta6 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.22.0.beta5 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.22.0.beta4 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.22.0.beta3 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.22.0.beta2 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.22.0.beta1 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.21.1 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.21.1.beta1 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.21.0 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.21.0.beta5 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.21.0.beta4 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.21.0.beta3 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.21.0.beta2 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.21.0.beta1 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.20.5 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.20.4 lib/canvas_sync/jobs/canvas_process_waiter.rb
canvas_sync-0.20.3 lib/canvas_sync/jobs/canvas_process_waiter.rb