From 1f4d54a11204299c0aebce06d0e52340cdf8cdd5 Mon Sep 17 00:00:00 2001 From: Dominik Sander Date: Thu, 29 Dec 2016 10:46:27 +0100 Subject: [PATCH 1/3] Run every_X schedules on fixed times Makes the schedules more predictable by running them on fixes hours/minutes instead of X seconds after startup. Changed the "every 7d" schedule to "every monday" night to make it clearer when it runs because every 7 days is ambiguous without a explicit start date. Fixes #1103 Possibly related to #1840 Example runtimes: ``` every_1m (*/1 * * * *) 2016-12-29 11:28:00 +0100 2016-12-29 11:29:00 +0100 2016-12-29 11:30:00 +0100 2016-12-29 11:31:00 +0100 2016-12-29 11:32:00 +0100 2016-12-29 11:33:00 +0100 2016-12-29 11:34:00 +0100 2016-12-29 11:35:00 +0100 2016-12-29 11:36:00 +0100 2016-12-29 11:37:00 +0100 every_2m (*/2 * * * *) 2016-12-29 11:28:00 +0100 2016-12-29 11:30:00 +0100 2016-12-29 11:32:00 +0100 2016-12-29 11:34:00 +0100 2016-12-29 11:36:00 +0100 2016-12-29 11:38:00 +0100 2016-12-29 11:40:00 +0100 2016-12-29 11:42:00 +0100 2016-12-29 11:44:00 +0100 2016-12-29 11:46:00 +0100 every_5m (*/5 * * * *) 2016-12-29 11:30:00 +0100 2016-12-29 11:35:00 +0100 2016-12-29 11:40:00 +0100 2016-12-29 11:45:00 +0100 2016-12-29 11:50:00 +0100 2016-12-29 11:55:00 +0100 2016-12-29 12:00:00 +0100 2016-12-29 12:05:00 +0100 2016-12-29 12:10:00 +0100 2016-12-29 12:15:00 +0100 every_10m (*/10 * * * *) 2016-12-29 11:30:00 +0100 2016-12-29 11:40:00 +0100 2016-12-29 11:50:00 +0100 2016-12-29 12:00:00 +0100 2016-12-29 12:10:00 +0100 2016-12-29 12:20:00 +0100 2016-12-29 12:30:00 +0100 2016-12-29 12:40:00 +0100 2016-12-29 12:50:00 +0100 2016-12-29 13:00:00 +0100 every_30m (*/30 * * * *) 2016-12-29 11:30:00 +0100 2016-12-29 12:00:00 +0100 2016-12-29 12:30:00 +0100 2016-12-29 13:00:00 +0100 2016-12-29 13:30:00 +0100 2016-12-29 14:00:00 +0100 2016-12-29 14:30:00 +0100 2016-12-29 15:00:00 +0100 2016-12-29 15:30:00 +0100 2016-12-29 16:00:00 +0100 every_1h (0 */1 * * *) 2016-12-29 12:00:00 +0100 2016-12-29 13:00:00 +0100 2016-12-29 14:00:00 +0100 2016-12-29 15:00:00 +0100 2016-12-29 16:00:00 +0100 2016-12-29 17:00:00 +0100 2016-12-29 18:00:00 +0100 2016-12-29 19:00:00 +0100 2016-12-29 20:00:00 +0100 2016-12-29 21:00:00 +0100 every_2h (0 */2 * * *) 2016-12-29 12:00:00 +0100 2016-12-29 14:00:00 +0100 2016-12-29 16:00:00 +0100 2016-12-29 18:00:00 +0100 2016-12-29 20:00:00 +0100 2016-12-29 22:00:00 +0100 2016-12-30 00:00:00 +0100 2016-12-30 02:00:00 +0100 2016-12-30 04:00:00 +0100 2016-12-30 06:00:00 +0100 every_5h (0 */5 * * *) 2016-12-29 15:00:00 +0100 2016-12-29 20:00:00 +0100 2016-12-30 00:00:00 +0100 2016-12-30 05:00:00 +0100 2016-12-30 10:00:00 +0100 2016-12-30 15:00:00 +0100 2016-12-30 20:00:00 +0100 2016-12-31 00:00:00 +0100 2016-12-31 05:00:00 +0100 2016-12-31 10:00:00 +0100 every_12h (0 */12 * * *) 2016-12-29 12:00:00 +0100 2016-12-30 00:00:00 +0100 2016-12-30 12:00:00 +0100 2016-12-31 00:00:00 +0100 2016-12-31 12:00:00 +0100 2017-01-01 00:00:00 +0100 2017-01-01 12:00:00 +0100 2017-01-02 00:00:00 +0100 2017-01-02 12:00:00 +0100 2017-01-03 00:00:00 +0100 every_1d (0 0 */1 * *) 2016-12-30 00:00:00 +0100 2016-12-31 00:00:00 +0100 2017-01-01 00:00:00 +0100 2017-01-02 00:00:00 +0100 2017-01-03 00:00:00 +0100 2017-01-04 00:00:00 +0100 2017-01-05 00:00:00 +0100 2017-01-06 00:00:00 +0100 2017-01-07 00:00:00 +0100 2017-01-08 00:00:00 +0100 every_2d (0 0 */2 * *) 2016-12-31 00:00:00 +0100 2017-01-01 00:00:00 +0100 2017-01-03 00:00:00 +0100 2017-01-05 00:00:00 +0100 2017-01-07 00:00:00 +0100 2017-01-09 00:00:00 +0100 2017-01-11 00:00:00 +0100 2017-01-13 00:00:00 +0100 2017-01-15 00:00:00 +0100 2017-01-17 00:00:00 +0100 every_7d (0 0 * * 1) 2017-01-02 00:00:00 +0100 2017-01-09 00:00:00 +0100 2017-01-16 00:00:00 +0100 2017-01-23 00:00:00 +0100 2017-01-30 00:00:00 +0100 2017-02-06 00:00:00 +0100 2017-02-13 00:00:00 +0100 2017-02-20 00:00:00 +0100 2017-02-27 00:00:00 +0100 2017-03-06 00:00:00 +0100 ``` --- Gemfile | 2 +- Gemfile.lock | 14 ++++++++++---- app/models/agent.rb | 4 ++-- lib/huginn_scheduler.rb | 18 ++++++++++++++++-- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index 016c72dd..57411866 100644 --- a/Gemfile +++ b/Gemfile @@ -118,7 +118,7 @@ gem 'multi_xml' gem 'nokogiri' gem 'omniauth', '~> 1.3.1' gem 'rails', '~> 5.0.1' -gem 'rufus-scheduler', '~> 3.0.8', require: false +gem 'rufus-scheduler', github: 'jmettraux/rufus-scheduler', ref: '5ca549179f2e47b9e79551b9a1f3e4e273c35ac0', require: false gem 'sass-rails', '~> 5.0.6' gem 'select2-rails', '~> 3.5.4' gem 'spectrum-rails' diff --git a/Gemfile.lock b/Gemfile.lock index 4bf8109d..3ddcf0c9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -38,6 +38,14 @@ GIT oauth2 (~> 1) rest-client (~> 1.8) +GIT + remote: https://github.com/jmettraux/rufus-scheduler.git + revision: 5ca549179f2e47b9e79551b9a1f3e4e273c35ac0 + ref: 5ca549179f2e47b9e79551b9a1f3e4e273c35ac0 + specs: + rufus-scheduler (3.3.2) + tzinfo + GIT remote: https://github.com/lostisland/faraday_middleware.git revision: 59088da02940d0ee2010b2e3156343346767c31e @@ -479,8 +487,6 @@ GEM rest-client ruby-growl (4.1) uuid (~> 2.3, >= 2.3.5) - rufus-scheduler (3.0.9) - tzinfo safe_yaml (1.0.4) sass (3.4.14) sass-rails (5.0.6) @@ -675,7 +681,7 @@ DEPENDENCIES rspec-rails (~> 3.5.2) rturk (~> 2.12.1) ruby-growl (~> 4.1.0) - rufus-scheduler (~> 3.0.8) + rufus-scheduler! sass-rails (~> 5.0.6) select2-rails (~> 3.5.4) shoulda-matchers @@ -702,7 +708,7 @@ DEPENDENCIES xmpp4r (~> 0.5.6) RUBY VERSION - ruby 2.3.3p222 + ruby 2.3.1p112 BUNDLED WITH 1.13.7 diff --git a/app/models/agent.rb b/app/models/agent.rb index 66672d28..5d664240 100644 --- a/app/models/agent.rb +++ b/app/models/agent.rb @@ -19,8 +19,8 @@ class Agent < ActiveRecord::Base load_types_in "Agents" - SCHEDULES = %w[every_1m every_2m every_5m every_10m every_30m every_1h every_2h every_5h every_12h every_1d every_2d every_7d - midnight 1am 2am 3am 4am 5am 6am 7am 8am 9am 10am 11am noon 1pm 2pm 3pm 4pm 5pm 6pm 7pm 8pm 9pm 10pm 11pm never] + SCHEDULES = %w[every_1m every_2m every_5m every_10m every_30m every_1h every_2h every_5h every_12h every_1d every_2d] + [OpenStruct.new(to_s: 'every_7d', humanize: 'Every Monday')] + + %w[midnight 1am 2am 3am 4am 5am 6am 7am 8am 9am 10am 11am noon 1pm 2pm 3pm 4pm 5pm 6pm 7pm 8pm 9pm 10pm 11pm never] EVENT_RETENTION_SCHEDULES = [["Forever", 0], ['1 hour', 1.hour], ['6 hours', 6.hours], ["1 day", 1.day], *([2, 3, 4, 5, 7, 14, 21, 30, 45, 90, 180, 365].map {|n| ["#{n} days", n.days] })] diff --git a/lib/huginn_scheduler.rb b/lib/huginn_scheduler.rb index bed8094d..05e83a03 100644 --- a/lib/huginn_scheduler.rb +++ b/lib/huginn_scheduler.rb @@ -96,6 +96,20 @@ class HuginnScheduler < LongRunnable::Worker include LongRunnable FAILED_JOBS_TO_KEEP = 100 + SCHEDULE_TO_CRON = { + '1m' => '*/1 * * * *', + '2m' => '*/2 * * * *', + '5m' => '*/5 * * * *', + '10m' => '*/10 * * * *', + '30m' => '*/30 * * * *', + '1h' => '0 */1 * * *', + '2h' => '0 */2 * * *', + '5h' => '0 */5 * * *', + '12h' => '0 */12 * * *', + '1d' => '0 0 */1 * *', + '2d' => '0 0 */2 * *', + '7d' => '0 0 * * 1', + } def setup tzinfo_friendly_timezone = ActiveSupport::TimeZone::MAPPING[ENV['TIMEZONE'].presence || "Pacific Time (US & Canada)"] @@ -116,8 +130,8 @@ class HuginnScheduler < LongRunnable::Worker end # Schedule repeating events. - %w[1m 2m 5m 10m 30m 1h 2h 5h 12h 1d 2d 7d].each do |schedule| - every schedule do + SCHEDULE_TO_CRON.keys.each do |schedule| + cron "#{SCHEDULE_TO_CRON[schedule]} #{tzinfo_friendly_timezone}" do run_schedule "every_#{schedule}" end end From d3cbd14dd59dd4f200fce7d8aaa0e22b21087530 Mon Sep 17 00:00:00 2001 From: Dominik Sander Date: Thu, 29 Dec 2016 21:33:06 +0100 Subject: [PATCH 2/3] Simplify cronlines --- lib/huginn_scheduler.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/huginn_scheduler.rb b/lib/huginn_scheduler.rb index 05e83a03..33e533e5 100644 --- a/lib/huginn_scheduler.rb +++ b/lib/huginn_scheduler.rb @@ -102,11 +102,11 @@ class HuginnScheduler < LongRunnable::Worker '5m' => '*/5 * * * *', '10m' => '*/10 * * * *', '30m' => '*/30 * * * *', - '1h' => '0 */1 * * *', + '1h' => '0 * * * *', '2h' => '0 */2 * * *', '5h' => '0 */5 * * *', '12h' => '0 */12 * * *', - '1d' => '0 0 */1 * *', + '1d' => '0 0 * * *', '2d' => '0 0 */2 * *', '7d' => '0 0 * * 1', } From 1ecb78dfd36689dbf258fd54f7da7b0fd4627e20 Mon Sep 17 00:00:00 2001 From: Dominik Sander Date: Thu, 5 Jan 2017 16:42:47 +0100 Subject: [PATCH 3/3] Update rufus-scheduler to released version --- Gemfile | 2 +- Gemfile.lock | 14 ++++---------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/Gemfile b/Gemfile index 57411866..76ac4927 100644 --- a/Gemfile +++ b/Gemfile @@ -118,7 +118,7 @@ gem 'multi_xml' gem 'nokogiri' gem 'omniauth', '~> 1.3.1' gem 'rails', '~> 5.0.1' -gem 'rufus-scheduler', github: 'jmettraux/rufus-scheduler', ref: '5ca549179f2e47b9e79551b9a1f3e4e273c35ac0', require: false +gem 'rufus-scheduler', '~> 3.3.2', require: false gem 'sass-rails', '~> 5.0.6' gem 'select2-rails', '~> 3.5.4' gem 'spectrum-rails' diff --git a/Gemfile.lock b/Gemfile.lock index 3ddcf0c9..14d8642b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -38,14 +38,6 @@ GIT oauth2 (~> 1) rest-client (~> 1.8) -GIT - remote: https://github.com/jmettraux/rufus-scheduler.git - revision: 5ca549179f2e47b9e79551b9a1f3e4e273c35ac0 - ref: 5ca549179f2e47b9e79551b9a1f3e4e273c35ac0 - specs: - rufus-scheduler (3.3.2) - tzinfo - GIT remote: https://github.com/lostisland/faraday_middleware.git revision: 59088da02940d0ee2010b2e3156343346767c31e @@ -487,6 +479,8 @@ GEM rest-client ruby-growl (4.1) uuid (~> 2.3, >= 2.3.5) + rufus-scheduler (3.3.2) + tzinfo safe_yaml (1.0.4) sass (3.4.14) sass-rails (5.0.6) @@ -681,7 +675,7 @@ DEPENDENCIES rspec-rails (~> 3.5.2) rturk (~> 2.12.1) ruby-growl (~> 4.1.0) - rufus-scheduler! + rufus-scheduler (~> 3.3.2) sass-rails (~> 5.0.6) select2-rails (~> 3.5.4) shoulda-matchers @@ -708,7 +702,7 @@ DEPENDENCIES xmpp4r (~> 0.5.6) RUBY VERSION - ruby 2.3.1p112 + ruby 2.3.3p222 BUNDLED WITH 1.13.7