sidekiq-scheduler 3.2.1 → 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: 0f30ce85a9aba1cfa5987dbbd3ec24715b4d6adeadd3e36079be8425d0d673b7
4
- data.tar.gz: 92b27fba4b1405a4466ff180ebd60fc981e07cbc15d2497a63af9ae8d1c2ab2b
3
+ metadata.gz: 1106fa4b63b6bb5d15759e20a1bdfb617a4fe53adb3c8041455e80aee14a2bde
4
+ data.tar.gz: f4f954b22fa9f6f36ff9fe664a962ab40b75b279ebd292fb64e06f917e3b050a
5
5
  SHA512:
6
- metadata.gz: 211ec1b0efa783fec645f9afb598225456a9d2e61a17318e95eb9c3eec71cfb061606829667e51e49badb9b23aca46d905e500eda4d09704af959749eba5b651
7
- data.tar.gz: d832b58c8b2526774dd7b54ec7295c89da87b000b105cca465631c628941a7b21e9f864f29c2360d2203f7463412d0c7eab2ee2b7d69f566598a46f56ca94428
6
+ metadata.gz: 39c7aedbbf5260a184c7507f5fa0f84c0178a45465ff662f253fe23a1828d9d33e457ce9c5f1abbfd6a6d0d4a4d9915b4422dcef80f8d89e4856c80333fbeff1
7
+ data.tar.gz: c04e172346a179aea9d22ee45d9a4546e44d241016ce012063d72005e6e9d10ff99364e7b34b11311c339c0a5894a737dea01fb16783883a2aa37b52f504ddd4
data/CHANGELOG.md CHANGED
@@ -1,7 +1,20 @@
1
- # 3.2.1
2
- - Fix CSS not loading on Rails app when Sidekiq < 6 https://github.com/moove-it/sidekiq-scheduler/pull/377
3
- # 3.2.0
1
+ # 4.0.1
4
2
 
5
- - Fix deprecated uses of Redis#pipelined https://github.com/moove-it/sidekiq-scheduler/pull/357
6
- - Prevent sidekiq_options from overriding ActiveJob queue settings https://github.com/moove-it/sidekiq-scheduler/pull/367
7
- - Highlight disabled jobs https://github.com/moove-it/sidekiq-scheduler/pull/369
3
+ - [**FIX**] Add support for sidekiq 6.5 [#382](https://github.com/moove-it/sidekiq-scheduler/pull/382)
4
+
5
+ # 4.0.0
6
+
7
+ - [**FIX**] Fix CSS not loading on Rails app when Sidekiq < 6 [#377](https://github.com/moove-it/sidekiq-scheduler/pull/377)
8
+ - [**BREAKING CHANGE**] Drop support for Sidekiq 3 [f15e7ca1a5f3ab5b6fd3d7664d67723dba1fa1f1](https://github.com/moove-it/sidekiq-scheduler/commit/f15e7ca1a5f3ab5b6fd3d7664d67723dba1fa1f1)
9
+
10
+ # 4.0.0.alpha1
11
+
12
+ - [**FIX**] Fix deprecated uses of Redis#pipelined [#357](https://github.com/moove-it/sidekiq-scheduler/pull/357)
13
+ - [**DOCS**] Add docs for running multi-sidekiq configurations [#362](https://github.com/moove-it/sidekiq-scheduler/pull/362)
14
+ - [**FIX**] Prevent sidekiq_options from overriding ActiveJob queue settings [#367](https://github.com/moove-it/sidekiq-scheduler/pull/367)
15
+ - [**ENHANCEMENT**] Highlight disabled jobs [#369](https://github.com/moove-it/sidekiq-scheduler/pull/369)
16
+ - [**BREAKING CHANGE**] Require redis 4.2.0 [#370](https://github.com/moove-it/sidekiq-scheduler/pull/370)
17
+ - [**FIX**] Fixes redis deprecation warning regarding `exists` [#370](https://github.com/moove-it/sidekiq-scheduler/pull/370)
18
+ - [**BREAKING CHANGE**] Remove dependecy on thwait and e2mmap [#371](https://github.com/moove-it/sidekiq-scheduler/pull/371)
19
+ - Support Ruby 3.1 [#373](https://github.com/moove-it/sidekiq-scheduler/pull/373)
20
+ - [**BREAKING CHANGE**] Set rufus_scheduler_options via sidekiq.yml file as configuration option [#375](https://github.com/moove-it/sidekiq-scheduler/pull/375)
data/README.md CHANGED
@@ -30,7 +30,7 @@
30
30
  `sidekiq-scheduler` is an extension to [Sidekiq](http://github.com/mperham/sidekiq) that
31
31
  pushes jobs in a scheduled way, mimicking cron utility.
32
32
 
33
- __Note:__ If you are looking for version 2.2.*, go to [2.2-stable branch](https://github.com/moove-it/sidekiq-scheduler/tree/2.2-stable).
33
+ __Note:__ Current branch contains work of the V4 release, if you are looking for version 2.2.* or 3.*, go to [2.2-stable branch](https://github.com/moove-it/sidekiq-scheduler/tree/2.2-stable) / [v3-stable](https://github.com/moove-it/sidekiq-scheduler/tree/v3-stable).
34
34
 
35
35
  ## Installation
36
36
 
@@ -100,6 +100,7 @@ Available options are:
100
100
  :enabled: <enables scheduler if true [true by default]>
101
101
  :scheduler:
102
102
  :listened_queues_only: <push jobs whose queue is being listened by sidekiq [false by default]>
103
+ :rufus_scheduler_options: <Set custom options for rufus scheduler, like max_work_threads [{} by default]>
103
104
  ```
104
105
 
105
106
  ## Schedule configuration
@@ -304,10 +305,16 @@ If you're configuring your own Redis connection pool, you need to make sure the
304
305
 
305
306
  That's a minimum of `concurrency` + 5 (per the [Sidekiq wiki](https://github.com/mperham/sidekiq/wiki/Using-Redis#complete-control)) + `Rufus::Scheduler::MAX_WORK_THREADS` (28 as of this writing; per the [Rufus README](https://github.com/jmettraux/rufus-scheduler#max_work_threads)), for a total of 58 with the default `concurrency` of 25.
306
307
 
307
- You can also override the thread pool size in Rufus Scheduler by setting e.g.:
308
+ You can also override the thread pool size in Rufus Scheduler by setting the following in your `sidekiq.yml` config:
308
309
 
309
- ```
310
- SidekiqScheduler::Scheduler.instance.rufus_scheduler_options = { max_work_threads: 5 }
310
+ ```yaml
311
+ ---
312
+ ...
313
+
314
+ rufus_scheduler_options:
315
+ max_work_threads: 5
316
+
317
+ ...
311
318
  ```
312
319
 
313
320
  ## Notes about running on Multiple Hosts
@@ -321,7 +328,7 @@ Non-normal conditions that could push a specific job multiple times are:
321
328
 
322
329
  `every`, `interval` and `in` jobs will be pushed once per host.
323
330
 
324
- ## Notes on when sidekiq worker is down
331
+ ## Notes on when Sidekiq worker is down
325
332
 
326
333
  For a `cron`/`at` (and all other) job to be successfully enqueued, you need at least one sidekiq worker with scheduler to be up at that moment. Handling this is up to you and depends on your application.
327
334
 
@@ -334,6 +341,54 @@ Possible solutions include:
334
341
 
335
342
  Each option has it's own pros and cons.
336
343
 
344
+ ## Notes when running multiple Sidekiq processors on the same Redis
345
+
346
+ ### TL;DR
347
+
348
+ Be **sure** to include the `:enabled: false` top-level key on any additional
349
+ configurations to avoid any possibility of the `schedules` definition being
350
+ wiped by the second Sidekiq process.
351
+
352
+ To illustrate what we mean:
353
+
354
+ Say you have one process with the schedule:
355
+ ```yaml
356
+ # e.g., config/sidekiq.yml
357
+
358
+ :queues:
359
+ - default
360
+ :schedule:
361
+ do_something_every_minute:
362
+ class: DoSomethingJob
363
+ args: matey
364
+ queue: :scheduler
365
+ cron: '0 * * * * * America/Los_Angeles'
366
+ ```
367
+
368
+ And a separate separate configured process without one:
369
+ ```yaml
370
+ # e.g., config/sidekiq_other.yml
371
+ :queues:
372
+ - scheduler
373
+
374
+ ## NOTE Disable the Scheduler
375
+ :enabled: false
376
+ ```
377
+
378
+ ### Details
379
+
380
+ This gem stores the configured schedule in Redis on boot. It's used, primarily,
381
+ to display in the Web Integration, and allow you to interact with that schedule
382
+ via that integration.
383
+
384
+ If you're running multiple Sidekiq processes on the same Redis namespace with
385
+ different configurations, **you'll want to explicitly _disable_ Sidekiq
386
+ Scheduler** for the other processes not responsible for the schedule. If you
387
+ don't, the last booted Sidekiq processes' schedule will be what is stored in
388
+ Redis.
389
+
390
+ See https://github.com/moove-it/sidekiq-scheduler/issues/361 for a more details.
391
+
337
392
  ## Sidekiq Web Integration
338
393
 
339
394
  sidekiq-scheduler provides an extension to the Sidekiq web interface that adds a `Recurring Jobs` page.
@@ -408,6 +463,7 @@ MIT License
408
463
 
409
464
  ## Copyright
410
465
 
411
- Copyright 2013 - 2018 Moove-IT.
412
- Copyright 2012 Morton Jonuschat.
413
- Some parts copyright 2010 Ben VandenBos.
466
+ - Copyright 2021 - 2022 Marcelo Lauxen.
467
+ - Copyright 2013 - 2022 Moove-IT.
468
+ - Copyright 2012 Morton Jonuschat.
469
+ - Some parts copyright 2010 Ben VandenBos.
@@ -1,7 +1,5 @@
1
1
  require 'redis'
2
2
 
3
- require 'sidekiq/util'
4
-
5
3
  require 'sidekiq-scheduler/schedule'
6
4
  require 'sidekiq-scheduler/scheduler'
7
5
 
@@ -12,8 +10,6 @@ module SidekiqScheduler
12
10
  # from Redis onto the work queues
13
11
  #
14
12
  class Manager
15
- include Sidekiq::Util
16
-
17
13
  DEFAULT_SCHEDULER_OPTIONS = {
18
14
  enabled: true,
19
15
  dynamic: false,
@@ -9,7 +9,7 @@ module SidekiqScheduler
9
9
  #
10
10
  # @return [String] schedule in JSON format
11
11
  def self.get_job_schedule(name)
12
- hget(:schedules, name)
12
+ hget('schedules', name)
13
13
  end
14
14
 
15
15
  # Returns the state of a given job
@@ -44,7 +44,7 @@ module SidekiqScheduler
44
44
  # @param [String] name The name of the job
45
45
  # @param [Hash] config The new schedule for the job
46
46
  def self.set_job_schedule(name, config)
47
- hset(:schedules, name, JSON.generate(config))
47
+ hset('schedules', name, JSON.generate(config))
48
48
  end
49
49
 
50
50
  # Sets the state for a given job
@@ -75,7 +75,7 @@ module SidekiqScheduler
75
75
  #
76
76
  # @param [String] name The name of the job
77
77
  def self.remove_job_schedule(name)
78
- hdel(:schedules, name)
78
+ hdel('schedules', name)
79
79
  end
80
80
 
81
81
  # Removes the next execution time for a given job
@@ -89,21 +89,14 @@ module SidekiqScheduler
89
89
  #
90
90
  # @return [Hash] hash with all the job schedules
91
91
  def self.get_all_schedules
92
- Sidekiq.redis { |r| r.hgetall(:schedules) }
92
+ Sidekiq.redis { |r| r.hgetall('schedules') }
93
93
  end
94
94
 
95
95
  # Returns boolean value that indicates if the schedules value exists
96
96
  #
97
97
  # @return [Boolean] true if the schedules key is set, false otherwise
98
98
  def self.schedule_exist?
99
- Sidekiq.redis do |r|
100
- case r.exists(:schedules)
101
- when true, 1
102
- true
103
- else
104
- false
105
- end
106
- end
99
+ Sidekiq.redis { |r| r.exists?('schedules') }
107
100
  end
108
101
 
109
102
  # Returns all the schedule changes for a given time range.
@@ -113,19 +106,19 @@ module SidekiqScheduler
113
106
  #
114
107
  # @return [Array] array with all the changed job names
115
108
  def self.get_schedule_changes(from, to)
116
- Sidekiq.redis { |r| r.zrangebyscore(:schedules_changed, from, "(#{to}") }
109
+ Sidekiq.redis { |r| r.zrangebyscore('schedules_changed', from, "(#{to}") }
117
110
  end
118
111
 
119
112
  # Register a schedule change for a given job
120
113
  #
121
114
  # @param [String] name The name of the job
122
115
  def self.add_schedule_change(name)
123
- Sidekiq.redis { |r| r.zadd(:schedules_changed, Time.now.to_f, name) }
116
+ Sidekiq.redis { |r| r.zadd('schedules_changed', Time.now.to_f, name) }
124
117
  end
125
118
 
126
119
  # Remove all the schedule changes records
127
120
  def self.clean_schedules_changed
128
- Sidekiq.redis { |r| r.del(:schedules_changed) unless r.type(:schedules_changed) == 'zset' }
121
+ Sidekiq.redis { |r| r.del('schedules_changed') unless r.type('schedules_changed') == 'zset' }
129
122
  end
130
123
 
131
124
  # Removes a queued job instance
@@ -188,7 +181,7 @@ module SidekiqScheduler
188
181
  end
189
182
 
190
183
  private
191
-
184
+
192
185
  # Returns the value of a Redis stored hash field
193
186
  #
194
187
  # @param [String] hash_key The key name of the hash
@@ -1,14 +1,10 @@
1
1
  require 'rufus/scheduler'
2
- require 'thwait'
3
- require 'sidekiq/util'
4
2
  require 'json'
5
3
  require 'sidekiq-scheduler/rufus_utils'
6
4
  require 'sidekiq-scheduler/redis_manager'
7
5
 
8
6
  module SidekiqScheduler
9
7
  class Scheduler
10
- extend Sidekiq::Util
11
-
12
8
  # We expect rufus jobs to have #params
13
9
  Rufus::Scheduler::Job.module_eval do
14
10
  alias_method :params, :opts
@@ -26,6 +22,9 @@ module SidekiqScheduler
26
22
  # Set to schedule jobs only when will be pushed to queues listened by sidekiq
27
23
  attr_accessor :listened_queues_only
28
24
 
25
+ # Set custom options for rufus scheduler, like max_work_threads.
26
+ attr_accessor :rufus_scheduler_options
27
+
29
28
  class << self
30
29
 
31
30
  def instance
@@ -47,6 +46,7 @@ module SidekiqScheduler
47
46
  self.dynamic = options[:dynamic]
48
47
  self.dynamic_every = options[:dynamic_every]
49
48
  self.listened_queues_only = options[:listened_queues_only]
49
+ self.rufus_scheduler_options = options[:rufus_scheduler_options] || {}
50
50
  end
51
51
 
52
52
  # the Rufus::Scheduler jobs that are scheduled
@@ -168,14 +168,6 @@ module SidekiqScheduler
168
168
  end
169
169
  end
170
170
 
171
- def rufus_scheduler_options
172
- @rufus_scheduler_options ||= {}
173
- end
174
-
175
- def rufus_scheduler_options=(options)
176
- @rufus_scheduler_options = options
177
- end
178
-
179
171
  def rufus_scheduler
180
172
  @rufus_scheduler ||= SidekiqScheduler::Utils.new_rufus_scheduler(rufus_scheduler_options)
181
173
  end
@@ -1,5 +1,3 @@
1
1
  module SidekiqScheduler
2
-
3
- VERSION = '3.2.1'
4
-
2
+ VERSION = "4.0.1"
5
3
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.1
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Morton Jonuschat
8
8
  - Moove-it
9
+ - Marcelo Lauxen
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2022-04-27 00:00:00.000000000 Z
13
+ date: 2022-06-08 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: sidekiq
@@ -17,34 +18,28 @@ dependencies:
17
18
  requirements:
18
19
  - - ">="
19
20
  - !ruby/object:Gem::Version
20
- version: '3'
21
+ version: '4'
21
22
  type: :runtime
22
23
  prerelease: false
23
24
  version_requirements: !ruby/object:Gem::Requirement
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
27
- version: '3'
28
+ version: '4'
28
29
  - !ruby/object:Gem::Dependency
29
30
  name: redis
30
31
  requirement: !ruby/object:Gem::Requirement
31
32
  requirements:
32
33
  - - ">="
33
34
  - !ruby/object:Gem::Version
34
- version: '3'
35
- - - "<"
36
- - !ruby/object:Gem::Version
37
- version: '5'
35
+ version: 4.2.0
38
36
  type: :runtime
39
37
  prerelease: false
40
38
  version_requirements: !ruby/object:Gem::Requirement
41
39
  requirements:
42
40
  - - ">="
43
41
  - !ruby/object:Gem::Version
44
- version: '3'
45
- - - "<"
46
- - !ruby/object:Gem::Version
47
- version: '5'
42
+ version: 4.2.0
48
43
  - !ruby/object:Gem::Dependency
49
44
  name: rufus-scheduler
50
45
  requirement: !ruby/object:Gem::Requirement
@@ -73,34 +68,6 @@ dependencies:
73
68
  - - ">="
74
69
  - !ruby/object:Gem::Version
75
70
  version: 1.4.0
76
- - !ruby/object:Gem::Dependency
77
- name: thwait
78
- requirement: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- type: :runtime
84
- prerelease: false
85
- version_requirements: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- - !ruby/object:Gem::Dependency
91
- name: e2mmap
92
- requirement: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- type: :runtime
98
- prerelease: false
99
- version_requirements: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
71
  - !ruby/object:Gem::Dependency
105
72
  name: rake
106
73
  requirement: !ruby/object:Gem::Requirement
@@ -119,28 +86,28 @@ dependencies:
119
86
  name: timecop
120
87
  requirement: !ruby/object:Gem::Requirement
121
88
  requirements:
122
- - - "~>"
89
+ - - ">="
123
90
  - !ruby/object:Gem::Version
124
91
  version: '0'
125
92
  type: :development
126
93
  prerelease: false
127
94
  version_requirements: !ruby/object:Gem::Requirement
128
95
  requirements:
129
- - - "~>"
96
+ - - ">="
130
97
  - !ruby/object:Gem::Version
131
98
  version: '0'
132
99
  - !ruby/object:Gem::Dependency
133
100
  name: mocha
134
101
  requirement: !ruby/object:Gem::Requirement
135
102
  requirements:
136
- - - "~>"
103
+ - - ">="
137
104
  - !ruby/object:Gem::Version
138
105
  version: '0'
139
106
  type: :development
140
107
  prerelease: false
141
108
  version_requirements: !ruby/object:Gem::Requirement
142
109
  requirements:
143
- - - "~>"
110
+ - - ">="
144
111
  - !ruby/object:Gem::Version
145
112
  version: '0'
146
113
  - !ruby/object:Gem::Dependency
@@ -163,30 +130,16 @@ dependencies:
163
130
  requirements:
164
131
  - - "~>"
165
132
  - !ruby/object:Gem::Version
166
- version: 0.19.0
133
+ version: 0.28.0
167
134
  type: :development
168
135
  prerelease: false
169
136
  version_requirements: !ruby/object:Gem::Requirement
170
137
  requirements:
171
138
  - - "~>"
172
139
  - !ruby/object:Gem::Version
173
- version: 0.19.0
140
+ version: 0.28.0
174
141
  - !ruby/object:Gem::Dependency
175
142
  name: simplecov
176
- requirement: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
- type: :development
182
- prerelease: false
183
- version_requirements: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: '0'
188
- - !ruby/object:Gem::Dependency
189
- name: byebug
190
143
  requirement: !ruby/object:Gem::Requirement
191
144
  requirements:
192
145
  - - ">="
@@ -200,7 +153,7 @@ dependencies:
200
153
  - !ruby/object:Gem::Version
201
154
  version: '0'
202
155
  - !ruby/object:Gem::Dependency
203
- name: activejob
156
+ name: byebug
204
157
  requirement: !ruby/object:Gem::Requirement
205
158
  requirements:
206
159
  - - ">="
@@ -214,7 +167,7 @@ dependencies:
214
167
  - !ruby/object:Gem::Version
215
168
  version: '0'
216
169
  - !ruby/object:Gem::Dependency
217
- name: coveralls
170
+ name: activejob
218
171
  requirement: !ruby/object:Gem::Requirement
219
172
  requirements:
220
173
  - - ">="
@@ -259,6 +212,7 @@ description: Light weight job scheduling extension for Sidekiq that adds support
259
212
  queueing jobs in a recurring way.
260
213
  email:
261
214
  - sidekiq-scheduler@moove-it.com
215
+ - marcelolauxen16@gmail.com
262
216
  executables: []
263
217
  extensions: []
264
218
  extra_rdoc_files: []
@@ -307,7 +261,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
307
261
  requirements:
308
262
  - - ">="
309
263
  - !ruby/object:Gem::Version
310
- version: '0'
264
+ version: '2.5'
311
265
  required_rubygems_version: !ruby/object:Gem::Requirement
312
266
  requirements:
313
267
  - - ">="