Sha256: 818f612ed848a48a521682286399187858b92d3d78bbcd8af6b970afc49208b2

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 KB

Contents

require "active_job"

module CanvasSync
  # Inherit from this class to build a Job that will log to the canvas_sync_job_logs table
  class Job < ActiveJob::Base
    before_enqueue do |job|
      create_job_log(job)
    end

    around_perform do |job, block|
      @job_log = CanvasSync::JobLog.find_by(job_id: job.job_id) || create_job_log(job)
      @job_log.status = JobLog::RUNNING_STATUS
      @job_log.started_at = Time.now
      @job_log.save

      begin
        block.call
        @job_log.status = JobLog::SUCCESS_STATUS
      rescue => e # rubocop:disable Style/RescueStandardError
        @job_log.exception = "#{e.class}: #{e.message}"
        @job_log.backtrace = e.backtrace
        @job_log.status = JobLog::ERROR_STATUS
        raise e
      ensure
        if @job_log.job_class == "CanvasSync::Jobs::ReportChecker" && @job_log.status != JobLog::ERROR_STATUS
          @job_log.destroy
        else
          @job_log.completed_at = Time.now
          @job_log.save!
        end
      end
    end

    def report_checker_wait_time
      Rails.env.development? ? 1.second : 30.seconds
    end

    def create_job_log(job)
      CanvasSync::JobLog.create(
        job_class: self.class.name,
        job_arguments: job.arguments,
        job_id: job.job_id,
        status: JobLog::ENQUEUED_STATUS,
      )
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
canvas_sync-0.5.4 lib/canvas_sync/job.rb
canvas_sync-0.5.3 lib/canvas_sync/job.rb
canvas_sync-0.5.2 lib/canvas_sync/job.rb