que-scheduler 3.2.1 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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