rekiq 1.1.0 → 1.2.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/.gitignore +2 -0
- data/.ruby-version +1 -1
- data/.travis.yml +3 -1
- data/README.md +6 -6
- data/lib/rekiq/configuration.rb +4 -4
- data/lib/rekiq/contract.rb +7 -8
- data/lib/rekiq/middleware/work_overseer.rb +2 -2
- data/lib/rekiq/scheduler.rb +8 -11
- data/lib/rekiq/version.rb +1 -1
- data/lib/rekiq/worker.rb +1 -0
- data/rekiq.gemspec +5 -5
- data/spec/rekiq/worker_spec.rb +34 -9
- data/spec/spec_helper.rb +1 -0
- metadata +25 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 076c615c498fc220128027310ad06d8bb2bb994f
|
4
|
+
data.tar.gz: 7e5af8a28c1c9091a5fd525b14618f207bf4ac1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f98477c020f73f06565d30c9056836ea99aa6a667f15d1ecc7744f772ffd9930e8cb419537063bf94c74afe0e969eec1cd0eee7afaa9c47f0a31532c441e9990
|
7
|
+
data.tar.gz: 0fc94f9ea4c19c537d2b9187e9232a7b3cb5c8fbf51edddd8a9d447e06a5c3535949e7c96f34a5e95845691c39f00eff2389984b2c6a1dd79f573c25c7ede296
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.
|
1
|
+
ruby-2.2.0
|
data/.travis.yml
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
+
- 2.2.0
|
3
4
|
- 2.1.1
|
4
5
|
- 2.0.0
|
5
|
-
script: CODECLIMATE_REPO_TOKEN=13221c16cb92c5dc8312b2f2f9f4960271e67845ba5e2852dbba3d786ccf2c81 bundle exec rspec
|
6
|
+
script: CODECLIMATE_REPO_TOKEN=13221c16cb92c5dc8312b2f2f9f4960271e67845ba5e2852dbba3d786ccf2c81 bundle exec rspec
|
7
|
+
before_install: gem install bundler
|
data/README.md
CHANGED
@@ -11,10 +11,10 @@
|
|
11
11
|
|
12
12
|
Rekiq extends Sidekiq and adds functionality to schedule recurring workers.
|
13
13
|
|
14
|
-
Sidekiq is an amazing gem that allows us to execute work
|
15
|
-
even schedule
|
16
|
-
|
17
|
-
|
14
|
+
Sidekiq is an amazing gem that allows us to execute work asynchronously, or
|
15
|
+
even schedule work to be run at a given time. Now, wouldn't it be nice
|
16
|
+
if it also allowed us to schedule a worker to do recurring work? That's
|
17
|
+
the purpose of rekiq.
|
18
18
|
|
19
19
|
For example, rekiq allows you to schedule a worker to repeat the same
|
20
20
|
work every friday at 23:00.
|
@@ -23,9 +23,9 @@ work every friday at 23:00.
|
|
23
23
|
|
24
24
|
Tested with:
|
25
25
|
|
26
|
-
* ruby 2.1.1, 2.0.0
|
26
|
+
* ruby 2.2.0, 2.1.1, 2.0.0
|
27
27
|
|
28
|
-
* sidekiq 3.
|
28
|
+
* sidekiq 3.3.3
|
29
29
|
|
30
30
|
## Installation
|
31
31
|
|
data/lib/rekiq/configuration.rb
CHANGED
@@ -15,22 +15,22 @@ module Rekiq
|
|
15
15
|
def initialize
|
16
16
|
# indicates if next work is scheduled after or before the worker completes
|
17
17
|
# this is relevant when we want to guarantee that workers do not run in paralel
|
18
|
-
# default false
|
18
|
+
# type bool, default false
|
19
19
|
@schedule_post_work = false
|
20
20
|
|
21
21
|
# indicates a shift, in seconds, to apply to event time returned from schedule
|
22
22
|
# to calculate the work_time
|
23
|
-
# default 0
|
23
|
+
# type int, default 0
|
24
24
|
@work_time_shift = 0
|
25
25
|
|
26
26
|
# indicates the tolerance, in seconds, for work_time relative to current time
|
27
|
-
#
|
27
|
+
# type int (value greater than or equal to 0), default 0
|
28
28
|
@work_time_tolerance = 0
|
29
29
|
|
30
30
|
# indicates if expired work_times are to be scheduled
|
31
31
|
# a work_time is considered expired when it's before current time minus
|
32
32
|
# work_time_tolerance
|
33
|
-
# default false
|
33
|
+
# type bool, default false
|
34
34
|
@schedule_expired = false
|
35
35
|
end
|
36
36
|
end
|
data/lib/rekiq/contract.rb
CHANGED
@@ -17,14 +17,13 @@ module Rekiq
|
|
17
17
|
|
18
18
|
class << self
|
19
19
|
def from_hash(hash)
|
20
|
-
new
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
'schedule_expired' => hash['se']
|
20
|
+
new 'schedule' => Marshal.load(hash['s'].encode('ISO-8859-1')),
|
21
|
+
'cancel_args' => hash['ca'],
|
22
|
+
'addon' => hash['ao'],
|
23
|
+
'schedule_post_work' => hash['pw'],
|
24
|
+
'work_time_shift' => hash['ws'],
|
25
|
+
'work_time_tolerance' => hash['wt'],
|
26
|
+
'schedule_expired' => hash['se']
|
28
27
|
end
|
29
28
|
end
|
30
29
|
|
@@ -40,7 +40,7 @@ module Rekiq
|
|
40
40
|
protected
|
41
41
|
|
42
42
|
def set_rekiq_worker_attributes
|
43
|
-
@worker.scheduled_work_time = Time.at(@msg['rq:at'].to_f)
|
43
|
+
@worker.scheduled_work_time = Time.at(@msg['rq:at'].to_f)
|
44
44
|
@worker.estimated_next_work_time =
|
45
45
|
@contract.next_work_time(@worker.scheduled_work_time)
|
46
46
|
end
|
@@ -49,7 +49,7 @@ module Rekiq
|
|
49
49
|
@worker.cancel_rekiq_worker?(*@contract.cancel_args)
|
50
50
|
end
|
51
51
|
|
52
|
-
def reschedule
|
52
|
+
def reschedule
|
53
53
|
jid, work_time =
|
54
54
|
Rekiq::Scheduler
|
55
55
|
.new(@worker_name, @queue, @msg['args'], @contract)
|
data/lib/rekiq/scheduler.rb
CHANGED
@@ -24,17 +24,14 @@ module Rekiq
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def push_to_redis
|
27
|
-
|
28
|
-
'at' => @work_time.to_f,
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
}
|
36
|
-
|
37
|
-
Sidekiq::Client.push(client_args)
|
27
|
+
Sidekiq::Client
|
28
|
+
.push 'at' => @work_time.to_f,
|
29
|
+
'queue' => @queue,
|
30
|
+
'class' => @worker_name,
|
31
|
+
'args' => @args,
|
32
|
+
'rq:ctr' => @contract.to_hash,
|
33
|
+
'rq:sdl' => nil,
|
34
|
+
'rq:at' => @work_time.to_f # this needs to be here because the key 'at' is removed by sidekiq
|
38
35
|
end
|
39
36
|
end
|
40
37
|
end
|
data/lib/rekiq/version.rb
CHANGED
data/lib/rekiq/worker.rb
CHANGED
data/rekiq.gemspec
CHANGED
@@ -21,13 +21,13 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.required_ruby_version = '>= 2.0.0'
|
23
23
|
|
24
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
25
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
24
|
+
spec.add_development_dependency 'bundler', '~> 1.9'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.2'
|
26
26
|
spec.add_development_dependency 'simplecov', '~> 0.9'
|
27
27
|
spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4'
|
28
|
-
spec.add_development_dependency 'factory_girl', '~> 4.
|
28
|
+
spec.add_development_dependency 'factory_girl', '~> 4.5'
|
29
29
|
spec.add_development_dependency 'ice_cube', '~> 0.12'
|
30
|
-
spec.add_development_dependency 'sidekiq', '~> 3.
|
30
|
+
spec.add_development_dependency 'sidekiq', '~> 3.3'
|
31
31
|
|
32
|
-
|
32
|
+
spec.add_development_dependency 'pry'
|
33
33
|
end
|
data/spec/rekiq/worker_spec.rb
CHANGED
@@ -25,19 +25,44 @@ describe Rekiq::Worker do
|
|
25
25
|
ExampleWorker.respond_to? :perform_recurringly
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
|
-
|
28
|
+
it 'responds to perform_schedule' do
|
29
|
+
ExampleWorker.respond_to? :perform_schedule
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '.perform_recurringly (alias .perform_schedule)' do
|
33
|
+
context 'for schedule that is set to one hour ago' do
|
30
34
|
let(:schedule) { IceCube::Schedule.new(Time.now - 3600) }
|
31
|
-
before do
|
32
|
-
@jid = ExampleWorker.perform_recurringly(schedule)
|
33
|
-
end
|
34
35
|
|
35
|
-
|
36
|
-
|
36
|
+
context 'with default config' do
|
37
|
+
before do
|
38
|
+
@jid = ExampleWorker.perform_recurringly(schedule)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'returns nil' do
|
42
|
+
expect(@jid).to eq(nil)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'does not schedule worker' do
|
46
|
+
expect(ExampleWorker.jobs.count).to eq(0)
|
47
|
+
end
|
37
48
|
end
|
38
49
|
|
39
|
-
|
40
|
-
|
50
|
+
context 'configured to start at two hours ago and ' \
|
51
|
+
'set to schedule expired work' do
|
52
|
+
before do
|
53
|
+
@jid = ExampleWorker.perform_recurringly(schedule) do |config|
|
54
|
+
config.starting_at = Time.now - 7200
|
55
|
+
config.schedule_expired = true
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'returns a jid' do
|
60
|
+
expect(@jid).not_to eq(nil)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'does not schedule worker' do
|
64
|
+
expect(ExampleWorker.jobs.count).to eq(1)
|
65
|
+
end
|
41
66
|
end
|
42
67
|
end
|
43
68
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rekiq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- junhanamaki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.9'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.9'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3.
|
33
|
+
version: '3.2'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '3.
|
40
|
+
version: '3.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: simplecov
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '4.
|
75
|
+
version: '4.5'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '4.
|
82
|
+
version: '4.5'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: ice_cube
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,14 +100,28 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '3.
|
103
|
+
version: '3.3'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '3.
|
110
|
+
version: '3.3'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
description: |-
|
112
126
|
Rekiq extends Sidekiq to allow the scheduling of
|
113
127
|
recurring workers
|
@@ -166,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
180
|
version: '0'
|
167
181
|
requirements: []
|
168
182
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.
|
183
|
+
rubygems_version: 2.4.5
|
170
184
|
signing_key:
|
171
185
|
specification_version: 4
|
172
186
|
summary: Recurring worker extension for Sidekiq
|
@@ -179,4 +193,3 @@ test_files:
|
|
179
193
|
- spec/rekiq/scheduler_spec.rb
|
180
194
|
- spec/rekiq/worker_spec.rb
|
181
195
|
- spec/spec_helper.rb
|
182
|
-
has_rdoc:
|