Sha256: e4e290922e1a1e3997be4aef696d102d9018ab3322d1b8c14ccdec767eeb659d
Contents?: true
Size: 1.57 KB
Versions: 4
Compression:
Stored size: 1.57 KB
Contents
class Marty::CronJob < ActiveJob::Base attr_accessor :schedule_id def enqueue(options = {}) self.cron = options[:cron] if options[:cron] self.schedule_id = options[:schedule_id] if options[:schedule_id] super end around_perform do |job, block| begin block.call log_success(job.arguments) rescue StandardError => e log_failure(e, job.arguments) raise e end end def log_failure(exception, arguments) error = { message: exception.message, backtrace: exception.backtrace } ::Marty::BackgroundJob::Log.create!( job_class: self.class.name, arguments: arguments, status: :failure, error: error ) end def log_success(arguments) ::Marty::BackgroundJob::Log.create!( job_class: self.class.name, arguments: arguments, status: :success ) end class << self def schedule(schedule_obj:) dj = schedule_obj.delayed_job return reschedule_obj(schedule_obj: schedule_obj) if dj.present? cron = schedule_obj.cron return if cron.blank? set(cron: cron, schedule_id: schedule_obj.id).perform_later(*schedule_obj.arguments) end def reschedule(schedule_obj:) dj = schedule_obj.delayed_job return dj.update(cron: schedule_obj.cron) if dj.locked_by? remove(dj) schedule(schedule_obj: schedule_obj) end def remove(dj) dj.destroy if dj.present? end alias remove_schedule remove def scheduled?(schedule_id:) Delayed::Job.find_by(schedule_id: schedule_id).present? end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
marty-11.0.0 | app/jobs/marty/cron_job.rb |
marty-10.0.3 | app/jobs/marty/cron_job.rb |
marty-10.0.2 | app/jobs/marty/cron_job.rb |
marty-10.0.0 | app/jobs/marty/cron_job.rb |