|
#!/usr/bin/env ruby
unless defined?(Rails)
puts
puts "Please run me with rails runner, for example:"
puts " RAILS_ENV=production bundle exec rails runner bin/schedule.rb"
puts
exit 1
end
require 'rufus/scheduler'
def run_schedule(time, mutex)
ActiveRecord::Base.connection_pool.with_connection do
mutex.synchronize do
puts "Queuing schedule for #{time}"
Agent.delay.run_schedule(time)
end
end
end
def propogate!(mutex)
ActiveRecord::Base.connection_pool.with_connection do
mutex.synchronize do
puts "Queuing event propagation"
Agent.delay.receive!
end
end
end
mutex = Mutex.new
scheduler = Rufus::Scheduler.new
# Schedule event propagation.
scheduler.every '5m' do
propogate!(mutex)
end
# Schedule repeating events.
%w[2m 5m 10m 30m 1h 2h 5h 12h 1d 2d 7d].each do |schedule|
scheduler.every schedule do
run_schedule "every_#{schedule}", mutex
end
end
# Schedule events for specific times.
# Times are assumed to be in PST for now. Can store a user#timezone later.
24.times do |hour|
scheduler.cron "0 #{hour} * * * America/Los_Angeles" do
if hour == 0
run_schedule "midnight", mutex
elsif hour < 12
run_schedule "#{hour}am", mutex
elsif hour == 12
run_schedule "noon", mutex
else
run_schedule "#{hour - 12}pm", mutex
end
end
end
scheduler.join
|