class Roqua::Scheduling::Scheduler

Public Instance Methods

advisory_lock_name() click to toggle source
# File lib/roqua/scheduling/scheduler.rb, line 31
def advisory_lock_name
  db_name = ActiveRecord::Base.respond_to?(:connection_db_config) \
            ? ActiveRecord::Base.connection_db_config.database
            : ActiveRecord::Base.connection_config[:database]
  "#{db_name}_cron_lock"
end
jobs_to_run() click to toggle source
# File lib/roqua/scheduling/scheduler.rb, line 19
def jobs_to_run
  Roqua::Scheduling::CronJob.where('next_run_at <= ?', Time.now)
end
ping() click to toggle source
# File lib/roqua/scheduling/scheduler.rb, line 4
def ping
  with_advisory_lock do
    jobs_to_run.each do |cron_job|
      begin
        run_task cron_job
      rescue Exception => ex
        Roqua::Support::Errors.report(ex)
        raise ex if Rails.env.test?
      end
    end

    Appsignal.increment_counter("scheduler.completed", 1)
  end
end
schedule() click to toggle source
# File lib/roqua/scheduling/scheduler.rb, line 27
def schedule
  Roqua::Scheduling::Schedule.current_schedule
end
tasks() click to toggle source
# File lib/roqua/scheduling/scheduler.rb, line 23
def tasks
  schedule.tasks
end

Private Instance Methods

run_task(cron_job) click to toggle source
# File lib/roqua/scheduling/scheduler.rb, line 46
def run_task(cron_job)
  task = schedule.tasks[cron_job.name]
  task.run

  Appsignal.increment_counter("scheduler.run_task.completed", 1, task_name: task.name)
  cron_job.update completed_at: Time.now, next_run_at: task.next_run_at
end
with_advisory_lock() { || ... } click to toggle source
# File lib/roqua/scheduling/scheduler.rb, line 40
def with_advisory_lock
  ActiveRecord::Base.with_advisory_lock(advisory_lock_name, timeout_seconds: 0) do
    yield
  end
end