que-scheduler 3.2.1 → 3.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6f254bc8751dac98fee9686fd5c239e9e57582fb
4
- data.tar.gz: 4aa6fddb651b9f99b02bb75fcd2a2e8aa4f904f4
3
+ metadata.gz: 2b504deabde4b9902e95944af14f2bd0820c6e7e
4
+ data.tar.gz: 9cecf4a0dcf0f6497096d0dfe5824c1452447c53
5
5
  SHA512:
6
- metadata.gz: 68aa99ec22631df458f58dc2c76bd57ecbf580982e7cb4389e703cdfcb90a4850099ca7a958ae96c80f089804d0ed200419536e123639efc56000da51ab8614c
7
- data.tar.gz: f3a19e704d97f15b84d0b550c2220a2beeb475b36d9bb8c499794f0f655cd42922d9a9472e09be93462705d7022e85b6ba81ca44fa95131346d3ab5d04b2b4c3
6
+ metadata.gz: f2ebae7e9453682a6ed07f84b46523e1a617df42d9ed1aca8f60abb314080a5285067c56bcbaafa6d908d5adf26e90ba810afa90d31c7ac9a5c8a6f36ab8d009
7
+ data.tar.gz: 3b6425695eaaa1519a8cb4ec579bb40e9eb5a3a4514ffc5bc74218f884f43cb0ee884b2c329753107f56fe1f0d0743bca7a975a5c41e175e9cb86da9e0c5fdd3
data/README.md CHANGED
@@ -183,6 +183,34 @@ As of migration `4`, two elements are added to the DB for que-scheduler to run.
183
183
  `que_scheduler_audit_enqueued`. The first tracks when the scheduler calculated what was necessary to run
184
184
  (if anything). The second then logs every job that the scheduler enqueues.
185
185
 
186
+ ## Testing Configuration
187
+
188
+ You can add tests to validate your configuration during the spec phase. This will perform a variety
189
+ of sanity checks and ensure that:
190
+
191
+ 1. The yml is present and valid
192
+ 1. The job classes exist and are descendants of Que::Job
193
+ 1. The cron fields are present and valid
194
+ 1. The queues (if present) are strings
195
+ 1. The priorities (if present) are integers
196
+ 1. The schedule_types are known
197
+
198
+ ```ruby
199
+
200
+ describe 'check que_schedule.yml' do
201
+ it 'loads the schedule from the default location' do
202
+ # Will raise an error if any config is invalid
203
+ expect(Que::Scheduler.schedule).not_to be nil
204
+ end
205
+ end
206
+ ```
207
+
208
+ ## Error Notification
209
+
210
+ If there is an error during scheduling, que-scheduler will report it using the [standard que error
211
+ notifier](https://github.com/chanks/que/blob/master/docs/error_handling.md#error-notifications).
212
+ The scheduler will then continue to retry indefinitely.
213
+
186
214
  ## Upgrading
187
215
 
188
216
  que-scheduler uses [semantic versioning](https://semver.org/), so major version changes will usually
@@ -8,9 +8,9 @@ module Que
8
8
  class DefinedJob < Hashie::Dash
9
9
  include Hashie::Extensions::Dash::PropertyTranslation
10
10
 
11
- SCHEDULE_TYPES = [
12
- SCHEDULE_TYPE_DEFAULT = :default,
13
- SCHEDULE_TYPE_EVERY_EVENT = :every_event
11
+ DEFINED_JOB_TYPES = [
12
+ DEFINED_JOB_TYPE_DEFAULT = :default,
13
+ DEFINED_JOB_TYPE_EVERY_EVENT = :every_event
14
14
  ].freeze
15
15
 
16
16
  property :name, required: true
@@ -24,8 +24,8 @@ module Que
24
24
  property :queue, transform_with: ->(v) { v.is_a?(String) ? v : err_field(:queue, v) }
25
25
  property :priority, transform_with: ->(v) { v.is_a?(Integer) ? v : err_field(:priority, v) }
26
26
  property :args
27
- property :schedule_type, default: SCHEDULE_TYPE_DEFAULT, transform_with: lambda { |v|
28
- v.to_sym.tap { |vs| SCHEDULE_TYPES.include?(vs) || err_field(:schedule_type, v) }
27
+ property :schedule_type, default: DEFINED_JOB_TYPE_DEFAULT, transform_with: lambda { |v|
28
+ v.to_sym.tap { |vs| DEFINED_JOB_TYPES.include?(vs) || err_field(:schedule_type, v) }
29
29
  }
30
30
 
31
31
  # Given a "last time", return the next Time the event will occur, or nil if it
@@ -50,23 +50,6 @@ module Que
50
50
  end
51
51
 
52
52
  class << self
53
- def defined_jobs
54
- schedule_string = IO.read(Que::Scheduler.configuration.schedule_location)
55
- @defined_jobs ||= YAML.safe_load(schedule_string).map do |k, v|
56
- Que::Scheduler::DefinedJob.new(
57
- {
58
- name: k,
59
- job_class: v['class'] || k,
60
- queue: v['queue'],
61
- args: v['args'],
62
- priority: v['priority'],
63
- cron: v['cron'],
64
- schedule_type: v['schedule_type'],
65
- }.compact
66
- ).freeze
67
- end
68
- end
69
-
70
53
  private
71
54
 
72
55
  def err_field(field, value)
@@ -90,7 +73,7 @@ module Que
90
73
  options = to_h.slice(:args, :queue, :priority, :job_class).compact
91
74
  args_array = args.is_a?(Array) ? args : Array(args)
92
75
 
93
- if schedule_type == DefinedJob::SCHEDULE_TYPE_EVERY_EVENT
76
+ if schedule_type == DefinedJob::DEFINED_JOB_TYPE_EVERY_EVENT
94
77
  missed_times.map do |time_missed|
95
78
  ToEnqueue.new(options.merge(args: [time_missed] + args_array))
96
79
  end
@@ -13,6 +13,9 @@ module Que
13
13
 
14
14
  class << self
15
15
  def migrate!(version:)
16
+ # Like que, Do not migrate test DBs.
17
+ return if defined?(Que::Testing)
18
+
16
19
  Que::Scheduler::Db.transaction do
17
20
  current = db_version
18
21
  if current < version
@@ -0,0 +1,51 @@
1
+ require_relative 'defined_job'
2
+
3
+ module Que
4
+ module Scheduler
5
+ class Schedule
6
+ class << self
7
+ def schedule
8
+ @schedule ||=
9
+ begin
10
+ location = Que::Scheduler.configuration.schedule_location
11
+ from_file(location)
12
+ end
13
+ end
14
+
15
+ def from_file(location)
16
+ yml = IO.read(location)
17
+ config_hash = YAML.safe_load(yml)
18
+ from_hash(config_hash)
19
+ end
20
+
21
+ def from_hash(config_hash)
22
+ config_hash.map do |name, defined_job_hash|
23
+ [name, hash_item_to_defined_job(name, defined_job_hash)]
24
+ end.to_h
25
+ end
26
+
27
+ private
28
+
29
+ def hash_item_to_defined_job(name, defined_job_hash)
30
+ Que::Scheduler::DefinedJob.new(
31
+ {
32
+ name: name,
33
+ job_class: defined_job_hash['class'] || name,
34
+ queue: defined_job_hash['queue'],
35
+ args: defined_job_hash['args'],
36
+ priority: defined_job_hash['priority'],
37
+ cron: defined_job_hash['cron'],
38
+ schedule_type: defined_job_hash['schedule_type'],
39
+ }.compact
40
+ ).freeze
41
+ end
42
+ end
43
+ end
44
+
45
+ class << self
46
+ def schedule
47
+ Schedule.schedule
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,6 +1,6 @@
1
1
  require 'que'
2
2
 
3
- require_relative 'defined_job'
3
+ require_relative 'schedule'
4
4
  require_relative 'enqueueing_calculator'
5
5
  require_relative 'scheduler_job_args'
6
6
  require_relative 'state_checks'
@@ -22,7 +22,7 @@ module Que
22
22
  scheduler_job_args = SchedulerJobArgs.build(options)
23
23
  logs = ["que-scheduler last ran at #{scheduler_job_args.last_run_time}."]
24
24
 
25
- result = EnqueueingCalculator.parse(DefinedJob.defined_jobs, scheduler_job_args)
25
+ result = EnqueueingCalculator.parse(Scheduler.schedule.values, scheduler_job_args)
26
26
  enqueued_jobs = enqueue_required_jobs(result, logs)
27
27
  enqueue_self_again(
28
28
  scheduler_job_args, scheduler_job_args.as_time, result.job_dictionary, enqueued_jobs
@@ -1,5 +1,5 @@
1
1
  module Que
2
2
  module Scheduler
3
- VERSION = '3.2.1'.freeze
3
+ VERSION = '3.2.2'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: que-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.1
4
+ version: 3.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harry Lascelles
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-01 00:00:00.000000000 Z
11
+ date: 2018-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -328,6 +328,7 @@ files:
328
328
  - lib/que/scheduler/migrations/3/up.sql
329
329
  - lib/que/scheduler/migrations/4/down.sql
330
330
  - lib/que/scheduler/migrations/4/up.sql
331
+ - lib/que/scheduler/schedule.rb
331
332
  - lib/que/scheduler/scheduler_job.rb
332
333
  - lib/que/scheduler/scheduler_job_args.rb
333
334
  - lib/que/scheduler/state_checks.rb