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