sidekiq-cron 1.0.4 → 1.3.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 +5 -5
- data/Changes.md +34 -0
- data/Dockerfile +1 -1
- data/Gemfile +1 -30
- data/README.md +149 -65
- data/Rakefile +0 -18
- data/docker-compose.yml +3 -1
- data/lib/sidekiq/cron/job.rb +92 -25
- data/lib/sidekiq/cron/launcher.rb +34 -40
- data/lib/sidekiq/cron/locales/de.yml +1 -1
- data/lib/sidekiq/cron/locales/en.yml +5 -1
- data/lib/sidekiq/cron/locales/ja.yml +1 -1
- data/lib/sidekiq/cron/locales/ru.yml +1 -1
- data/lib/sidekiq/cron/locales/zh-CN.yml +1 -1
- data/lib/sidekiq/cron/poller.rb +5 -5
- data/lib/sidekiq/cron/version.rb +7 -0
- data/lib/sidekiq/cron/views/cron.erb +8 -6
- data/lib/sidekiq/cron/views/cron.slim +5 -4
- data/lib/sidekiq/cron/views/cron_show.erb +88 -0
- data/lib/sidekiq/cron/views/cron_show.slim +61 -0
- data/lib/sidekiq/cron/web_extension.rb +20 -3
- data/lib/sidekiq/cron.rb +1 -0
- data/sidekiq-cron.gemspec +29 -108
- data/test/integration/performance_test.rb +3 -5
- data/test/test_helper.rb +30 -19
- data/test/unit/job_test.rb +134 -3
- data/test/unit/poller_test.rb +1 -3
- data/test/unit/web_extension_test.rb +56 -36
- metadata +33 -159
- data/.travis.yml +0 -21
- data/VERSION +0 -1
@@ -1,37 +1,40 @@
|
|
1
1
|
require './test/test_helper'
|
2
|
-
|
3
|
-
def app
|
4
|
-
Sidekiq::Web
|
5
|
-
end
|
2
|
+
require 'sidekiq/web'
|
6
3
|
|
7
4
|
describe 'Cron web' do
|
8
5
|
include Rack::Test::Methods
|
9
6
|
|
7
|
+
TOKEN = SecureRandom.base64(32).freeze
|
8
|
+
|
9
|
+
def app
|
10
|
+
Sidekiq::Web
|
11
|
+
end
|
12
|
+
|
10
13
|
before do
|
14
|
+
env 'rack.session', { csrf: TOKEN }
|
15
|
+
env 'HTTP_X_CSRF_TOKEN', TOKEN
|
16
|
+
REDIS.with { |c| c.respond_to?(:redis) ? c.redis.flushdb : c.flushdb }
|
11
17
|
Sidekiq.redis = REDIS
|
12
|
-
|
18
|
+
end
|
13
19
|
|
14
|
-
|
15
|
-
|
16
|
-
conn.keys("cron_job*").each do |key|
|
17
|
-
conn.del(key)
|
18
|
-
end
|
19
|
-
end
|
20
|
+
let(:job_name) { "TestNameOfCronJob" }
|
21
|
+
let(:cron_job_name) { "TesQueueNameOfCronJob" }
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
+
let(:args) do
|
24
|
+
{
|
25
|
+
name: job_name,
|
23
26
|
cron: "*/2 * * * *",
|
24
27
|
klass: "CronTestClass"
|
25
28
|
}
|
29
|
+
end
|
26
30
|
|
27
|
-
|
28
|
-
|
29
|
-
name:
|
31
|
+
let(:cron_args) do
|
32
|
+
{
|
33
|
+
name: cron_job_name,
|
30
34
|
cron: "*/2 * * * *",
|
31
35
|
klass: "CronQueueTestClass",
|
32
36
|
queue: "cron"
|
33
37
|
}
|
34
|
-
|
35
38
|
end
|
36
39
|
|
37
40
|
it 'display cron web' do
|
@@ -45,7 +48,7 @@ describe 'Cron web' do
|
|
45
48
|
end
|
46
49
|
|
47
50
|
it 'display cron web with cron jobs table' do
|
48
|
-
Sidekiq::Cron::Job.create(
|
51
|
+
Sidekiq::Cron::Job.create(args)
|
49
52
|
|
50
53
|
get '/cron'
|
51
54
|
assert_equal 200, last_response.status
|
@@ -55,31 +58,48 @@ describe 'Cron web' do
|
|
55
58
|
end
|
56
59
|
|
57
60
|
describe "work with cron job" do
|
58
|
-
|
59
61
|
before do
|
60
|
-
@job = Sidekiq::Cron::Job.new(
|
61
|
-
@job.save
|
62
|
-
|
62
|
+
@job = Sidekiq::Cron::Job.new(args.merge(status: "enabled"))
|
63
|
+
assert @job.save
|
64
|
+
|
65
|
+
@cron_job = Sidekiq::Cron::Job.new(cron_args.merge(status: "enabled"))
|
66
|
+
assert @cron_job.save
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'shows history of a cron job' do
|
70
|
+
@job.enque!
|
71
|
+
get "/cron/#{job_name}"
|
72
|
+
|
73
|
+
jid =
|
74
|
+
Sidekiq.redis do |conn|
|
75
|
+
history = conn.lrange Sidekiq::Cron::Job.jid_history_key(job_name), 0, -1
|
76
|
+
Sidekiq.load_json(history.last)['jid']
|
77
|
+
end
|
78
|
+
|
79
|
+
assert jid
|
80
|
+
assert last_response.body.include?(jid)
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'redirects to cron path when name not found' do
|
84
|
+
get '/cron/some-fake-name'
|
63
85
|
|
64
|
-
|
65
|
-
@cron_job.save
|
66
|
-
@cron_job_name = "TesQueueNameOfCronJob"
|
86
|
+
assert_match %r{\/cron\z}, last_response['Location']
|
67
87
|
end
|
68
88
|
|
69
89
|
it "disable and enable all cron jobs" do
|
70
90
|
post "/cron/__all__/disable"
|
71
|
-
assert_equal Sidekiq::Cron::Job.find(
|
91
|
+
assert_equal Sidekiq::Cron::Job.find(job_name).status, "disabled"
|
72
92
|
|
73
93
|
post "/cron/__all__/enable"
|
74
|
-
assert_equal Sidekiq::Cron::Job.find(
|
94
|
+
assert_equal Sidekiq::Cron::Job.find(job_name).status, "enabled"
|
75
95
|
end
|
76
96
|
|
77
97
|
it "disable and enable cron job" do
|
78
|
-
post "/cron/#{
|
79
|
-
assert_equal Sidekiq::Cron::Job.find(
|
98
|
+
post "/cron/#{job_name}/disable"
|
99
|
+
assert_equal Sidekiq::Cron::Job.find(job_name).status, "disabled"
|
80
100
|
|
81
|
-
post "/cron/#{
|
82
|
-
assert_equal Sidekiq::Cron::Job.find(
|
101
|
+
post "/cron/#{job_name}/enable"
|
102
|
+
assert_equal Sidekiq::Cron::Job.find(job_name).status, "enabled"
|
83
103
|
end
|
84
104
|
|
85
105
|
it "enqueue all jobs" do
|
@@ -100,21 +120,21 @@ describe 'Cron web' do
|
|
100
120
|
assert_equal 0, conn.llen("queue:default"), "Queue should have no jobs"
|
101
121
|
end
|
102
122
|
|
103
|
-
post "/cron/#{
|
123
|
+
post "/cron/#{job_name}/enque"
|
104
124
|
|
105
125
|
Sidekiq.redis do |conn|
|
106
126
|
assert_equal 1, conn.llen("queue:default"), "Queue should have 1 job"
|
107
127
|
end
|
108
128
|
|
109
129
|
#should enqueue more times
|
110
|
-
post "/cron/#{
|
130
|
+
post "/cron/#{job_name}/enque"
|
111
131
|
|
112
132
|
Sidekiq.redis do |conn|
|
113
133
|
assert_equal 2, conn.llen("queue:default"), "Queue should have 2 job"
|
114
134
|
end
|
115
135
|
|
116
136
|
#should enqueue to cron job queue
|
117
|
-
post "/cron/#{
|
137
|
+
post "/cron/#{cron_job_name}/enque"
|
118
138
|
|
119
139
|
Sidekiq.redis do |conn|
|
120
140
|
assert_equal 1, conn.llen("queue:cron"), "Queue should have 1 cron job"
|
@@ -123,8 +143,8 @@ describe 'Cron web' do
|
|
123
143
|
|
124
144
|
it "destroy job" do
|
125
145
|
assert_equal Sidekiq::Cron::Job.all.size, 2, "Should have 2 job"
|
126
|
-
post "/cron/#{
|
127
|
-
post "/cron/#{
|
146
|
+
post "/cron/#{job_name}/delete"
|
147
|
+
post "/cron/#{cron_job_name}/delete"
|
128
148
|
assert_equal Sidekiq::Cron::Job.all.size, 0, "Should have zero jobs"
|
129
149
|
end
|
130
150
|
|
metadata
CHANGED
@@ -1,45 +1,45 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-cron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ondrej Bartas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: fugit
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '1.1'
|
20
20
|
type: :runtime
|
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:
|
26
|
+
version: '1.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: sidekiq
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 4.2.1
|
34
34
|
type: :runtime
|
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:
|
40
|
+
version: 4.2.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: mocha
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -80,176 +80,50 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 1.5.2
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: shoulda-context
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: rack
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
|
-
- - "
|
87
|
+
- - "~>"
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
89
|
+
version: '2.0'
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- - "
|
94
|
+
- - "~>"
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
96
|
+
version: '2.0'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: rack-test
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
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'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: jeweler
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: minitest
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: test-unit
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ">="
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - ">="
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: sdoc
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ">="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: slim
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - ">="
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '0'
|
188
|
-
type: :development
|
189
|
-
prerelease: false
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - ">="
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: '0'
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: sinatra
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - ">="
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0'
|
202
|
-
type: :development
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - ">="
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '0'
|
209
|
-
- !ruby/object:Gem::Dependency
|
210
|
-
name: mocha
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
212
|
-
requirements:
|
213
|
-
- - ">="
|
214
|
-
- !ruby/object:Gem::Version
|
215
|
-
version: '0'
|
216
|
-
type: :development
|
217
|
-
prerelease: false
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
219
|
-
requirements:
|
220
|
-
- - ">="
|
221
|
-
- !ruby/object:Gem::Version
|
222
|
-
version: '0'
|
223
|
-
- !ruby/object:Gem::Dependency
|
224
|
-
name: coveralls
|
225
|
-
requirement: !ruby/object:Gem::Requirement
|
226
|
-
requirements:
|
227
|
-
- - ">="
|
101
|
+
- - "~>"
|
228
102
|
- !ruby/object:Gem::Version
|
229
|
-
version: '0'
|
103
|
+
version: '1.0'
|
230
104
|
type: :development
|
231
105
|
prerelease: false
|
232
106
|
version_requirements: !ruby/object:Gem::Requirement
|
233
107
|
requirements:
|
234
|
-
- - "
|
108
|
+
- - "~>"
|
235
109
|
- !ruby/object:Gem::Version
|
236
|
-
version: '0'
|
110
|
+
version: '1.0'
|
237
111
|
- !ruby/object:Gem::Dependency
|
238
|
-
name:
|
112
|
+
name: rake
|
239
113
|
requirement: !ruby/object:Gem::Requirement
|
240
114
|
requirements:
|
241
|
-
- - "
|
115
|
+
- - "~>"
|
242
116
|
- !ruby/object:Gem::Version
|
243
|
-
version: '0'
|
117
|
+
version: '13.0'
|
244
118
|
type: :development
|
245
119
|
prerelease: false
|
246
120
|
version_requirements: !ruby/object:Gem::Requirement
|
247
121
|
requirements:
|
248
|
-
- - "
|
122
|
+
- - "~>"
|
249
123
|
- !ruby/object:Gem::Version
|
250
|
-
version: '0'
|
124
|
+
version: '13.0'
|
251
125
|
- !ruby/object:Gem::Dependency
|
252
|
-
name:
|
126
|
+
name: shoulda-context
|
253
127
|
requirement: !ruby/object:Gem::Requirement
|
254
128
|
requirements:
|
255
129
|
- - ">="
|
@@ -263,7 +137,7 @@ dependencies:
|
|
263
137
|
- !ruby/object:Gem::Version
|
264
138
|
version: '0'
|
265
139
|
- !ruby/object:Gem::Dependency
|
266
|
-
name:
|
140
|
+
name: simplecov
|
267
141
|
requirement: !ruby/object:Gem::Requirement
|
268
142
|
requirements:
|
269
143
|
- - ">="
|
@@ -285,14 +159,12 @@ extra_rdoc_files:
|
|
285
159
|
- README.md
|
286
160
|
files:
|
287
161
|
- ".document"
|
288
|
-
- ".travis.yml"
|
289
162
|
- Changes.md
|
290
163
|
- Dockerfile
|
291
164
|
- Gemfile
|
292
165
|
- LICENSE.txt
|
293
166
|
- README.md
|
294
167
|
- Rakefile
|
295
|
-
- VERSION
|
296
168
|
- config.ru
|
297
169
|
- docker-compose.yml
|
298
170
|
- examples/web-cron-ui.png
|
@@ -307,8 +179,11 @@ files:
|
|
307
179
|
- lib/sidekiq/cron/locales/zh-CN.yml
|
308
180
|
- lib/sidekiq/cron/poller.rb
|
309
181
|
- lib/sidekiq/cron/support.rb
|
182
|
+
- lib/sidekiq/cron/version.rb
|
310
183
|
- lib/sidekiq/cron/views/cron.erb
|
311
184
|
- lib/sidekiq/cron/views/cron.slim
|
185
|
+
- lib/sidekiq/cron/views/cron_show.erb
|
186
|
+
- lib/sidekiq/cron/views/cron_show.slim
|
312
187
|
- lib/sidekiq/cron/web.rb
|
313
188
|
- lib/sidekiq/cron/web_extension.rb
|
314
189
|
- sidekiq-cron.gemspec
|
@@ -317,7 +192,7 @@ files:
|
|
317
192
|
- test/unit/job_test.rb
|
318
193
|
- test/unit/poller_test.rb
|
319
194
|
- test/unit/web_extension_test.rb
|
320
|
-
homepage:
|
195
|
+
homepage: https://github.com/ondrejbartas/sidekiq-cron
|
321
196
|
licenses:
|
322
197
|
- MIT
|
323
198
|
metadata: {}
|
@@ -329,15 +204,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
329
204
|
requirements:
|
330
205
|
- - ">="
|
331
206
|
- !ruby/object:Gem::Version
|
332
|
-
version: '
|
207
|
+
version: '2.5'
|
333
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
334
209
|
requirements:
|
335
210
|
- - ">="
|
336
211
|
- !ruby/object:Gem::Version
|
337
212
|
version: '0'
|
338
213
|
requirements: []
|
339
|
-
|
340
|
-
rubygems_version: 2.5.2.1
|
214
|
+
rubygems_version: 3.0.3.1
|
341
215
|
signing_key:
|
342
216
|
specification_version: 4
|
343
217
|
summary: Sidekiq Cron helps to add repeated scheduled jobs
|
data/.travis.yml
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.5.0
|
4
|
-
- 2.4.3
|
5
|
-
- 2.3.6
|
6
|
-
- 2.2.9
|
7
|
-
services:
|
8
|
-
- redis-server
|
9
|
-
branches:
|
10
|
-
only:
|
11
|
-
- master
|
12
|
-
notifications:
|
13
|
-
email:
|
14
|
-
recipients:
|
15
|
-
- ondrej@bartas.cz
|
16
|
-
env:
|
17
|
-
travis: 'yes'
|
18
|
-
matrix:
|
19
|
-
allow_failures:
|
20
|
-
- rvm: jruby-19mode
|
21
|
-
- rvm: rbx-19mode
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.0.4
|