Aucune description http://j1x-huginn.herokuapp.com

schedule.rb 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/usr/bin/env ruby
  2. # This process is used to maintain Huginn's upkeep behavior, automatically running scheduled Agents and
  3. # periodically propagating and expiring Events. It's typically run via foreman and the included Procfile.
  4. unless defined?(Rails)
  5. puts
  6. puts "Please run me with rails runner, for example:"
  7. puts " RAILS_ENV=production bundle exec rails runner bin/schedule.rb"
  8. puts
  9. exit 1
  10. end
  11. require 'rufus/scheduler'
  12. class HuginnScheduler
  13. attr_accessor :mutex
  14. def run_schedule(time)
  15. with_mutex do
  16. puts "Queuing schedule for #{time}"
  17. Agent.delay.run_schedule(time)
  18. end
  19. end
  20. def propagate!
  21. with_mutex do
  22. puts "Queuing event propagation"
  23. Agent.delay.receive!
  24. end
  25. end
  26. def cleanup_expired_events!
  27. with_mutex do
  28. puts "Running event cleanup"
  29. Event.delay.cleanup_expired!
  30. end
  31. end
  32. def with_mutex
  33. ActiveRecord::Base.connection_pool.with_connection do
  34. mutex.synchronize do
  35. yield
  36. end
  37. end
  38. end
  39. def run!
  40. self.mutex = Mutex.new
  41. rufus_scheduler = Rufus::Scheduler.new
  42. tzinfo_friendly_timezone = ActiveSupport::TimeZone::MAPPING[ENV['TIMEZONE'].present? ? ENV['TIMEZONE'] : "Pacific Time (US & Canada)"]
  43. # Schedule event propagation.
  44. rufus_scheduler.every '1m' do
  45. propagate!
  46. end
  47. # Schedule event cleanup.
  48. rufus_scheduler.cron "0 0 * * * " + tzinfo_friendly_timezone do
  49. cleanup_expired_events!
  50. end
  51. # Schedule repeating events.
  52. %w[1m 2m 5m 10m 30m 1h 2h 5h 12h 1d 2d 7d].each do |schedule|
  53. rufus_scheduler.every schedule do
  54. run_schedule "every_#{schedule}"
  55. end
  56. end
  57. # Schedule events for specific times.
  58. # Times are assumed to be in PST for now. Can store a user#timezone later.
  59. 24.times do |hour|
  60. rufus_scheduler.cron "0 #{hour} * * * " + tzinfo_friendly_timezone do
  61. if hour == 0
  62. run_schedule "midnight"
  63. elsif hour < 12
  64. run_schedule "#{hour}am"
  65. elsif hour == 12
  66. run_schedule "noon"
  67. else
  68. run_schedule "#{hour - 12}pm"
  69. end
  70. end
  71. end
  72. rufus_scheduler.join
  73. end
  74. end
  75. scheduler = HuginnScheduler.new
  76. scheduler.run!