class Rjob::RecurringJob
Attributes
context[R]
cron[R]
job_arguments[R]
job_class_name[R]
unique_id[R]
Public Class Methods
from_definition(context, defn)
click to toggle source
# File lib/rjob/recurring_job.rb, line 43 def self.from_definition(context, defn) new( context, Fugit.parse(defn[:cron]), defn[:job_class].to_s, defn[:arguments], defn[:unique_id] ) end
new(context, cron, job_class_name, job_arguments, unique_id=nil)
click to toggle source
# File lib/rjob/recurring_job.rb, line 10 def initialize(context, cron, job_class_name, job_arguments, unique_id=nil) @context = context @cron = cron @job_class_name = job_class_name @job_class = nil @job_arguments = job_arguments @unique_id = unique_id generate_unique_id! unless @unique_id end
Public Instance Methods
job_class()
click to toggle source
# File lib/rjob/recurring_job.rb, line 39 def job_class @job_class ||= @context.demodularize_class(@job_class_name) end
maybe_enqueue(redis)
click to toggle source
# File lib/rjob/recurring_job.rb, line 22 def maybe_enqueue(redis) key_name = "#{@context.prefix}:recurring:1:#{@unique_id}:lastrun".b current_time = Time.now last_run_str = redis.get(key_name) last_run = last_run_str ? Time.parse(last_run_str) : (current_time - 1) next_run_on = @cron.next_time(last_run) should_run = (current_time >= next_run_on.to_t) @context.enqueue_job_with_redis(job_class, job_arguments, redis) if should_run if should_run || last_run_str == nil redis.set(key_name, current_time.utc.to_s, ex: @cron.rough_frequency * 2) end end
Private Instance Methods
generate_unique_id!()
click to toggle source
# File lib/rjob/recurring_job.rb, line 55 def generate_unique_id! digest = ::OpenSSL::Digest.new('sha256') digest << @job_class_name digest << @cron.original @job_arguments.each { |x| digest << x.to_s } @unique_id = digest.digest end