Class: Que::Scheduler::SchedulerJob

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

Constant Summary collapse

SCHEDULER_FREQUENCY =
60

Instance Method Summary collapse

Instance Method Details

#enqueue_required_jobs(calculator_result, logs) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/que/scheduler/scheduler_job.rb', line 40

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



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/que/scheduler/scheduler_job.rb', line 22

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