sidekiq-scheduler 1.2.4 → 2.0.0
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/README.md +26 -0
- data/lib/sidekiq-scheduler.rb +1 -1
- data/lib/sidekiq-scheduler/manager.rb +5 -15
- data/lib/sidekiq-scheduler/version.rb +1 -1
- data/lib/sidekiq-scheduler/web.rb +1 -1
- data/lib/sidekiq/scheduler.rb +7 -2
- data/test/lib/sidekiq/scheduler_test.rb +34 -0
- metadata +4 -5
- data/lib/sidekiq-scheduler/capistrano.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 037b6a4d410e4524dbf981cc073d9c30c5e31009
|
4
|
+
data.tar.gz: 345305609e9b89c755d636c6c9124090be88c777
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4581a66f03bd8c574565f3ea432fc5a179a1a3e28fd3d93c0822f320b36369415c2cb84945599772631b9b4c4828f3f4f8b011144c7ecf516cb4546020066b1
|
7
|
+
data.tar.gz: 582260da864b28b3f9cf0484012e1356dad92253732f1c404cf2b3fb2971563ed8bc87b9d728848e5e6f80a3fa18e50c8e1a67c87d75cb627f4864f050ca46a0
|
data/README.md
CHANGED
@@ -167,6 +167,32 @@ Run `spring stop` to stop Spring.
|
|
167
167
|
|
168
168
|
For more information, see [this issue](https://github.com/Moove-it/sidekiq-scheduler/issues/35#issuecomment-48067183) and [Spring's README](https://github.com/rails/spring/blob/master/README.md).
|
169
169
|
|
170
|
+
### Reloading the schedules
|
171
|
+
|
172
|
+
The schedules can we updated from redis, every 5 seconds the redis is checked for schedule changes,
|
173
|
+
to update an schedule you have to:
|
174
|
+
|
175
|
+
```ruby
|
176
|
+
Sidekiq.set_schedule('some_name', { 'every' => ['1m'], 'class' => 'HardWorker' })
|
177
|
+
```
|
178
|
+
|
179
|
+
If the schedule did not exist it'll we created if it existed it'll be updated
|
180
|
+
|
181
|
+
### Testing
|
182
|
+
|
183
|
+
In your tests you can check that a schedule change has been set you have to:
|
184
|
+
```ruby
|
185
|
+
require 'sidekiq'
|
186
|
+
require 'sidekiq-scheduler'
|
187
|
+
require 'sidekiq-scheduler/test'
|
188
|
+
|
189
|
+
Sidekiq.set_schedule('some_name', { 'every' => ['1m'], 'class' => 'HardWorker' })
|
190
|
+
|
191
|
+
Sidekiq::Scheduler.schedules => { 'every' => ['1m'], 'class' => 'HardWorker' }
|
192
|
+
Sidekiq::Scheduler.schedules_changed => ['every']
|
193
|
+
```
|
194
|
+
|
195
|
+
|
170
196
|
### Time zones
|
171
197
|
|
172
198
|
Note that if you use the cron syntax, this will be interpreted as in the server time zone
|
data/lib/sidekiq-scheduler.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'celluloid'
|
2
1
|
require 'redis'
|
3
2
|
|
4
3
|
require 'sidekiq/util'
|
@@ -14,28 +13,19 @@ module SidekiqScheduler
|
|
14
13
|
#
|
15
14
|
class Manager
|
16
15
|
include Sidekiq::Util
|
17
|
-
include Celluloid
|
18
|
-
|
19
|
-
def initialize(options={})
|
20
|
-
@enabled = options[:scheduler]
|
21
16
|
|
17
|
+
def initialize(options)
|
22
18
|
Sidekiq::Scheduler.enabled = options[:enabled]
|
23
|
-
Sidekiq::Scheduler.dynamic = options[:dynamic]
|
19
|
+
Sidekiq::Scheduler.dynamic = options[:dynamic]
|
24
20
|
Sidekiq.schedule = options[:schedule] if options[:schedule]
|
25
21
|
end
|
26
22
|
|
27
23
|
def stop
|
28
|
-
|
24
|
+
Sidekiq::Scheduler.clear_schedule!
|
29
25
|
end
|
30
26
|
|
31
27
|
def start
|
32
|
-
|
33
|
-
# If dynamic is set, load that schedule otherwise use normal load
|
34
|
-
if @enabled && Sidekiq::Scheduler.dynamic && Sidekiq::Scheduler.enabled
|
35
|
-
Sidekiq::Scheduler.reload_schedule!
|
36
|
-
elsif @enabled && Sidekiq::Scheduler.enabled
|
37
|
-
Sidekiq::Scheduler.load_schedule!
|
38
|
-
end
|
28
|
+
Sidekiq::Scheduler.load_schedule!
|
39
29
|
end
|
40
30
|
|
41
31
|
def reset
|
@@ -44,4 +34,4 @@ module SidekiqScheduler
|
|
44
34
|
|
45
35
|
end
|
46
36
|
|
47
|
-
end
|
37
|
+
end
|
data/lib/sidekiq/scheduler.rb
CHANGED
@@ -45,8 +45,13 @@ module Sidekiq
|
|
45
45
|
if enabled
|
46
46
|
logger.info 'Loading Schedule'
|
47
47
|
|
48
|
-
#
|
49
|
-
|
48
|
+
# Load schedule from redis for the first time if dynamic
|
49
|
+
if dynamic
|
50
|
+
Sidekiq.reload_schedule!
|
51
|
+
self.rufus_scheduler.every('5s') do
|
52
|
+
self.update_schedule
|
53
|
+
end
|
54
|
+
end
|
50
55
|
|
51
56
|
logger.info 'Schedule empty! Set Sidekiq.schedule' if Sidekiq.schedule.empty?
|
52
57
|
|
@@ -131,6 +131,40 @@ class ManagerTest < Minitest::Test
|
|
131
131
|
assert_equal '/tmp/2', Sidekiq.schedule['some_ivar_job2']['args']
|
132
132
|
end
|
133
133
|
|
134
|
+
it 'reloads the schedule from redis after 5 seconds when dynamic' do
|
135
|
+
Sidekiq.redis { |r| r.flushdb }
|
136
|
+
Sidekiq::Scheduler.clear_schedule!
|
137
|
+
|
138
|
+
Sidekiq::Scheduler.dynamic = true
|
139
|
+
Sidekiq.schedule = {
|
140
|
+
:some_ivar_job => {
|
141
|
+
'cron' => '* * * * *',
|
142
|
+
'class' => 'SomeIvarJob',
|
143
|
+
'args' => '/tmp'
|
144
|
+
}
|
145
|
+
}
|
146
|
+
|
147
|
+
Sidekiq::Scheduler.load_schedule!
|
148
|
+
|
149
|
+
assert Sidekiq::Scheduler.scheduled_jobs.include?('some_ivar_job')
|
150
|
+
assert !Sidekiq::Scheduler.scheduled_jobs.include?('some_ivar_job2')
|
151
|
+
|
152
|
+
Sidekiq.set_schedule(
|
153
|
+
'some_ivar_job2',
|
154
|
+
{
|
155
|
+
'cron' => '* * * * *',
|
156
|
+
'class' => 'SomeIvarJob',
|
157
|
+
'args' => '/tmp/2'
|
158
|
+
}
|
159
|
+
)
|
160
|
+
|
161
|
+
sleep(7)
|
162
|
+
|
163
|
+
assert Sidekiq::Scheduler.scheduled_jobs.include?('some_ivar_job')
|
164
|
+
assert Sidekiq::Scheduler.scheduled_jobs.include?('some_ivar_job2')
|
165
|
+
end
|
166
|
+
|
167
|
+
|
134
168
|
it 'load_schedule_job loads a schedule' do
|
135
169
|
Sidekiq::Scheduler.load_schedule_job(
|
136
170
|
'some_ivar_job',
|
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: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Morton Jonuschat
|
@@ -9,20 +9,20 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-11-
|
12
|
+
date: 2015-11-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sidekiq
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '3'
|
28
28
|
- !ruby/object:Gem::Dependency
|
@@ -205,7 +205,6 @@ files:
|
|
205
205
|
- README.md
|
206
206
|
- Rakefile
|
207
207
|
- lib/sidekiq-scheduler.rb
|
208
|
-
- lib/sidekiq-scheduler/capistrano.rb
|
209
208
|
- lib/sidekiq-scheduler/manager.rb
|
210
209
|
- lib/sidekiq-scheduler/schedule.rb
|
211
210
|
- lib/sidekiq-scheduler/version.rb
|
@@ -1,54 +0,0 @@
|
|
1
|
-
Capistrano::Configuration.instance.load do
|
2
|
-
before 'deploy', 'sidekiq_scheduler:quiet'
|
3
|
-
after 'deploy:stop', 'sidekiq_scheduler:stop'
|
4
|
-
after 'deploy:start', 'sidekiq_scheduler:start'
|
5
|
-
after 'deploy:restart', 'sidekiq_scheduler:restart'
|
6
|
-
|
7
|
-
_cset(:sidekiq_timeout) { 10 }
|
8
|
-
_cset(:sidekiq_role) { :app }
|
9
|
-
|
10
|
-
namespace :sidekiq_scheduler do
|
11
|
-
|
12
|
-
desc 'Quiet sidekiq-scheduler with sidekiq (stop accepting new work)'
|
13
|
-
task :quiet, roles: lambda { fetch(:sidekiq_role) } do
|
14
|
-
bundle_cmd = fetch(:bundle_cmd, 'bundle')
|
15
|
-
pid_file = "#{current_path}/tmp/pids/sidekiq.pid"
|
16
|
-
quiet_cmd = "#{bundle_cmd} exec sidekiqctl quiet #{pid_file}"
|
17
|
-
|
18
|
-
run "cd #{current_path} && if [ -f #{pid_file} ]; then #{quiet_cmd} ; fi"
|
19
|
-
end
|
20
|
-
|
21
|
-
desc 'Stop sidekiq-scheduler with sidekiq'
|
22
|
-
task :stop, roles: lambda { fetch(:sidekiq_role) } do
|
23
|
-
bundle_cmd = fetch(:bundle_cmd, 'bundle')
|
24
|
-
pid_file = "#{current_path}/tmp/pids/sidekiq.pid"
|
25
|
-
timeout = fetch(:sidekiq_timeout)
|
26
|
-
stop_cmd = "#{bundle_cmd} exec sidekiqctl stop #{pid_file} #{timeout}"
|
27
|
-
|
28
|
-
run "cd #{current_path} && if [ -f #{pid_file} ]; then #{stop_cmd} ; fi"
|
29
|
-
end
|
30
|
-
|
31
|
-
desc 'Start sidekiq-scheduler with sidekiq'
|
32
|
-
task :start, roles: lambda { fetch(:sidekiq_role) } do
|
33
|
-
rails_env = fetch(:rails_env, 'production')
|
34
|
-
bundle_cmd = fetch(:bundle_cmd, 'bundle')
|
35
|
-
log_file = "#{current_path}/log/sidekiq.log 2>&1 &"
|
36
|
-
pid_file = "#{current_path}/tmp/pids/sidekiq.pid"
|
37
|
-
start_cmd = "#{bundle_cmd} exec sidekiq-scheduler start "
|
38
|
-
start_cmd += "-e #{rails_env} "
|
39
|
-
start_cmd += "-C #{current_path}/config/sidekiq.yml "
|
40
|
-
start_cmd += "-P #{pid_file} "
|
41
|
-
exec_cmd = "nohup #{start_cmd}"
|
42
|
-
|
43
|
-
run "cd #{current_path} ; nohup #{exec_cmd} >> #{log_file}", pty: false
|
44
|
-
end
|
45
|
-
|
46
|
-
desc 'Restart sidekiq-scheduler with sidekiq'
|
47
|
-
task :restart, roles: lambda { fetch(:sidekiq_role) } do
|
48
|
-
stop
|
49
|
-
start
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|