que-scheduler 4.0.0 → 4.0.1

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
  SHA256:
3
- metadata.gz: f6250ff590c3c280c0219d93ba57f85758a993fba1185d2064f1ba714c8c9e4c
4
- data.tar.gz: cb49ce9c63314888e05f48cc7cd5a98817deb0df03763b9aae756055261acdbb
3
+ metadata.gz: 78c9bc8d137dbe8a7c2428e50c615928c5d702d06432763b5346030fcbe81d5b
4
+ data.tar.gz: 3e639fd3f2263266fa25e25c637390f718e7751726feaefaa63f69cc91124f2d
5
5
  SHA512:
6
- metadata.gz: 9516e812e2d394d5ff7c23641db0344a34c3560ad4ed02a114cc9820beee8202da9416450fbfc68f92bfaa6aed4f5bf16d1df3d2476f487a58f6f0fb32141aa1
7
- data.tar.gz: 4d29b9a9161713935ccf1dcea71303195131fa8c27570b05a528fdec68d146b72c316ebeed523fabecda625c0128e4accca76ba0f47ba63fb8ff1d6106c96120
6
+ metadata.gz: b599d23b38d8263412e2a1fa7eb6621f564a628ae7b66800b0259667a76956e0a9e16824bd463a24edd0752119f30ec01ac3a1951e1d4abfc1d05ed1905745dc
7
+ data.tar.gz: 42691328a2727e14f15305e6baac0f0d7b3e4cb1d1a91c80d2ef1f7ab42db56e3bd1640884805adf381d65fbe2d6b3d7abbe2373e8ef49dfbeb737f790b76700
data/README.md CHANGED
@@ -36,8 +36,8 @@ resque-scheduler files, but with additional features.
36
36
  ## Schedule configuration
37
37
 
38
38
  The schedule file should be placed here: `config/que_schedule.yml`. Alternatively if you
39
- wish to generate the configuration dynamically, you can set it directly with
40
- `Que::Scheduler.schedule = some_hash`.
39
+ wish to generate the configuration dynamically, you can set it directly using an initializer
40
+ (see "Gem configuration" below).
41
41
 
42
42
  The file is a list of que job classes with arguments and a schedule frequency (in crontab
43
43
  syntax). The format is similar to the resque-scheduler format, though priorities must be supplied as
@@ -135,19 +135,34 @@ A job can have a `schedule_type` assigned to it. Valid values are:
135
135
 
136
136
  ## Gem configuration
137
137
 
138
- You can configure some aspects of the gem with an initializer. The default is given below.
138
+ You can configure some aspects of the gem with a config block (eg in a Rails initializer).
139
+ The default is given below. You can omit any configuration sections you are not intending to change.
140
+ It is quite likely you won't have to create this config at all.
139
141
 
140
142
  ```ruby
141
143
  Que::Scheduler.configure do |config|
142
144
  # The location of the schedule yaml file.
143
- config.schedule_location = ENV.fetch('QUE_SCHEDULER_CONFIG_LOCATION', 'config/que_schedule.yml')
145
+ config.schedule_location = ENV.fetch("QUE_SCHEDULER_CONFIG_LOCATION", "config/que_schedule.yml")
146
+
147
+ # The schedule as a hash. You can use this if you want to build the schedule yourself at runtime.
148
+ # This will override the above value if provided.
149
+ config.schedule = {
150
+ SpecifiedByHashTestJob: {
151
+ cron: "02 11 * * *"
152
+ }
153
+ }
144
154
 
145
- # Specify a transaction block adapter. By default, que-scheduler uses the one supplied by que.
146
- # However, if, for example you rely on listeners to ActiveRecord's exact `transaction` method, or
155
+ # The transaction block adapter. By default, que-scheduler uses the one supplied by que.
156
+ # However if, for example, you rely on listeners to ActiveRecord's exact `transaction` method, or
147
157
  # Sequel's DB.after_commit helper, then you can supply it here.
148
158
  config.transaction_adapter = ::Que.method(:transaction)
149
- end
150
159
 
160
+ # Which queue name the que-scheduler job should self-schedule on. Typically this is the default
161
+ # queue of que, which has a different name in Que 0.x ("") and 1.x ("default").
162
+ # It *must* be the "highest throughput" queue - do not work the scheduler on a "long
163
+ # running jobs" queue. It is very unlikely you will want to change this.
164
+ config.que_scheduler_queue = ENV.fetch("QUE_SCHEDULER_QUEUE", "" or "default")
165
+ end
151
166
  ```
152
167
 
153
168
  ## Scheduler Audit
@@ -159,8 +174,25 @@ migration tasks.
159
174
  Additionally, there is the audit table `que_scheduler_audit_enqueued`. This logs every job that
160
175
  the scheduler enqueues.
161
176
 
177
+ que-scheduler comes with the `QueSchedulerAuditClearDownJob` job built in that you can optionally
178
+ schedule to clear down audit rows if you don't need to retain them indefinitely. You should add this
179
+ to your own scheduler config yaml.
180
+
181
+ For example:
182
+
183
+ ```yaml
184
+ # This will clear down the oldest que-scheduler audit rows. Since que-scheduler
185
+ # runs approximately every minute, 129600 is 90 days.
186
+ Que::Scheduler::Jobs::QueSchedulerAuditClearDownJob:
187
+ cron: "0 0 * * *"
188
+ args:
189
+ retain_row_count: 129600
190
+ ```
191
+
192
+ ## Required migrations
193
+
162
194
  When there is a major version (breaking) change, a migration should be run in. The version of the
163
- latest migration proceeds at a faster rate than the version of the gem, eg if the gem is on version
195
+ latest migration proceeds at a faster rate than the version of the gem. eg If the gem is on version
164
196
  3 then the migrations may be on version 6).
165
197
 
166
198
  To run in all the migrations required up to a number, just migrate to that number with one line, and
@@ -188,23 +220,6 @@ The changes in past migrations were:
188
220
  | 5 | Dropped an unnecessary index |
189
221
  | 6 | Enforced single scheduler job at the trigger level |
190
222
 
191
- ## Built in optional job for audit clear down
192
-
193
- que-scheduler comes with the `QueSchedulerAuditClearDownJob` job built in that you can optionally
194
- schedule to clear down audit rows if you don't need to retain them indefinitely. You should add this
195
- to your own scheduler config yaml.
196
-
197
- For example:
198
-
199
- ```yaml
200
- # This will clear down the oldest que-scheduler audit rows. Since que-scheduler
201
- # runs approximately every minute, 129600 is 90 days.
202
- Que::Scheduler::Jobs::QueSchedulerAuditClearDownJob:
203
- cron: "0 0 * * *"
204
- args:
205
- retain_row_count: 129600
206
- ```
207
-
208
223
  ## HA Redundancy and DB restores
209
224
 
210
225
  Because of the way que-scheduler works, it requires no additional processes. It is, itself, a Que job.
@@ -1,6 +1,6 @@
1
1
  require "que/scheduler/version"
2
2
  require "que/scheduler/version_support"
3
- require "que/scheduler/config"
3
+ require "que/scheduler/configuration"
4
4
  require "que/scheduler/scheduler_job"
5
5
  require "que/scheduler/db"
6
6
  require "que/scheduler/audit"
@@ -0,0 +1,35 @@
1
+ require "que"
2
+ require_relative "version_support"
3
+
4
+ module Que
5
+ module Scheduler
6
+ class Configuration
7
+ attr_accessor :schedule_location
8
+ attr_accessor :schedule
9
+ attr_accessor :transaction_adapter
10
+ attr_accessor :que_scheduler_queue
11
+ end
12
+
13
+ class << self
14
+ attr_accessor :configuration
15
+
16
+ def configure
17
+ self.configuration ||= Configuration.new
18
+ yield(configuration)
19
+ end
20
+
21
+ def apply_defaults
22
+ configure do |config|
23
+ config.schedule_location =
24
+ ENV.fetch("QUE_SCHEDULER_CONFIG_LOCATION", "config/que_schedule.yml")
25
+ config.transaction_adapter = ::Que.method(:transaction)
26
+ config.que_scheduler_queue =
27
+ ENV.fetch("QUE_SCHEDULER_QUEUE", Que::Scheduler::VersionSupport.default_scheduler_queue)
28
+ config.schedule = nil
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ Que::Scheduler.apply_defaults
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "config"
3
+ require_relative "configuration"
4
4
 
5
5
  module Que
6
6
  module Scheduler
@@ -1,21 +1,31 @@
1
+ require_relative "configuration"
1
2
  require_relative "defined_job"
2
3
 
3
4
  module Que
4
5
  module Scheduler
5
6
  class Schedule
6
7
  class << self
8
+ # The main method for determining the schedule. It has to evaluate the schedule as late as
9
+ # possible (ie just as it is about to be used) as we cannot guarantee we are in a Rails
10
+ # app with initializers. In a future release this may change to "fast fail" in Rails by
11
+ # checking the config up front.
7
12
  def schedule
8
13
  @schedule ||=
9
14
  begin
10
- location = Que::Scheduler.configuration.schedule_location
11
- from_file(location)
15
+ configuration = Que::Scheduler.configuration
16
+ if !configuration.schedule.nil?
17
+ # If an explicit schedule as a hash has been defined, use that.
18
+ from_hash(configuration.schedule)
19
+ elsif File.exist?(configuration.schedule_location)
20
+ # If the schedule is defined as a file location, then load it and return it.
21
+ from_file(configuration.schedule_location)
22
+ else
23
+ raise "No que-scheduler config set, or file found " \
24
+ "at #{configuration.schedule_location}"
25
+ end
12
26
  end
13
27
  end
14
28
 
15
- def schedule=(schedule_config)
16
- @schedule = schedule_config.nil? ? nil : from_yaml(schedule_config)
17
- end
18
-
19
29
  def from_file(location)
20
30
  from_yaml(IO.read(location))
21
31
  end
@@ -69,10 +79,6 @@ module Que
69
79
  def schedule
70
80
  Schedule.schedule
71
81
  end
72
-
73
- def schedule=(value)
74
- Schedule.schedule = value
75
- end
76
82
  end
77
83
  end
78
84
  end
@@ -1,5 +1,5 @@
1
1
  module Que
2
2
  module Scheduler
3
- VERSION = "4.0.0".freeze
3
+ VERSION = "4.0.1".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: que-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harry Lascelles
@@ -112,6 +112,20 @@ dependencies:
112
112
  - - ">="
113
113
  - !ruby/object:Gem::Version
114
114
  version: '0'
115
+ - !ruby/object:Gem::Dependency
116
+ name: climate_control
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
115
129
  - !ruby/object:Gem::Dependency
116
130
  name: combustion
117
131
  requirement: !ruby/object:Gem::Requirement
@@ -319,7 +333,7 @@ files:
319
333
  - lib/que-scheduler.rb
320
334
  - lib/que/scheduler.rb
321
335
  - lib/que/scheduler/audit.rb
322
- - lib/que/scheduler/config.rb
336
+ - lib/que/scheduler/configuration.rb
323
337
  - lib/que/scheduler/db.rb
324
338
  - lib/que/scheduler/defined_job.rb
325
339
  - lib/que/scheduler/enqueueing_calculator.rb
@@ -1,27 +0,0 @@
1
- require "que"
2
- require_relative "version_support"
3
-
4
- module Que
5
- module Scheduler
6
- class << self
7
- attr_accessor :configuration
8
- end
9
-
10
- def self.configure
11
- self.configuration ||= Configuration.new
12
- yield(configuration)
13
- end
14
-
15
- class Configuration
16
- attr_accessor :schedule_location
17
- attr_accessor :transaction_adapter
18
- attr_accessor :que_scheduler_queue
19
- end
20
- end
21
- end
22
-
23
- Que::Scheduler.configure do |config|
24
- config.schedule_location = ENV.fetch("QUE_SCHEDULER_CONFIG_LOCATION", "config/que_schedule.yml")
25
- config.transaction_adapter = ::Que.method(:transaction)
26
- config.que_scheduler_queue = Que::Scheduler::VersionSupport.default_scheduler_queue
27
- end