sidekiq-scheduler 4.0.3 → 5.0.1
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 +4 -4
- data/CHANGELOG.md +30 -0
- data/README.md +46 -39
- data/lib/sidekiq-scheduler/config.rb +80 -0
- data/lib/sidekiq-scheduler/manager.rb +17 -26
- data/lib/sidekiq-scheduler/redis_manager.rb +3 -3
- data/lib/sidekiq-scheduler/scheduler.rb +23 -17
- data/lib/sidekiq-scheduler/sidekiq_adapter.rb +80 -0
- data/lib/sidekiq-scheduler/version.rb +1 -1
- data/lib/sidekiq-scheduler/web.rb +1 -1
- data/lib/sidekiq-scheduler.rb +6 -17
- metadata +15 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff0427944d5e42f269323d2178f99e85883f0bf1c319606e492fd3c2f248cebc
|
4
|
+
data.tar.gz: 2589826435a6609724de6adae9c2376195cf2336907a30f836067aebb3d00b70
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 342671556514ae49da4d84b4a6e2e014060d69b7149284ce079bf56dedbf51d5c6e6e31987606e05e62d9d1070c47ff15e464dba10b69b1bf0292811c43292d8
|
7
|
+
data.tar.gz: b81d626a69832dec123de5fde3d255d1f4c4f3158a7298d26c10746b4e5444bdabc74f6f47e6da2823fc0786e9cb136e9ed59c41555674d1b5ede8e075194d4f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,33 @@
|
|
1
|
+
# 5.0.1
|
2
|
+
|
3
|
+
- [**ENHANCEMENT**] Adds Ruby 3.2 to the CI matrix. [#420](https://github.com/sidekiq-scheduler/sidekiq-scheduler/pull/420)
|
4
|
+
- [**DOCS**] README: refer to v5 as released. [#421](https://github.com/sidekiq-scheduler/sidekiq-scheduler/pull/421)
|
5
|
+
- [**FIX**] Fix dependency on Rails `.present?` method. [#425](https://github.com/sidekiq-scheduler/sidekiq-scheduler/pull/425)
|
6
|
+
|
7
|
+
# 5.0.0
|
8
|
+
|
9
|
+
- [**FIX**] Ensure generated scheduled time has a precision of 3 miliseconds. [#418](https://github.com/sidekiq-scheduler/sidekiq-scheduler/pull/418)
|
10
|
+
|
11
|
+
*Note 1:* Check [# 5.0.0.beta1](#500beta1) & [# 5.0.0.beta2](#500beta2) releases for breaking changes.
|
12
|
+
|
13
|
+
*Note 2:* Sidekiq Embedding is yet not supported, see [#419](https://github.com/sidekiq-scheduler/sidekiq-scheduler/issues/419) for more details.
|
14
|
+
|
15
|
+
|
16
|
+
# 5.0.0.beta2
|
17
|
+
|
18
|
+
- [**FIX**] Drop explicit redis dependency [#416](https://github.com/sidekiq-scheduler/sidekiq-scheduler/pull/416)
|
19
|
+
|
20
|
+
# 5.0.0.beta1
|
21
|
+
|
22
|
+
- [**BREAKING CHANGE**] Moves all sidekiq-scheduler config options under the `scheduler` key in the `sidekiq.yml` file [#412](https://github.com/sidekiq-scheduler/sidekiq-scheduler/pull/412)
|
23
|
+
- If you're migrating from v4 to v5, any `sidekiq-scheduler` config you may have in your `sidekiq.yml` should be moved under the `scheduler` key.
|
24
|
+
- See [#412](https://github.com/sidekiq-scheduler/sidekiq-scheduler/pull/412) to see which are the config options that you need to move under the `scheduler` key.
|
25
|
+
|
26
|
+
- [**BREAKING CHANGE**] Drop support for EOL Ruby & Sidekiq versions (Ruby: `2.5.x` & `2.6.x`; Sidekiq: `4.x` & `5.x`) [#411](https://github.com/sidekiq-scheduler/sidekiq-scheduler/pull/411)
|
27
|
+
|
28
|
+
- [**FIX**] Add support for Sidekiq 7 [#410](https://github.com/sidekiq-scheduler/sidekiq-scheduler/pull/410)
|
29
|
+
|
30
|
+
|
1
31
|
# 4.0.3
|
2
32
|
|
3
33
|
- [**GH Actions**] Add dependabot for GitHub Actions [#390](https://github.com/sidekiq-scheduler/sidekiq-scheduler/pull/390)
|
data/README.md
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
`sidekiq-scheduler` is an extension to [Sidekiq](http://github.com/mperham/sidekiq) that
|
19
19
|
pushes jobs in a scheduled way, mimicking cron utility.
|
20
20
|
|
21
|
-
__Note:__ Current branch contains work of the
|
21
|
+
__Note:__ Current branch contains work of the v5 release, if you are looking for version 2.2.\*, 3.\*, or 4.\*, go to [2.2-stable branch](https://github.com/sidekiq-scheduler/sidekiq-scheduler/tree/2.2-stable) / [v3-stable](https://github.com/sidekiq-scheduler/sidekiq-scheduler/tree/v3-stable) / [v4-stable](https://github.com/sidekiq-scheduler/sidekiq-scheduler/tree/v4-stable).
|
22
22
|
|
23
23
|
## Installation
|
24
24
|
|
@@ -48,10 +48,11 @@ end
|
|
48
48
|
``` yaml
|
49
49
|
# config/sidekiq.yml
|
50
50
|
|
51
|
-
:
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
:scheduler:
|
52
|
+
:schedule:
|
53
|
+
hello_world:
|
54
|
+
cron: '0 * * * * *' # Runs once per minute
|
55
|
+
class: HelloWorld
|
55
56
|
```
|
56
57
|
|
57
58
|
Run sidekiq:
|
@@ -83,40 +84,41 @@ Configuration options are placed inside `sidekiq.yml` config file.
|
|
83
84
|
Available options are:
|
84
85
|
|
85
86
|
``` yaml
|
86
|
-
:dynamic: <if true the schedule can be modified in runtime [false by default]>
|
87
|
-
:dynamic_every: <if dynamic is true, the schedule is reloaded every interval [5s by default]>
|
88
|
-
:enabled: <enables scheduler if true [true by default]>
|
89
87
|
:scheduler:
|
88
|
+
:dynamic: <if true the schedule can be modified in runtime [false by default]>
|
89
|
+
:dynamic_every: <if dynamic is true, the schedule is reloaded every interval [5s by default]>
|
90
|
+
:enabled: <enables scheduler if true [true by default]>
|
90
91
|
:listened_queues_only: <push jobs whose queue is being listened by sidekiq [false by default]>
|
91
|
-
:rufus_scheduler_options: <Set custom options for rufus scheduler, like max_work_threads [{} by default]>
|
92
|
+
:rufus_scheduler_options: <Set custom options for rufus scheduler, like max_work_threads [{} by default]>
|
92
93
|
```
|
93
94
|
|
94
95
|
## Schedule configuration
|
95
96
|
|
96
|
-
The schedule is configured through the `:schedule` config entry in the sidekiq config file:
|
97
|
+
The schedule is configured through the `:scheduler:` -> `:schedule` config entry in the sidekiq config file:
|
97
98
|
|
98
99
|
``` yaml
|
99
|
-
:
|
100
|
-
|
101
|
-
|
100
|
+
:scheduler:
|
101
|
+
:schedule:
|
102
|
+
CancelAbandonedOrders:
|
103
|
+
cron: '0 */5 * * * *' # Runs when second = 0, every 5 minutes
|
102
104
|
|
103
|
-
|
104
|
-
|
105
|
+
queue_documents_for_indexing:
|
106
|
+
cron: '0 0 * * * *' # Runs every hour
|
105
107
|
|
106
|
-
|
107
|
-
|
108
|
-
|
108
|
+
# By default the job name will be taken as worker class name.
|
109
|
+
# If you want to have a different job name and class name, provide the 'class' option
|
110
|
+
class: QueueDocuments
|
109
111
|
|
110
|
-
|
111
|
-
|
112
|
-
|
112
|
+
queue: slow
|
113
|
+
args: ['*.pdf']
|
114
|
+
description: "This job queues pdf content for indexing in solr"
|
113
115
|
|
114
|
-
|
115
|
-
|
116
|
-
|
116
|
+
# Enable the `metadata` argument which will pass a Hash containing the schedule metadata
|
117
|
+
# as the last argument of the `perform` method. `false` by default.
|
118
|
+
include_metadata: true
|
117
119
|
|
118
|
-
|
119
|
-
|
120
|
+
# Enable / disable a job. All jobs are enabled by default.
|
121
|
+
enabled: true
|
120
122
|
```
|
121
123
|
|
122
124
|
### Schedule metadata
|
@@ -157,9 +159,10 @@ Cron, every, and interval types push jobs into sidekiq in a recurrent manner.
|
|
157
159
|
`cron` follows the same pattern as cron utility, with seconds resolution.
|
158
160
|
|
159
161
|
``` yaml
|
160
|
-
:
|
161
|
-
|
162
|
-
|
162
|
+
:scheduler:
|
163
|
+
:schedule:
|
164
|
+
HelloWorld:
|
165
|
+
cron: '0 * * * * *' # Runs when second = 0
|
163
166
|
```
|
164
167
|
|
165
168
|
`every` triggers following a given frequency:
|
@@ -250,7 +253,8 @@ When `:dynamic` flag is set to `true`, schedule changes are loaded every 5 secon
|
|
250
253
|
|
251
254
|
``` yaml
|
252
255
|
# config/sidekiq.yml
|
253
|
-
:
|
256
|
+
:scheduler:
|
257
|
+
:dynamic: true
|
254
258
|
```
|
255
259
|
|
256
260
|
If `:dynamic` flag is set to `false`, you'll have to reload the schedule manually in sidekiq
|
@@ -299,8 +303,9 @@ You can also override the thread pool size in Rufus Scheduler by setting the fol
|
|
299
303
|
---
|
300
304
|
...
|
301
305
|
|
302
|
-
|
303
|
-
|
306
|
+
:scheduler:
|
307
|
+
rufus_scheduler_options:
|
308
|
+
max_work_threads: 5
|
304
309
|
|
305
310
|
...
|
306
311
|
```
|
@@ -386,12 +391,13 @@ Say you have one process with the schedule:
|
|
386
391
|
|
387
392
|
:queues:
|
388
393
|
- default
|
389
|
-
:
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
394
|
+
:scheduler:
|
395
|
+
:schedule:
|
396
|
+
do_something_every_minute:
|
397
|
+
class: DoSomethingJob
|
398
|
+
args: matey
|
399
|
+
queue: :scheduler
|
400
|
+
cron: '0 * * * * * America/Los_Angeles'
|
395
401
|
```
|
396
402
|
|
397
403
|
And a separate separate configured process without one:
|
@@ -401,7 +407,8 @@ And a separate separate configured process without one:
|
|
401
407
|
- scheduler
|
402
408
|
|
403
409
|
## NOTE Disable the Scheduler
|
404
|
-
:
|
410
|
+
:scheduler:
|
411
|
+
:enabled: false
|
405
412
|
```
|
406
413
|
|
407
414
|
### Details
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module SidekiqScheduler
|
2
|
+
class Config
|
3
|
+
# We have to set the default as nil because the scheduler could be instantiated without
|
4
|
+
# passing the sidekiq config, and in those scenarios we don't want to fail
|
5
|
+
def initialize(sidekiq_config: nil, without_defaults: false)
|
6
|
+
@sidekiq_config = sidekiq_config
|
7
|
+
@scheduler_config = fetch_scheduler_config(sidekiq_config, without_defaults)
|
8
|
+
end
|
9
|
+
|
10
|
+
def enabled?
|
11
|
+
scheduler_config[:enabled]
|
12
|
+
end
|
13
|
+
|
14
|
+
def enabled=(value)
|
15
|
+
scheduler_config[:enabled] = value
|
16
|
+
end
|
17
|
+
|
18
|
+
def dynamic?
|
19
|
+
scheduler_config[:dynamic]
|
20
|
+
end
|
21
|
+
|
22
|
+
def dynamic=(value)
|
23
|
+
scheduler_config[:dynamic] = value
|
24
|
+
end
|
25
|
+
|
26
|
+
def dynamic_every?
|
27
|
+
scheduler_config[:dynamic_every]
|
28
|
+
end
|
29
|
+
|
30
|
+
def dynamic_every=(value)
|
31
|
+
scheduler_config[:dynamic_every] = value
|
32
|
+
end
|
33
|
+
|
34
|
+
def schedule
|
35
|
+
scheduler_config[:schedule]
|
36
|
+
end
|
37
|
+
|
38
|
+
def schedule=(value)
|
39
|
+
scheduler_config[:schedule] = value
|
40
|
+
end
|
41
|
+
|
42
|
+
def listened_queues_only?
|
43
|
+
scheduler_config[:listened_queues_only]
|
44
|
+
end
|
45
|
+
|
46
|
+
def listened_queues_only=(value)
|
47
|
+
scheduler_config[:listened_queues_only] = value
|
48
|
+
end
|
49
|
+
|
50
|
+
def rufus_scheduler_options
|
51
|
+
scheduler_config[:rufus_scheduler_options]
|
52
|
+
end
|
53
|
+
|
54
|
+
def rufus_scheduler_options=(value)
|
55
|
+
scheduler_config[:rufus_scheduler_options] = value
|
56
|
+
end
|
57
|
+
|
58
|
+
def sidekiq_queues
|
59
|
+
SidekiqScheduler::SidekiqAdapter.sidekiq_queues(sidekiq_config)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
attr_reader :scheduler_config
|
65
|
+
attr_reader :sidekiq_config
|
66
|
+
|
67
|
+
DEFAULT_OPTIONS = {
|
68
|
+
enabled: true,
|
69
|
+
dynamic: false,
|
70
|
+
dynamic_every: '5s',
|
71
|
+
schedule: {},
|
72
|
+
rufus_scheduler_options: {}
|
73
|
+
}.freeze
|
74
|
+
|
75
|
+
def fetch_scheduler_config(sidekiq_config, without_defaults)
|
76
|
+
conf = SidekiqScheduler::SidekiqAdapter.fetch_scheduler_config_from_sidekiq(sidekiq_config)
|
77
|
+
without_defaults ? conf : DEFAULT_OPTIONS.merge(conf)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'redis'
|
2
|
-
|
3
1
|
require 'sidekiq-scheduler/schedule'
|
4
2
|
require 'sidekiq-scheduler/scheduler'
|
5
3
|
|
@@ -10,19 +8,12 @@ module SidekiqScheduler
|
|
10
8
|
# from Redis onto the work queues
|
11
9
|
#
|
12
10
|
class Manager
|
13
|
-
|
14
|
-
|
15
|
-
dynamic: false,
|
16
|
-
dynamic_every: '5s',
|
17
|
-
schedule: {}
|
18
|
-
}
|
19
|
-
|
20
|
-
def initialize(options)
|
21
|
-
scheduler_options = load_scheduler_options(options)
|
11
|
+
def initialize(config)
|
12
|
+
set_current_scheduler_options(config)
|
22
13
|
|
23
|
-
@scheduler_instance = SidekiqScheduler::Scheduler.new(
|
14
|
+
@scheduler_instance = SidekiqScheduler::Scheduler.new(config)
|
24
15
|
SidekiqScheduler::Scheduler.instance = @scheduler_instance
|
25
|
-
Sidekiq.schedule =
|
16
|
+
Sidekiq.schedule = config.schedule if @scheduler_instance.enabled
|
26
17
|
end
|
27
18
|
|
28
19
|
def stop
|
@@ -35,19 +26,19 @@ module SidekiqScheduler
|
|
35
26
|
|
36
27
|
private
|
37
28
|
|
38
|
-
def
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
29
|
+
def set_current_scheduler_options(config)
|
30
|
+
enabled = SidekiqScheduler::Scheduler.enabled
|
31
|
+
dynamic = SidekiqScheduler::Scheduler.dynamic
|
32
|
+
dynamic_every = SidekiqScheduler::Scheduler.dynamic_every
|
33
|
+
listened_queues_only = SidekiqScheduler::Scheduler.listened_queues_only
|
34
|
+
|
35
|
+
config.enabled = enabled unless enabled.nil?
|
36
|
+
config.dynamic = dynamic unless dynamic.nil?
|
37
|
+
config.dynamic_every = dynamic_every unless dynamic_every.nil?
|
38
|
+
unless Sidekiq.schedule.nil? || (Sidekiq.schedule.respond_to?(:empty?) && Sidekiq.schedule.empty?)
|
39
|
+
config.schedule = Sidekiq.schedule
|
40
|
+
end
|
41
|
+
config.listened_queues_only = listened_queues_only unless listened_queues_only.nil?
|
51
42
|
end
|
52
43
|
end
|
53
44
|
end
|
@@ -96,7 +96,7 @@ module SidekiqScheduler
|
|
96
96
|
#
|
97
97
|
# @return [Boolean] true if the schedules key is set, false otherwise
|
98
98
|
def self.schedule_exist?
|
99
|
-
|
99
|
+
SidekiqScheduler::SidekiqAdapter.redis_key_exists?(schedules_key)
|
100
100
|
end
|
101
101
|
|
102
102
|
# Returns all the schedule changes for a given time range.
|
@@ -136,7 +136,7 @@ module SidekiqScheduler
|
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
139
|
-
registered
|
139
|
+
registered.instance_of?(Integer) ? (registered > 0) : registered
|
140
140
|
end
|
141
141
|
|
142
142
|
# Removes instances of the job older than 24 hours
|
@@ -210,7 +210,7 @@ module SidekiqScheduler
|
|
210
210
|
end
|
211
211
|
|
212
212
|
private
|
213
|
-
|
213
|
+
|
214
214
|
# Returns the value of a Redis stored hash field
|
215
215
|
#
|
216
216
|
# @param [String] hash_key The key name of the hash
|
@@ -2,6 +2,7 @@ require 'rufus/scheduler'
|
|
2
2
|
require 'json'
|
3
3
|
require 'sidekiq-scheduler/rufus_utils'
|
4
4
|
require 'sidekiq-scheduler/redis_manager'
|
5
|
+
require 'sidekiq-scheduler/config'
|
5
6
|
|
6
7
|
module SidekiqScheduler
|
7
8
|
class Scheduler
|
@@ -10,6 +11,15 @@ module SidekiqScheduler
|
|
10
11
|
alias_method :params, :opts
|
11
12
|
end
|
12
13
|
|
14
|
+
# TODO: Can we remove those attr_accessor's? If we need to keep them, we should
|
15
|
+
# update those values on the config object instead of just here in the scheduler.
|
16
|
+
# That's why we need to do what we do in the set_current_scheduler_options (not
|
17
|
+
# saying we will have to do it somehow still)
|
18
|
+
#
|
19
|
+
# NOTE: ^ Keeping this TODO here for now, in a future version of this project
|
20
|
+
# we will remove those attr acessors and use only our config object. For now,
|
21
|
+
# let's keep as it is.
|
22
|
+
|
13
23
|
# Set to enable or disable the scheduler.
|
14
24
|
attr_accessor :enabled
|
15
25
|
|
@@ -41,12 +51,14 @@ module SidekiqScheduler
|
|
41
51
|
end
|
42
52
|
end
|
43
53
|
|
44
|
-
def initialize(
|
45
|
-
|
46
|
-
|
47
|
-
self.
|
48
|
-
self.
|
49
|
-
self.
|
54
|
+
def initialize(config = SidekiqScheduler::Config.new(without_defaults: true))
|
55
|
+
@scheduler_config = config
|
56
|
+
|
57
|
+
self.enabled = config.enabled?
|
58
|
+
self.dynamic = config.dynamic?
|
59
|
+
self.dynamic_every = config.dynamic_every?
|
60
|
+
self.listened_queues_only = config.listened_queues_only?
|
61
|
+
self.rufus_scheduler_options = config.rufus_scheduler_options
|
50
62
|
end
|
51
63
|
|
52
64
|
# the Rufus::Scheduler jobs that are scheduled
|
@@ -82,7 +94,7 @@ module SidekiqScheduler
|
|
82
94
|
Sidekiq.logger.info 'Schedule empty! Set Sidekiq.schedule' if Sidekiq.schedule.empty?
|
83
95
|
|
84
96
|
@scheduled_jobs = {}
|
85
|
-
queues = sidekiq_queues
|
97
|
+
queues = scheduler_config.sidekiq_queues
|
86
98
|
|
87
99
|
Sidekiq.schedule.each do |name, config|
|
88
100
|
if !listened_queues_only || enabled_queue?(config['queue'].to_s, queues)
|
@@ -158,7 +170,7 @@ module SidekiqScheduler
|
|
158
170
|
config = prepare_arguments(job_config.dup)
|
159
171
|
|
160
172
|
if config.delete('include_metadata')
|
161
|
-
config['args'] = arguments_with_metadata(config['args'], "scheduled_at" => time.to_f)
|
173
|
+
config['args'] = arguments_with_metadata(config['args'], "scheduled_at" => time.to_f.round(3))
|
162
174
|
end
|
163
175
|
|
164
176
|
if SidekiqScheduler::Utils.active_job_enqueue?(config['class'])
|
@@ -238,6 +250,8 @@ module SidekiqScheduler
|
|
238
250
|
|
239
251
|
private
|
240
252
|
|
253
|
+
attr_reader :scheduler_config
|
254
|
+
|
241
255
|
def new_job(name, interval_type, config, schedule, options)
|
242
256
|
options = options.merge({ :job => true, :tags => [name] })
|
243
257
|
|
@@ -277,7 +291,7 @@ module SidekiqScheduler
|
|
277
291
|
# since epoch.
|
278
292
|
#
|
279
293
|
# @example with hash argument
|
280
|
-
# arguments_with_metadata({value: 1}, scheduled_at: Time.now)
|
294
|
+
# arguments_with_metadata({value: 1}, scheduled_at: Time.now.round(3))
|
281
295
|
# #=> [{value: 1}, {scheduled_at: <miliseconds since epoch>}]
|
282
296
|
#
|
283
297
|
# @param args [Array|Hash]
|
@@ -291,14 +305,6 @@ module SidekiqScheduler
|
|
291
305
|
end
|
292
306
|
end
|
293
307
|
|
294
|
-
def sidekiq_queues
|
295
|
-
if SIDEKIQ_GTE_6_5_0
|
296
|
-
Sidekiq[:queues].map(&:to_s)
|
297
|
-
else
|
298
|
-
Sidekiq.options[:queues].map(&:to_s)
|
299
|
-
end
|
300
|
-
end
|
301
|
-
|
302
308
|
# Returns true if a job's queue is included in the array of queues
|
303
309
|
#
|
304
310
|
# If queues are empty, returns true.
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module SidekiqScheduler
|
2
|
+
class OptionNotSupportedAnymore < StandardError; end
|
3
|
+
|
4
|
+
class SidekiqAdapter
|
5
|
+
SIDEKIQ_GTE_6_5_0 = Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('6.5.0')
|
6
|
+
SIDEKIQ_GTE_7_0_0 = Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('7.0.0')
|
7
|
+
|
8
|
+
def self.fetch_scheduler_config_from_sidekiq(sidekiq_config)
|
9
|
+
return {} if sidekiq_config.nil?
|
10
|
+
|
11
|
+
check_using_old_sidekiq_scheduler_config!(sidekiq_config)
|
12
|
+
|
13
|
+
if SIDEKIQ_GTE_6_5_0
|
14
|
+
sidekiq_config.fetch(:scheduler, {})
|
15
|
+
else
|
16
|
+
sidekiq_config.options.fetch(:scheduler, {})
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.check_using_old_sidekiq_scheduler_config!(sidekiq_config)
|
21
|
+
%i[enabled dynamic dynamic_every schedule listened_queues_only rufus_scheduler_options].each do |option|
|
22
|
+
if SIDEKIQ_GTE_7_0_0
|
23
|
+
if sidekiq_config.key?(option)
|
24
|
+
raise OptionNotSupportedAnymore, ":#{option} option should be under the :scheduler: key"
|
25
|
+
end
|
26
|
+
elsif SIDEKIQ_GTE_6_5_0
|
27
|
+
unless sidekiq_config[option].nil?
|
28
|
+
raise OptionNotSupportedAnymore, ":#{option} option should be under the :scheduler: key"
|
29
|
+
end
|
30
|
+
else
|
31
|
+
if sidekiq_config.options.key?(option)
|
32
|
+
raise OptionNotSupportedAnymore, ":#{option} option should be under the :scheduler: key"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.start_schedule_manager(sidekiq_config:, schedule_manager:)
|
39
|
+
if SIDEKIQ_GTE_6_5_0
|
40
|
+
sidekiq_config[:schedule_manager] = schedule_manager
|
41
|
+
sidekiq_config[:schedule_manager].start
|
42
|
+
else
|
43
|
+
sidekiq_config.options[:schedule_manager] = schedule_manager
|
44
|
+
sidekiq_config.options[:schedule_manager].start
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.stop_schedule_manager(sidekiq_config:)
|
49
|
+
if SIDEKIQ_GTE_6_5_0
|
50
|
+
sidekiq_config[:schedule_manager].stop
|
51
|
+
else
|
52
|
+
sidekiq_config.options[:schedule_manager].stop
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.sidekiq_queues(sidekiq_config)
|
57
|
+
if SIDEKIQ_GTE_7_0_0
|
58
|
+
if sidekiq_config.nil? || (sidekiq_config.respond_to?(:empty?) && sidekiq_config.empty?)
|
59
|
+
Sidekiq.instance_variable_get(:@config).queues.map(&:to_s)
|
60
|
+
else
|
61
|
+
sidekiq_config.queues.map(&:to_s)
|
62
|
+
end
|
63
|
+
elsif SIDEKIQ_GTE_6_5_0
|
64
|
+
Sidekiq[:queues].map(&:to_s)
|
65
|
+
else
|
66
|
+
Sidekiq.options[:queues].map(&:to_s)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.redis_key_exists?(key_name)
|
71
|
+
Sidekiq.redis do |r|
|
72
|
+
if SIDEKIQ_GTE_7_0_0
|
73
|
+
r.exists(key_name) > 0
|
74
|
+
else
|
75
|
+
r.exists?(key_name)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -3,7 +3,7 @@ require 'sidekiq-scheduler'
|
|
3
3
|
require_relative 'job_presenter'
|
4
4
|
|
5
5
|
module SidekiqScheduler
|
6
|
-
# Hook into *Sidekiq::Web*
|
6
|
+
# Hook into *Sidekiq::Web* app which adds a new '/recurring-jobs' page
|
7
7
|
|
8
8
|
module Web
|
9
9
|
VIEW_PATH = File.expand_path('../../../web/views', __FILE__)
|
data/lib/sidekiq-scheduler.rb
CHANGED
@@ -5,9 +5,9 @@ require_relative 'sidekiq/scheduler'
|
|
5
5
|
require_relative 'sidekiq-scheduler/version'
|
6
6
|
require_relative 'sidekiq-scheduler/manager'
|
7
7
|
require_relative 'sidekiq-scheduler/redis_manager'
|
8
|
+
require_relative 'sidekiq-scheduler/config'
|
8
9
|
require_relative 'sidekiq-scheduler/extensions/schedule'
|
9
|
-
|
10
|
-
SIDEKIQ_GTE_6_5_0 = Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('6.5.0')
|
10
|
+
require_relative 'sidekiq-scheduler/sidekiq_adapter'
|
11
11
|
|
12
12
|
Sidekiq.configure_server do |config|
|
13
13
|
|
@@ -15,25 +15,14 @@ Sidekiq.configure_server do |config|
|
|
15
15
|
# schedules_changed's type was changed from SET to ZSET, so we remove old versions at startup
|
16
16
|
SidekiqScheduler::RedisManager.clean_schedules_changed
|
17
17
|
|
18
|
-
|
19
|
-
config_options = SIDEKIQ_GTE_6_5_0 ? Sidekiq.instance_variable_get(:@config) : config.options
|
18
|
+
scheduler_config = SidekiqScheduler::Config.new(sidekiq_config: config)
|
20
19
|
|
21
|
-
schedule_manager = SidekiqScheduler::Manager.new(
|
22
|
-
|
23
|
-
config[:schedule_manager] = schedule_manager
|
24
|
-
config[:schedule_manager].start
|
25
|
-
else
|
26
|
-
config.options[:schedule_manager] = schedule_manager
|
27
|
-
config.options[:schedule_manager].start
|
28
|
-
end
|
20
|
+
schedule_manager = SidekiqScheduler::Manager.new(scheduler_config)
|
21
|
+
SidekiqScheduler::SidekiqAdapter.start_schedule_manager(sidekiq_config: config, schedule_manager: schedule_manager)
|
29
22
|
end
|
30
23
|
|
31
24
|
config.on(:quiet) do
|
32
|
-
|
33
|
-
config[:schedule_manager].stop
|
34
|
-
else
|
35
|
-
config.options[:schedule_manager].stop
|
36
|
-
end
|
25
|
+
SidekiqScheduler::SidekiqAdapter.stop_schedule_manager(sidekiq_config: config)
|
37
26
|
end
|
38
27
|
|
39
28
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Morton Jonuschat
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2023-01-31 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: sidekiq
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '4'
|
22
22
|
- - "<"
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: '
|
24
|
+
version: '8'
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -31,21 +31,7 @@ dependencies:
|
|
31
31
|
version: '4'
|
32
32
|
- - "<"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: redis
|
37
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: 4.2.0
|
42
|
-
type: :runtime
|
43
|
-
prerelease: false
|
44
|
-
version_requirements: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - ">="
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: 4.2.0
|
34
|
+
version: '8'
|
49
35
|
- !ruby/object:Gem::Dependency
|
50
36
|
name: rufus-scheduler
|
51
37
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,14 +66,14 @@ dependencies:
|
|
80
66
|
requirements:
|
81
67
|
- - "~>"
|
82
68
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
69
|
+
version: '12.0'
|
84
70
|
type: :development
|
85
71
|
prerelease: false
|
86
72
|
version_requirements: !ruby/object:Gem::Requirement
|
87
73
|
requirements:
|
88
74
|
- - "~>"
|
89
75
|
- !ruby/object:Gem::Version
|
90
|
-
version: '
|
76
|
+
version: '12.0'
|
91
77
|
- !ruby/object:Gem::Dependency
|
92
78
|
name: timecop
|
93
79
|
requirement: !ruby/object:Gem::Requirement
|
@@ -187,19 +173,19 @@ dependencies:
|
|
187
173
|
- !ruby/object:Gem::Version
|
188
174
|
version: '0'
|
189
175
|
- !ruby/object:Gem::Dependency
|
190
|
-
name:
|
176
|
+
name: rack
|
191
177
|
requirement: !ruby/object:Gem::Requirement
|
192
178
|
requirements:
|
193
|
-
- - "
|
179
|
+
- - "<"
|
194
180
|
- !ruby/object:Gem::Version
|
195
|
-
version: '
|
181
|
+
version: '3'
|
196
182
|
type: :development
|
197
183
|
prerelease: false
|
198
184
|
version_requirements: !ruby/object:Gem::Requirement
|
199
185
|
requirements:
|
200
|
-
- - "
|
186
|
+
- - "<"
|
201
187
|
- !ruby/object:Gem::Version
|
202
|
-
version: '
|
188
|
+
version: '3'
|
203
189
|
description: Light weight job scheduling extension for Sidekiq that adds support for
|
204
190
|
queueing jobs in a recurring way.
|
205
191
|
email:
|
@@ -214,6 +200,7 @@ files:
|
|
214
200
|
- README.md
|
215
201
|
- Rakefile
|
216
202
|
- lib/sidekiq-scheduler.rb
|
203
|
+
- lib/sidekiq-scheduler/config.rb
|
217
204
|
- lib/sidekiq-scheduler/extensions/schedule.rb
|
218
205
|
- lib/sidekiq-scheduler/extensions/web.rb
|
219
206
|
- lib/sidekiq-scheduler/job_presenter.rb
|
@@ -222,6 +209,7 @@ files:
|
|
222
209
|
- lib/sidekiq-scheduler/rufus_utils.rb
|
223
210
|
- lib/sidekiq-scheduler/schedule.rb
|
224
211
|
- lib/sidekiq-scheduler/scheduler.rb
|
212
|
+
- lib/sidekiq-scheduler/sidekiq_adapter.rb
|
225
213
|
- lib/sidekiq-scheduler/utils.rb
|
226
214
|
- lib/sidekiq-scheduler/version.rb
|
227
215
|
- lib/sidekiq-scheduler/web.rb
|
@@ -253,14 +241,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
253
241
|
requirements:
|
254
242
|
- - ">="
|
255
243
|
- !ruby/object:Gem::Version
|
256
|
-
version: '2.
|
244
|
+
version: '2.7'
|
257
245
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
258
246
|
requirements:
|
259
247
|
- - ">="
|
260
248
|
- !ruby/object:Gem::Version
|
261
249
|
version: '0'
|
262
250
|
requirements: []
|
263
|
-
rubygems_version: 3.
|
251
|
+
rubygems_version: 3.2.33
|
264
252
|
signing_key:
|
265
253
|
specification_version: 4
|
266
254
|
summary: Light weight job scheduling extension for Sidekiq
|