Class: Que::Scheduler::SchedulerJob

Inherits:
Job
  • Object
show all
Defined in:
lib/que/scheduler/scheduler_job.rb

Constant Summary collapse

SCHEDULER_FREQUENCY =
60
RETRY_PROC =
proc { |count|
  # Maximum one hour, otherwise use the default backoff
  count > 7 ? (60 * 60) : ((count**4) + 3)
}

Instance Method Summary collapse

Instance Method Details

#enqueue_required_jobs(calculator_result, logs) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/que/scheduler/scheduler_job.rb', line 45

def enqueue_required_jobs(calculator_result, logs)
  calculator_result.missed_jobs.filter_map do |to_enqueue|
    to_enqueue.enqueue.tap do |enqueued_job|
      check_enqueued_job(to_enqueue, enqueued_job, logs)
    end
  end
end

#run(options = nil) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/que/scheduler/scheduler_job.rb', line 27

def run(options = nil)
  Que::Scheduler::Db.transaction do
    Que::Scheduler::StateChecks.check

    scheduler_job_args = SchedulerJobArgs.build(options)
    logs = ["que-scheduler last ran at #{scheduler_job_args.last_run_time}."]
    result = EnqueueingCalculator.parse(Scheduler.schedule.values, scheduler_job_args)
    enqueued_jobs = enqueue_required_jobs(result, logs)
    # Remove this job and schedule self again
    destroy
    enqueue_self_again(
      scheduler_job_args, scheduler_job_args.as_time, result.job_dictionary, enqueued_jobs
    )
    # Only now we're sure nothing errored, log the results
    logs.each { |str| ::Que.log(event: :"que-scheduler", message: str) }
  end
end