Sha256: d61d54ca30f869a27035955c95af2ffc28568041292e6a3444ee4e66c36c55aa
Contents?: true
Size: 1.01 KB
Versions: 3
Compression:
Stored size: 1.01 KB
Contents
require 'with_advisory_lock' class Roqua::Scheduling::Scheduler 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 end end def jobs_to_run Roqua::Scheduling::CronJob.where('next_run_at <= ?', Time.now) end def tasks schedule.tasks end def schedule Roqua::Scheduling::Schedule.current_schedule end def advisory_lock_name "#{ActiveRecord::Base.connection_config[:database]}_cron_lock" end private def with_advisory_lock ActiveRecord::Base.with_advisory_lock(advisory_lock_name, timeout_seconds: 0) do yield end end 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 end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
roqua-support-0.3.4 | lib/roqua/scheduling/scheduler.rb |
roqua-support-0.3.3 | lib/roqua/scheduling/scheduler.rb |
roqua-support-0.3.2 | lib/roqua/scheduling/scheduler.rb |