sidekiq-scheduler 1.1 → 1.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 +4 -4
- data/README.md +18 -3
- data/lib/sidekiq-scheduler/version.rb +3 -1
- data/lib/sidekiq-scheduler/web.rb +19 -0
- data/lib/sidekiq/scheduler.rb +1 -1
- data/test/lib/sidekiq/scheduler_test.rb +31 -1
- data/test/lib/sidekiq/web_test.rb +51 -0
- metadata +34 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75ecc98109d7528987f25b9f60a8bfa3cb49e627
|
4
|
+
data.tar.gz: 3409f6bb8914728dbad69fc302454c8cfc1d85cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ce177f8c66589464da269a155047d74f76db11ea4b402f9a9fe5c62c8d573220cc72de786ad1f859924b5ce024c98f9494c54fb1261936a45d8ec2ba2c94aae
|
7
|
+
data.tar.gz: 4d6cfa0dbe517086e9cd6ff51e6bdc4164159f2e57970089b9db83028fd984f0a79ddedab25dccfac3ba8c3e528c5f3133217d8d098faedcbb5c714002f51208
|
data/README.md
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
|
1
|
+
<p align="center">
|
2
|
+
<a href="http://moove-it.github.io/sidekiq-scheduler/">
|
3
|
+
<img src="https://moove-it.github.io/sidekiq-scheduler/images/logo.png" alt="Sidekiq Scheduler" />
|
4
|
+
</a>
|
5
|
+
</p>
|
2
6
|
|
3
7
|
## Note
|
4
8
|
|
@@ -22,7 +26,7 @@ details on individual methods, you might want to try the [rdoc](http://rdoc.info
|
|
22
26
|
|
23
27
|
Add this to your Gemfile:
|
24
28
|
```ruby
|
25
|
-
gem 'sidekiq-scheduler', '~> 1'
|
29
|
+
gem 'sidekiq-scheduler', '~> 1.2'
|
26
30
|
```
|
27
31
|
|
28
32
|
If you are using rails you are set
|
@@ -62,7 +66,7 @@ is most likely stored in a YAML like so:
|
|
62
66
|
queue_documents_for_indexing:
|
63
67
|
cron: "0 0 * * *"
|
64
68
|
# you can use rufus-scheduler "every" syntax in place of cron if you prefer
|
65
|
-
# every:
|
69
|
+
# every: 1h
|
66
70
|
# By default the job name (hash key) will be taken as worker class name.
|
67
71
|
# If you want to have a different job name and class name, provide the 'class' option
|
68
72
|
class: QueueDocuments
|
@@ -148,6 +152,17 @@ from the `config.time_zone` value, make sure it's the right format, e.g. with:
|
|
148
152
|
|
149
153
|
A future version of sidekiq-scheduler may do this for you.
|
150
154
|
|
155
|
+
### Sidekiq Web Integration
|
156
|
+
|
157
|
+
SidekiqScheduler provides an extension to the Sidekiq web interface that adds a Recurring Jobs page.
|
158
|
+
|
159
|
+
To use it, set up the Sidekiq web interface according to the Sidekiq documentation and then add the SidekiqScheduler::Web require:
|
160
|
+
|
161
|
+
``` ruby
|
162
|
+
require 'sidekiq/web'
|
163
|
+
require 'sidekiq-scheduler/web'
|
164
|
+
```
|
165
|
+
|
151
166
|
## Note on Patches / Pull Requests
|
152
167
|
|
153
168
|
* Fork the project.
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module SidekiqScheduler
|
2
|
+
# Hook into *Sidekiq::Web* Sinatra app which adds a new "/recurring-jobs" page
|
3
|
+
|
4
|
+
module Web
|
5
|
+
VIEW_PATH = File.expand_path('../../../web/views', __FILE__)
|
6
|
+
|
7
|
+
def self.registered(app)
|
8
|
+
app.get '/recurring-jobs' do
|
9
|
+
@schedule = Sidekiq.schedule
|
10
|
+
|
11
|
+
erb File.read(File.join(VIEW_PATH, "recurring_jobs.erb"))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'sidekiq/web' unless defined?(Sidekiq::Web)
|
18
|
+
Sidekiq::Web.register(SidekiqScheduler::Web)
|
19
|
+
Sidekiq::Web.tabs["Recurring Jobs"] = "recurring-jobs"
|
data/lib/sidekiq/scheduler.rb
CHANGED
@@ -77,7 +77,7 @@ module Sidekiq
|
|
77
77
|
if config['rails_env'].nil? || self.rails_env_matches?(config)
|
78
78
|
logger.info "Scheduling #{name} "
|
79
79
|
interval_defined = false
|
80
|
-
interval_types = %w{cron every}
|
80
|
+
interval_types = %w{cron every at in}
|
81
81
|
interval_types.each do |interval_type|
|
82
82
|
if !config[interval_type].nil? && config[interval_type].length > 0
|
83
83
|
args = self.optionizate_interval_value(config[interval_type])
|
@@ -160,6 +160,36 @@ class ManagerTest < Minitest::Test
|
|
160
160
|
assert Sidekiq::Scheduler.scheduled_jobs['some_ivar_job'].params.keys.include?(:allow_overlapping)
|
161
161
|
end
|
162
162
|
|
163
|
+
it 'load_schedule_job with at' do
|
164
|
+
Sidekiq::Scheduler.load_schedule_job(
|
165
|
+
'some_ivar_job',
|
166
|
+
{
|
167
|
+
'at' => "2013/12/12 12:30",
|
168
|
+
'class' => 'SomeIvarJob',
|
169
|
+
'args' => '/tmp'
|
170
|
+
}
|
171
|
+
)
|
172
|
+
|
173
|
+
assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.all_jobs.size)
|
174
|
+
assert_equal(1, Sidekiq::Scheduler.scheduled_jobs.size)
|
175
|
+
assert Sidekiq::Scheduler.scheduled_jobs.keys.include?('some_ivar_job')
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'load_schedule_job with in' do
|
179
|
+
Sidekiq::Scheduler.load_schedule_job(
|
180
|
+
'some_ivar_job',
|
181
|
+
{
|
182
|
+
'in' => "10d",
|
183
|
+
'class' => 'SomeIvarJob',
|
184
|
+
'args' => '/tmp'
|
185
|
+
}
|
186
|
+
)
|
187
|
+
|
188
|
+
assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.all_jobs.size)
|
189
|
+
assert_equal(1, Sidekiq::Scheduler.scheduled_jobs.size)
|
190
|
+
assert Sidekiq::Scheduler.scheduled_jobs.keys.include?('some_ivar_job')
|
191
|
+
end
|
192
|
+
|
163
193
|
it 'does not load the schedule without cron' do
|
164
194
|
Sidekiq::Scheduler.load_schedule_job(
|
165
195
|
'some_ivar_job',
|
@@ -240,4 +270,4 @@ class ManagerTest < Minitest::Test
|
|
240
270
|
end
|
241
271
|
|
242
272
|
end
|
243
|
-
end
|
273
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'sidekiq-scheduler/web'
|
3
|
+
require 'rack/test'
|
4
|
+
|
5
|
+
class WebTest < MiniTest::Test
|
6
|
+
describe 'sidekiq-scheduler web' do
|
7
|
+
include Rack::Test::Methods
|
8
|
+
|
9
|
+
def app
|
10
|
+
Sidekiq::Web
|
11
|
+
end
|
12
|
+
|
13
|
+
before do
|
14
|
+
# Sidekiq::WebHelpers expects the Redis client to return an id
|
15
|
+
Sidekiq.redis { |conn| conn.client.stubs(:id).returns('redis://127.0.0.1:1234/0') }
|
16
|
+
|
17
|
+
Sidekiq.schedule = {
|
18
|
+
'Foo Job' => {
|
19
|
+
'class' => 'FooClass',
|
20
|
+
'cron' => '0 * * * * US/Eastern',
|
21
|
+
'args' => [42],
|
22
|
+
'description' => 'Does foo things.'
|
23
|
+
},
|
24
|
+
|
25
|
+
'Bar Job' => {
|
26
|
+
'class' => 'BarClass',
|
27
|
+
'every' => '1h',
|
28
|
+
'args' => ['foo', 'bar'],
|
29
|
+
'queue' => 'special'
|
30
|
+
}
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'shows schedule' do
|
35
|
+
get '/recurring-jobs'
|
36
|
+
|
37
|
+
assert_match /Foo Job/, last_response.body
|
38
|
+
assert_match /FooClass/, last_response.body
|
39
|
+
assert_match /0 \* \* \* \* US\/Eastern/, last_response.body
|
40
|
+
assert_match /default/, last_response.body
|
41
|
+
assert_match /\[42\]/, last_response.body
|
42
|
+
assert_match /Does foo things\./, last_response.body
|
43
|
+
|
44
|
+
assert_match /Bar Job/, last_response.body
|
45
|
+
assert_match /BarClass/, last_response.body
|
46
|
+
assert_match /1h/, last_response.body
|
47
|
+
assert_match /special/, last_response.body
|
48
|
+
assert_match /\[\"foo\", \"bar\"\]/, last_response.body
|
49
|
+
end
|
50
|
+
end
|
51
|
+
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: '1.
|
4
|
+
version: '1.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Morton Jonuschat
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-10-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sidekiq
|
@@ -157,6 +157,34 @@ dependencies:
|
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0'
|
160
|
+
- !ruby/object:Gem::Dependency
|
161
|
+
name: rack-test
|
162
|
+
requirement: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
type: :development
|
168
|
+
prerelease: false
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: sinatra
|
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'
|
160
188
|
description: Light weight job scheduling extension for Sidekiq that adds support for
|
161
189
|
queueing items in the future.
|
162
190
|
email:
|
@@ -173,11 +201,13 @@ files:
|
|
173
201
|
- lib/sidekiq-scheduler/manager.rb
|
174
202
|
- lib/sidekiq-scheduler/schedule.rb
|
175
203
|
- lib/sidekiq-scheduler/version.rb
|
204
|
+
- lib/sidekiq-scheduler/web.rb
|
176
205
|
- lib/sidekiq/scheduler.rb
|
177
206
|
- lib/tasks/sidekiq-scheduler_tasks.rake
|
178
207
|
- test/config.yml
|
179
208
|
- test/fake_env.rb
|
180
209
|
- test/lib/sidekiq/scheduler_test.rb
|
210
|
+
- test/lib/sidekiq/web_test.rb
|
181
211
|
- test/schedule_test.rb
|
182
212
|
- test/support/direct_worker.rb
|
183
213
|
- test/support/my_worker.rb
|
@@ -202,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
232
|
version: '0'
|
203
233
|
requirements: []
|
204
234
|
rubyforge_project:
|
205
|
-
rubygems_version: 2.
|
235
|
+
rubygems_version: 2.4.5
|
206
236
|
signing_key:
|
207
237
|
specification_version: 4
|
208
238
|
summary: Light weight job scheduling extension for Sidekiq
|
@@ -210,6 +240,7 @@ test_files:
|
|
210
240
|
- test/config.yml
|
211
241
|
- test/fake_env.rb
|
212
242
|
- test/lib/sidekiq/scheduler_test.rb
|
243
|
+
- test/lib/sidekiq/web_test.rb
|
213
244
|
- test/schedule_test.rb
|
214
245
|
- test/support/direct_worker.rb
|
215
246
|
- test/support/my_worker.rb
|