sidekiq-cron 0.6.3 → 1.4.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 +102 -50
- data/Gemfile +1 -30
- data/README.md +162 -103
- data/Rakefile +3 -42
- data/lib/sidekiq/cron/job.rb +117 -41
- data/lib/sidekiq/cron/launcher.rb +34 -40
- data/lib/sidekiq/cron/locales/de.yml +2 -2
- data/lib/sidekiq/cron/locales/en.yml +6 -2
- data/lib/sidekiq/cron/locales/ja.yml +18 -0
- data/lib/sidekiq/cron/locales/ru.yml +2 -2
- data/lib/sidekiq/cron/locales/zh-CN.yml +19 -0
- data/lib/sidekiq/cron/poller.rb +7 -5
- data/lib/sidekiq/cron/version.rb +7 -0
- data/lib/sidekiq/cron/views/cron.erb +38 -28
- data/lib/sidekiq/cron/views/cron_show.erb +88 -0
- data/lib/sidekiq/cron/web.rb +1 -7
- data/lib/sidekiq/cron/web_extension.rb +14 -7
- data/sidekiq-cron.gemspec +19 -103
- data/test/integration/performance_test.rb +7 -10
- data/test/test_helper.rb +27 -29
- data/test/unit/job_test.rb +171 -18
- data/test/unit/poller_test.rb +22 -25
- data/test/unit/web_extension_test.rb +57 -38
- metadata +34 -179
- data/.document +0 -5
- data/.travis.yml +0 -19
- data/Dockerfile +0 -32
- data/VERSION +0 -1
- data/config.ru +0 -14
- data/docker-compose.yml +0 -21
- data/examples/web-cron-ui.png +0 -0
- data/lib/sidekiq/cron/views/cron.slim +0 -69
@@ -1,24 +1,26 @@
|
|
1
1
|
<header class='row'>
|
2
2
|
<div class='col-sm-5 pull-left'>
|
3
|
-
<h3><%=t
|
3
|
+
<h3><%= t('CronJobs') %></h3>
|
4
4
|
</div>
|
5
5
|
<div class='col-sm-7 pull-right' style="margin-top: 20px; margin-bottom: 10px;">
|
6
|
-
|
7
|
-
<%=
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
<%=
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
<%=
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
<%=
|
20
|
-
|
21
|
-
|
6
|
+
<% if @cron_jobs.size > 0 %>
|
7
|
+
<form action="<%= root_path %>cron/__all__/delete" method="post" class="pull-right">
|
8
|
+
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
9
|
+
<input class="btn btn-danger" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSureDeleteCronJobs') %>" />
|
10
|
+
</form>
|
11
|
+
<form action="<%= root_path %>cron/__all__/disable" method="post" class="pull-right">
|
12
|
+
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
13
|
+
<input class="btn btn-warn" type="submit" name="enque" value="<%= t('DisableAll') %>" />
|
14
|
+
</form>
|
15
|
+
<form action="<%= root_path %>cron/__all__/enable" method="post" class="pull-right">
|
16
|
+
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
17
|
+
<input class="btn btn-warn" type="submit" name="enque" value="<%= t('EnableAll') %>" />
|
18
|
+
</form>
|
19
|
+
<form action="<%= root_path %>cron/__all__/enque" method="post" class="pull-right">
|
20
|
+
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
21
|
+
<input class="btn btn-warn" type="submit" name="enque" value="<%= t('EnqueueAll') %>" data-confirm="<%= t('AreYouSureEnqueueCronJobs') %>" />
|
22
|
+
</form>
|
23
|
+
<% end %>
|
22
24
|
</div>
|
23
25
|
</header>
|
24
26
|
|
@@ -29,23 +31,31 @@
|
|
29
31
|
<th><%= t('Status') %></th>
|
30
32
|
<th><%= t('Name') %></th>
|
31
33
|
<th><%= t('Cron string') %></th>
|
32
|
-
<th><%= t('Last
|
34
|
+
<th><%= t('Last enqueued') %></th>
|
33
35
|
<th width="180"><%= t('Actions')%></th>
|
34
36
|
</thead>
|
35
37
|
|
36
38
|
<tbody>
|
37
39
|
<% @cron_jobs.sort{|a,b| a.sort_name <=> b.sort_name }.each_with_index do |job, index| %>
|
38
|
-
<% style = "#{job.status == 'disabled' ? "background: #ecc": ""}" %>
|
40
|
+
<% style = "#{job.status == 'disabled' ? "background: #ecc; color: #585454;": ""}" %>
|
39
41
|
<tr>
|
40
42
|
<td style="<%= style %>"><%= t job.status %></td>
|
41
43
|
<td style="<%= style %>">
|
42
|
-
<
|
44
|
+
<a href="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>">
|
45
|
+
<b><%= job.name %></b>
|
46
|
+
</a>
|
43
47
|
<hr style="margin:3px;border:0;">
|
44
48
|
<small>
|
45
49
|
<% if job.message and job.message.to_s.size > 100 %>
|
46
|
-
|
47
|
-
|
48
|
-
|
50
|
+
<% if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("6.3.0") %>
|
51
|
+
<button data-toggle="job_<%= index %>" class="btn btn-warn btn-xs"><%= t('ShowAll')%></button>
|
52
|
+
<div class="toggle" id="job_<%= index %>" style="display: inline;"><%= job.message[0..100] + "... " %></div>
|
53
|
+
<div class="toggle" id="job_<%= index %>_full" style="display: none;"><%= job.message %></div>
|
54
|
+
<% else %>
|
55
|
+
<button data-toggle="collapse" data-target=".worker_<%= index %>" class="btn btn-warn btn-xs"><%= t('ShowAll')%></button>
|
56
|
+
<div class="toggle worker_<%= index %>" style="display: inline;"><%= job.message[0..100] + "... " %></div>
|
57
|
+
<div class="toggle worker_<%= index %>" style="display: none;"><%= job.message %></div>
|
58
|
+
<% end %>
|
49
59
|
<% else %>
|
50
60
|
<%= job.message %>
|
51
61
|
<% end %>
|
@@ -57,20 +67,20 @@
|
|
57
67
|
<% if job.status == 'enabled' %>
|
58
68
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/enque" method="post">
|
59
69
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
60
|
-
<input class='btn btn-xs pull-left' type="submit" name="enque" value="<%= t('EnqueueNow') %>"/>
|
70
|
+
<input class='btn btn-warn btn-xs pull-left' type="submit" name="enque" value="<%= t('EnqueueNow') %>" data-confirm="<%= t('AreYouSureEnqueueCronJob', :job => job.name) %>"/>
|
61
71
|
</form>
|
62
72
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/disable" method="post">
|
63
73
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
64
|
-
<input class='btn btn-xs pull-left' type="submit" name="disable" value="<%= t('Disable') %>"/>
|
74
|
+
<input class='btn btn-warn btn-xs pull-left' type="submit" name="disable" value="<%= t('Disable') %>"/>
|
65
75
|
</form>
|
66
76
|
<% else %>
|
67
77
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/enque" method="post">
|
68
78
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
69
|
-
<input class='btn btn-xs pull-left' type="submit" name="enque" value="<%= t('EnqueueNow') %>"/>
|
79
|
+
<input class='btn btn-warn btn-xs pull-left' type="submit" name="enque" value="<%= t('EnqueueNow') %>"/>
|
70
80
|
</form>
|
71
81
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/enable" method="post">
|
72
82
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
73
|
-
<input class='btn btn-xs pull-left' type="submit" name="enable" value="<%= t('Enable') %>"/>
|
83
|
+
<input class='btn btn-warn btn-xs pull-left' type="submit" name="enable" value="<%= t('Enable') %>"/>
|
74
84
|
</form>
|
75
85
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/delete" method="post">
|
76
86
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
@@ -83,6 +93,6 @@
|
|
83
93
|
</tbody>
|
84
94
|
</table>
|
85
95
|
<% else %>
|
86
|
-
<
|
96
|
+
<div class='alert alert-success'><%= t('NoCronJobsWereFound') %></div>
|
87
97
|
<% end %>
|
88
98
|
|
@@ -0,0 +1,88 @@
|
|
1
|
+
<header class="row">
|
2
|
+
<div class="span col-sm-5 pull-left">
|
3
|
+
<h3>
|
4
|
+
<%= "#{t('Cron')} #{t('Job')}" %>
|
5
|
+
<small><%= @job.name %></small>
|
6
|
+
</h3>
|
7
|
+
</div>
|
8
|
+
<div class="span col-sm-7 pull-right" style="margin-top: 20px; margin-bottom: 10px;">
|
9
|
+
<% cron_job_path = "#{root_path}cron/#{CGI.escape(@job.name).gsub('+', '%20')}" %>
|
10
|
+
<form action="<%= cron_job_path %>/enque?redirect=<%= cron_job_path %>" method="post">
|
11
|
+
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
12
|
+
<input class="btn btn-warn pull-left" name="enque" type="submit" value="<%= t('EnqueueNow') %>" data-confirm="<%= t('AreYouSureEnqueueCronJob', :job => @job.name) %>" />
|
13
|
+
</form>
|
14
|
+
<% if @job.status == 'enabled' %>
|
15
|
+
<form action="<%= cron_job_path %>/disable?redirect=<%= cron_job_path %>" method="post">
|
16
|
+
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
17
|
+
<input class="btn btn-warn pull-left" name="disable" type="submit" value="<%= t('Disable') %>" />
|
18
|
+
</form>
|
19
|
+
<% else %>
|
20
|
+
<form action="<%= cron_job_path %>/enable?redirect=<%= cron_job_path %>" method="post">
|
21
|
+
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
22
|
+
<input class="btn btn-warn pull-left" name="enable" type="submit" value="<%= t('Enable') %>" />
|
23
|
+
</form>
|
24
|
+
<form action="<%= cron_job_path %>/delete" method="post">
|
25
|
+
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
26
|
+
<input class="btn btn-danger" data-confirm="<%= t('AreYouSureDeleteCronJob', :job => @job.name) %>" name="delete" type="submit" value="<%= t('Delete') %>" />
|
27
|
+
</form>
|
28
|
+
<% end %>
|
29
|
+
</div>
|
30
|
+
</header>
|
31
|
+
|
32
|
+
<table class="table table-bordered table-striped">
|
33
|
+
<tbody>
|
34
|
+
<tr>
|
35
|
+
<th><%= t 'Status' %></th>
|
36
|
+
<td><%= @job.status %></td>
|
37
|
+
</tr>
|
38
|
+
<tr>
|
39
|
+
<th><%= t 'Name' %></th>
|
40
|
+
<td><%= @job.name %></td>
|
41
|
+
</tr>
|
42
|
+
<tr>
|
43
|
+
<th><%= t 'Description' %></th>
|
44
|
+
<td><%= @job.description %></td>
|
45
|
+
</tr>
|
46
|
+
<tr>
|
47
|
+
<th><%= t 'Message' %></th>
|
48
|
+
<td><pre><%= @job.pretty_message %></pre></td>
|
49
|
+
</tr>
|
50
|
+
<tr>
|
51
|
+
<th><%= t 'Cron' %></th>
|
52
|
+
<td><%= @job.cron.gsub(" ", " ") %></td>
|
53
|
+
</tr>
|
54
|
+
<tr>
|
55
|
+
<th><%= t 'Last enqueued' %></th>
|
56
|
+
<td><%= @job.last_enqueue_time ? relative_time(@job.last_enqueue_time) : "-" %></td>
|
57
|
+
</tr>
|
58
|
+
</tbody>
|
59
|
+
</table>
|
60
|
+
|
61
|
+
<header class="row">
|
62
|
+
<div class="col-sm-12">
|
63
|
+
<h4>
|
64
|
+
<%= t 'History' %>
|
65
|
+
</h4>
|
66
|
+
</div>
|
67
|
+
</header>
|
68
|
+
|
69
|
+
<% if @job.jid_history_from_redis.size > 0 %>
|
70
|
+
<table class="table table-hover table-bordered table-striped">
|
71
|
+
<thead>
|
72
|
+
<tr>
|
73
|
+
<th><%= t 'Enqueued' %></th>
|
74
|
+
<th><%= t 'JID' %></th>
|
75
|
+
</tr>
|
76
|
+
</thead>
|
77
|
+
<tbody>
|
78
|
+
<% @job.jid_history_from_redis.each do |jid_history| %>
|
79
|
+
<tr>
|
80
|
+
<td><%= jid_history['enqueued'] %></td>
|
81
|
+
<td><%= jid_history['jid'] %></td>
|
82
|
+
</tr>
|
83
|
+
<% end %>
|
84
|
+
</tbody>
|
85
|
+
</table>
|
86
|
+
<% else %>
|
87
|
+
<div class='alert alert-success'><%= t 'NoHistoryWereFound' %></div>
|
88
|
+
<% end %>
|
data/lib/sidekiq/cron/web.rb
CHANGED
@@ -3,11 +3,5 @@ require "sidekiq/cron/job"
|
|
3
3
|
|
4
4
|
if defined?(Sidekiq::Web)
|
5
5
|
Sidekiq::Web.register Sidekiq::Cron::WebExtension
|
6
|
-
|
7
|
-
if Sidekiq::Web.tabs.is_a?(Array)
|
8
|
-
# For sidekiq < 2.5
|
9
|
-
Sidekiq::Web.tabs << "cron"
|
10
|
-
else
|
11
|
-
Sidekiq::Web.tabs["Cron"] = "cron"
|
12
|
-
end
|
6
|
+
Sidekiq::Web.tabs["Cron"] = "cron"
|
13
7
|
end
|
@@ -12,11 +12,18 @@ module Sidekiq
|
|
12
12
|
|
13
13
|
@cron_jobs = Sidekiq::Cron::Job.all
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
render(:erb, File.read(File.join(view_path, "cron.erb")))
|
16
|
+
end
|
17
|
+
|
18
|
+
# display job detail + jid history
|
19
|
+
app.get '/cron/:name' do
|
20
|
+
view_path = File.join(File.expand_path("..", __FILE__), "views")
|
21
|
+
|
22
|
+
@job = Sidekiq::Cron::Job.find(route_params[:name])
|
23
|
+
if @job
|
24
|
+
render(:erb, File.read(File.join(view_path, "cron_show.erb")))
|
18
25
|
else
|
19
|
-
|
26
|
+
redirect "#{root_path}cron"
|
20
27
|
end
|
21
28
|
end
|
22
29
|
|
@@ -27,7 +34,7 @@ module Sidekiq
|
|
27
34
|
elsif job = Sidekiq::Cron::Job.find(route_params[:name])
|
28
35
|
job.enque!
|
29
36
|
end
|
30
|
-
redirect "#{root_path}cron"
|
37
|
+
redirect params['redirect'] || "#{root_path}cron"
|
31
38
|
end
|
32
39
|
|
33
40
|
#delete schedule
|
@@ -47,7 +54,7 @@ module Sidekiq
|
|
47
54
|
elsif job = Sidekiq::Cron::Job.find(route_params[:name])
|
48
55
|
job.enable!
|
49
56
|
end
|
50
|
-
redirect "#{root_path}cron"
|
57
|
+
redirect params['redirect'] || "#{root_path}cron"
|
51
58
|
end
|
52
59
|
|
53
60
|
#disable job
|
@@ -57,7 +64,7 @@ module Sidekiq
|
|
57
64
|
elsif job = Sidekiq::Cron::Job.find(route_params[:name])
|
58
65
|
job.disable!
|
59
66
|
end
|
60
|
-
redirect "#{root_path}cron"
|
67
|
+
redirect params['redirect'] || "#{root_path}cron"
|
61
68
|
end
|
62
69
|
|
63
70
|
end
|
data/sidekiq-cron.gemspec
CHANGED
@@ -1,125 +1,41 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: sidekiq-cron 0.6.3 ruby lib
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require './lib/sidekiq/cron/version'
|
6
4
|
|
7
5
|
Gem::Specification.new do |s|
|
8
6
|
s.name = "sidekiq-cron"
|
9
|
-
s.version =
|
7
|
+
s.version = Sidekiq::Cron::VERSION
|
10
8
|
|
11
|
-
s.
|
9
|
+
s.required_ruby_version = ">= 2.5"
|
12
10
|
s.require_paths = ["lib"]
|
13
11
|
s.authors = ["Ondrej Bartas"]
|
14
|
-
s.date = "2017-06-20"
|
15
12
|
s.description = "Enables to set jobs to be run in specified time (using CRON notation)"
|
16
13
|
s.email = "ondrej@bartas.cz"
|
17
14
|
s.extra_rdoc_files = [
|
18
15
|
"LICENSE.txt",
|
19
16
|
"README.md"
|
20
17
|
]
|
21
|
-
s.files = [
|
22
|
-
".document",
|
23
|
-
".travis.yml",
|
18
|
+
s.files = Dir.glob('lib/**/*') + Dir.glob('test/**/*') + [
|
24
19
|
"Changes.md",
|
25
|
-
"Dockerfile",
|
26
20
|
"Gemfile",
|
27
21
|
"LICENSE.txt",
|
28
|
-
"README.md",
|
29
22
|
"Rakefile",
|
30
|
-
"
|
31
|
-
"config.ru",
|
32
|
-
"docker-compose.yml",
|
33
|
-
"examples/web-cron-ui.png",
|
34
|
-
"lib/sidekiq-cron.rb",
|
35
|
-
"lib/sidekiq/cron.rb",
|
36
|
-
"lib/sidekiq/cron/job.rb",
|
37
|
-
"lib/sidekiq/cron/launcher.rb",
|
38
|
-
"lib/sidekiq/cron/locales/de.yml",
|
39
|
-
"lib/sidekiq/cron/locales/en.yml",
|
40
|
-
"lib/sidekiq/cron/locales/ru.yml",
|
41
|
-
"lib/sidekiq/cron/poller.rb",
|
42
|
-
"lib/sidekiq/cron/support.rb",
|
43
|
-
"lib/sidekiq/cron/views/cron.erb",
|
44
|
-
"lib/sidekiq/cron/views/cron.slim",
|
45
|
-
"lib/sidekiq/cron/web.rb",
|
46
|
-
"lib/sidekiq/cron/web_extension.rb",
|
23
|
+
"README.md",
|
47
24
|
"sidekiq-cron.gemspec",
|
48
|
-
"test/integration/performance_test.rb",
|
49
|
-
"test/test_helper.rb",
|
50
|
-
"test/unit/job_test.rb",
|
51
|
-
"test/unit/poller_test.rb",
|
52
|
-
"test/unit/web_extension_test.rb"
|
53
25
|
]
|
54
|
-
|
26
|
+
|
27
|
+
s.homepage = "https://github.com/ondrejbartas/sidekiq-cron"
|
55
28
|
s.licenses = ["MIT"]
|
56
|
-
s.
|
57
|
-
s.summary = "Sidekiq Cron helps to add repeated scheduled jobs"
|
29
|
+
s.summary = "Sidekiq-Cron helps to add repeated scheduled jobs"
|
58
30
|
|
59
|
-
|
60
|
-
|
31
|
+
s.add_dependency("fugit", "~> 1")
|
32
|
+
s.add_dependency("sidekiq", ">= 4.2.1")
|
61
33
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
s.add_development_dependency(%q<rack>, [">= 0"])
|
70
|
-
s.add_development_dependency(%q<rack-test>, [">= 0"])
|
71
|
-
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
72
|
-
s.add_development_dependency(%q<minitest>, [">= 0"])
|
73
|
-
s.add_development_dependency(%q<test-unit>, [">= 0"])
|
74
|
-
s.add_development_dependency(%q<sdoc>, [">= 0"])
|
75
|
-
s.add_development_dependency(%q<slim>, [">= 0"])
|
76
|
-
s.add_development_dependency(%q<sinatra>, [">= 0"])
|
77
|
-
s.add_development_dependency(%q<mocha>, [">= 0"])
|
78
|
-
s.add_development_dependency(%q<coveralls>, [">= 0"])
|
79
|
-
s.add_development_dependency(%q<shotgun>, [">= 0"])
|
80
|
-
s.add_development_dependency(%q<guard>, [">= 0"])
|
81
|
-
s.add_development_dependency(%q<guard-minitest>, [">= 0"])
|
82
|
-
else
|
83
|
-
s.add_dependency(%q<sidekiq>, [">= 4.2.1"])
|
84
|
-
s.add_dependency(%q<rufus-scheduler>, [">= 3.3.0"])
|
85
|
-
s.add_dependency(%q<bundler>, [">= 0"])
|
86
|
-
s.add_dependency(%q<simplecov>, [">= 0"])
|
87
|
-
s.add_dependency(%q<redis-namespace>, [">= 1.5.2"])
|
88
|
-
s.add_dependency(%q<shoulda-context>, [">= 0"])
|
89
|
-
s.add_dependency(%q<rack>, [">= 0"])
|
90
|
-
s.add_dependency(%q<rack-test>, [">= 0"])
|
91
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
92
|
-
s.add_dependency(%q<minitest>, [">= 0"])
|
93
|
-
s.add_dependency(%q<test-unit>, [">= 0"])
|
94
|
-
s.add_dependency(%q<sdoc>, [">= 0"])
|
95
|
-
s.add_dependency(%q<slim>, [">= 0"])
|
96
|
-
s.add_dependency(%q<sinatra>, [">= 0"])
|
97
|
-
s.add_dependency(%q<mocha>, [">= 0"])
|
98
|
-
s.add_dependency(%q<coveralls>, [">= 0"])
|
99
|
-
s.add_dependency(%q<shotgun>, [">= 0"])
|
100
|
-
s.add_dependency(%q<guard>, [">= 0"])
|
101
|
-
s.add_dependency(%q<guard-minitest>, [">= 0"])
|
102
|
-
end
|
103
|
-
else
|
104
|
-
s.add_dependency(%q<sidekiq>, [">= 4.2.1"])
|
105
|
-
s.add_dependency(%q<rufus-scheduler>, [">= 3.3.0"])
|
106
|
-
s.add_dependency(%q<bundler>, [">= 0"])
|
107
|
-
s.add_dependency(%q<simplecov>, [">= 0"])
|
108
|
-
s.add_dependency(%q<redis-namespace>, [">= 1.5.2"])
|
109
|
-
s.add_dependency(%q<shoulda-context>, [">= 0"])
|
110
|
-
s.add_dependency(%q<rack>, [">= 0"])
|
111
|
-
s.add_dependency(%q<rack-test>, [">= 0"])
|
112
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
113
|
-
s.add_dependency(%q<minitest>, [">= 0"])
|
114
|
-
s.add_dependency(%q<test-unit>, [">= 0"])
|
115
|
-
s.add_dependency(%q<sdoc>, [">= 0"])
|
116
|
-
s.add_dependency(%q<slim>, [">= 0"])
|
117
|
-
s.add_dependency(%q<sinatra>, [">= 0"])
|
118
|
-
s.add_dependency(%q<mocha>, [">= 0"])
|
119
|
-
s.add_dependency(%q<coveralls>, [">= 0"])
|
120
|
-
s.add_dependency(%q<shotgun>, [">= 0"])
|
121
|
-
s.add_dependency(%q<guard>, [">= 0"])
|
122
|
-
s.add_dependency(%q<guard-minitest>, [">= 0"])
|
123
|
-
end
|
34
|
+
s.add_development_dependency("minitest")
|
35
|
+
s.add_development_dependency("mocha")
|
36
|
+
s.add_development_dependency("redis-namespace", ">= 1.5.2")
|
37
|
+
s.add_development_dependency("rack", "~> 2.0")
|
38
|
+
s.add_development_dependency("rack-test", "~> 1.0")
|
39
|
+
s.add_development_dependency("rake", "~> 13.0")
|
40
|
+
s.add_development_dependency("simplecov")
|
124
41
|
end
|
125
|
-
|
@@ -1,14 +1,11 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
require './test/test_helper'
|
3
2
|
require 'benchmark'
|
4
3
|
|
5
|
-
describe '
|
4
|
+
describe 'Performance Poller' do
|
6
5
|
X = 10000
|
7
6
|
before do
|
7
|
+
REDIS.with { |c| c.respond_to?(:redis) ? c.redis.flushdb : c.flushdb }
|
8
8
|
Sidekiq.redis = REDIS
|
9
|
-
Sidekiq.redis do |conn|
|
10
|
-
conn.flushdb
|
11
|
-
end
|
12
9
|
|
13
10
|
#clear all previous saved data from redis
|
14
11
|
Sidekiq.redis do |conn|
|
@@ -28,12 +25,12 @@ describe 'Perfromance Poller' do
|
|
28
25
|
end
|
29
26
|
|
30
27
|
@poller = Sidekiq::Cron::Poller.new
|
31
|
-
now = Time.now.utc
|
32
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour
|
28
|
+
now = Time.now.utc + 3600
|
29
|
+
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 10, 5)
|
33
30
|
Time.stubs(:now).returns(enqueued_time)
|
34
31
|
end
|
35
32
|
|
36
|
-
it 'should enqueue 10000 jobs in less than
|
33
|
+
it 'should enqueue 10000 jobs in less than 50s' do
|
37
34
|
Sidekiq.redis do |conn|
|
38
35
|
assert_equal 0, conn.llen("queue:default"), 'Queue should be empty'
|
39
36
|
end
|
@@ -46,7 +43,7 @@ describe 'Perfromance Poller' do
|
|
46
43
|
assert_equal X, conn.llen("queue:default"), 'Queue should be full'
|
47
44
|
end
|
48
45
|
|
49
|
-
puts "
|
50
|
-
assert_operator
|
46
|
+
puts "Performance test finished in #{bench.real}"
|
47
|
+
assert_operator bench.real, :<, 50
|
51
48
|
end
|
52
49
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,37 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
begin
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
1
|
+
$TESTING = true
|
2
|
+
ENV['RACK_ENV'] = 'test'
|
10
3
|
|
11
4
|
require 'simplecov'
|
12
5
|
SimpleCov.start do
|
13
6
|
add_filter "/test/"
|
14
|
-
|
15
7
|
add_group 'SidekiqCron', 'lib/'
|
16
8
|
end
|
17
|
-
require 'coveralls'
|
18
|
-
Coveralls.wear!
|
19
9
|
|
20
10
|
require "minitest/autorun"
|
21
|
-
require 'shoulda-context'
|
22
11
|
require "rack/test"
|
23
|
-
require
|
24
|
-
|
25
|
-
ENV['RACK_ENV'] = 'test'
|
26
|
-
|
27
|
-
#SIDEKIQ Require - need to have sidekiq running!
|
12
|
+
require 'mocha/minitest'
|
28
13
|
require 'sidekiq'
|
29
|
-
require
|
14
|
+
require "sidekiq-pro" if ENV['SIDEKIQ_PRO_VERSION']
|
30
15
|
require 'sidekiq/web'
|
31
16
|
|
32
17
|
Sidekiq.logger.level = Logger::ERROR
|
33
18
|
|
34
|
-
require 'sidekiq/redis_connection'
|
35
19
|
redis_url = ENV['REDIS_URL'] || 'redis://0.0.0.0:6379'
|
36
20
|
REDIS = Sidekiq::RedisConnection.create(:url => redis_url, :namespace => 'testy')
|
37
21
|
|
@@ -39,12 +23,15 @@ Sidekiq.configure_client do |config|
|
|
39
23
|
config.redis = { :url => redis_url, :namespace => 'testy' }
|
40
24
|
end
|
41
25
|
|
42
|
-
|
43
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
44
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
45
26
|
require 'sidekiq-cron'
|
46
27
|
require 'sidekiq/cron/web'
|
47
|
-
|
28
|
+
|
29
|
+
# For testing os symbilize args!
|
30
|
+
class Hash
|
31
|
+
def symbolize_keys
|
32
|
+
transform_keys { |key| key.to_sym rescue key }
|
33
|
+
end
|
34
|
+
end
|
48
35
|
|
49
36
|
class CronTestClass
|
50
37
|
include Sidekiq::Worker
|
@@ -66,6 +53,13 @@ end
|
|
66
53
|
|
67
54
|
module ActiveJob
|
68
55
|
class Base
|
56
|
+
attr_accessor *%i[job_class provider_job_id queue_name arguments]
|
57
|
+
|
58
|
+
def initialize
|
59
|
+
yield self if block_given?
|
60
|
+
self.provider_job_id ||= SecureRandom.hex(12)
|
61
|
+
end
|
62
|
+
|
69
63
|
def self.queue_name_prefix
|
70
64
|
@queue_name_prefix
|
71
65
|
end
|
@@ -80,12 +74,16 @@ module ActiveJob
|
|
80
74
|
self
|
81
75
|
end
|
82
76
|
|
77
|
+
def try(method, *args, &block)
|
78
|
+
send method, *args, &block if respond_to? method
|
79
|
+
end
|
80
|
+
|
83
81
|
def self.perform_later(*args)
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
82
|
+
new do |instance|
|
83
|
+
instance.job_class = self.class.name
|
84
|
+
instance.queue_name = @queue
|
85
|
+
instance.arguments = [*args]
|
86
|
+
end
|
89
87
|
end
|
90
88
|
end
|
91
89
|
end
|