sidekiq-cron 1.2.0 → 1.5.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 +107 -82
- data/Gemfile +1 -30
- data/README.md +154 -106
- data/Rakefile +3 -42
- data/lib/sidekiq/cron/job.rb +38 -17
- data/lib/sidekiq/cron/locales/en.yml +2 -0
- data/lib/sidekiq/cron/locales/pt.yml +22 -0
- data/lib/sidekiq/cron/poller.rb +13 -5
- data/lib/sidekiq/cron/version.rb +7 -0
- data/lib/sidekiq/cron/views/cron.erb +19 -13
- data/lib/sidekiq/cron/views/cron_show.erb +8 -8
- data/lib/sidekiq/cron/web.rb +1 -7
- data/lib/sidekiq/cron/web_extension.rb +2 -12
- data/sidekiq-cron.gemspec +25 -113
- data/test/integration/performance_test.rb +3 -4
- data/test/test_helper.rb +10 -23
- data/test/unit/job_test.rb +104 -4
- data/test/unit/poller_test.rb +1 -3
- data/test/unit/web_extension_test.rb +38 -38
- metadata +47 -195
- data/.document +0 -5
- data/.travis.yml +0 -18
- data/Dockerfile +0 -32
- data/VERSION +0 -1
- data/config.ru +0 -14
- data/docker-compose.yml +0 -23
- data/examples/web-cron-ui.png +0 -0
- data/lib/sidekiq/cron/views/cron.slim +0 -71
- data/lib/sidekiq/cron/views/cron_show.slim +0 -61
@@ -0,0 +1,22 @@
|
|
1
|
+
pt:
|
2
|
+
Job: Tarefa
|
3
|
+
Cron: Cron
|
4
|
+
CronJobs: Tarefas do Cron
|
5
|
+
EnqueueNow: Enfileirar agora
|
6
|
+
EnableAll: Habilitar todos
|
7
|
+
DisableAll: Desabilitar todos
|
8
|
+
EnqueueAll: Enfileirar todos
|
9
|
+
DeleteAll: Excluir todos
|
10
|
+
'Cron string': Cron
|
11
|
+
AreYouSureEnqueueCronJobs: Tem certeza de que deseja enfileirar TODOS as tarefas?
|
12
|
+
AreYouSureEnqueueCronJob: Tem certeza de que deseja enfileirar a tarefa %{job}?
|
13
|
+
AreYouSureDeleteCronJobs: Tem certeza de que deseja excluir TODOS as tarefas?
|
14
|
+
AreYouSureDeleteCronJob: Tem certeza de que deseja excluir a tarefa %{job}?
|
15
|
+
NoCronJobsWereFound: Nenhuma tarefa foi encontrada
|
16
|
+
Enable: Habilitar
|
17
|
+
Disable: Desabilitar
|
18
|
+
'Last enqueued': Último enfileirado
|
19
|
+
disabled: desabilitado
|
20
|
+
enabled: habilitado
|
21
|
+
NoHistoryWereFound: Nenhum histórico foi encontrado
|
22
|
+
Description: Descrição
|
data/lib/sidekiq/cron/poller.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'sidekiq'
|
2
|
-
require 'sidekiq/util'
|
3
2
|
require 'sidekiq/cron'
|
4
3
|
require 'sidekiq/scheduled'
|
5
4
|
|
@@ -9,6 +8,19 @@ module Sidekiq
|
|
9
8
|
|
10
9
|
# The Poller checks Redis every N seconds for sheduled cron jobs
|
11
10
|
class Poller < Sidekiq::Scheduled::Poller
|
11
|
+
def initialize
|
12
|
+
Sidekiq.configure_server do |config|
|
13
|
+
config[:poll_interval_average] = config[:average_scheduled_poll_interval] || POLL_INTERVAL
|
14
|
+
end
|
15
|
+
|
16
|
+
if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("6.5.0")
|
17
|
+
# Sidekiq Poller init requires a config argument
|
18
|
+
super(Sidekiq)
|
19
|
+
else
|
20
|
+
super
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
12
24
|
def enqueue
|
13
25
|
time = Time.now.utc
|
14
26
|
Sidekiq::Cron::Job.all.each do |job|
|
@@ -32,10 +44,6 @@ module Sidekiq
|
|
32
44
|
Sidekiq.logger.error "CRON JOB: #{ex.backtrace.first}"
|
33
45
|
handle_exception(ex) if respond_to?(:handle_exception)
|
34
46
|
end
|
35
|
-
|
36
|
-
def poll_interval_average
|
37
|
-
Sidekiq.options[:poll_interval] || POLL_INTERVAL
|
38
|
-
end
|
39
47
|
end
|
40
48
|
end
|
41
49
|
end
|
@@ -1,24 +1,24 @@
|
|
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
6
|
<% if @cron_jobs.size > 0 %>
|
7
7
|
<form action="<%= root_path %>cron/__all__/delete" method="post" class="pull-right">
|
8
8
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
9
|
-
<input class="btn btn-
|
9
|
+
<input class="btn btn-danger" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSureDeleteCronJobs') %>" />
|
10
10
|
</form>
|
11
11
|
<form action="<%= root_path %>cron/__all__/disable" method="post" class="pull-right">
|
12
12
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
13
|
-
<input class="btn btn-
|
13
|
+
<input class="btn btn-warn" type="submit" name="enque" value="<%= t('DisableAll') %>" />
|
14
14
|
</form>
|
15
15
|
<form action="<%= root_path %>cron/__all__/enable" method="post" class="pull-right">
|
16
16
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
17
|
-
<input class="btn btn-
|
17
|
+
<input class="btn btn-warn" type="submit" name="enque" value="<%= t('EnableAll') %>" />
|
18
18
|
</form>
|
19
19
|
<form action="<%= root_path %>cron/__all__/enque" method="post" class="pull-right">
|
20
20
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
21
|
-
<input class="btn btn-
|
21
|
+
<input class="btn btn-warn" type="submit" name="enque" value="<%= t('EnqueueAll') %>" data-confirm="<%= t('AreYouSureEnqueueCronJobs') %>" />
|
22
22
|
</form>
|
23
23
|
<% end %>
|
24
24
|
</div>
|
@@ -37,7 +37,7 @@
|
|
37
37
|
|
38
38
|
<tbody>
|
39
39
|
<% @cron_jobs.sort{|a,b| a.sort_name <=> b.sort_name }.each_with_index do |job, index| %>
|
40
|
-
<% style = "#{job.status == 'disabled' ? "background: #ecc": ""}" %>
|
40
|
+
<% style = "#{job.status == 'disabled' ? "background: #ecc; color: #585454;": ""}" %>
|
41
41
|
<tr>
|
42
42
|
<td style="<%= style %>"><%= t job.status %></td>
|
43
43
|
<td style="<%= style %>">
|
@@ -47,9 +47,15 @@
|
|
47
47
|
<hr style="margin:3px;border:0;">
|
48
48
|
<small>
|
49
49
|
<% if job.message and job.message.to_s.size > 100 %>
|
50
|
-
|
51
|
-
|
52
|
-
|
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 %>
|
53
59
|
<% else %>
|
54
60
|
<%= job.message %>
|
55
61
|
<% end %>
|
@@ -61,20 +67,20 @@
|
|
61
67
|
<% if job.status == 'enabled' %>
|
62
68
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/enque" method="post">
|
63
69
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
64
|
-
<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) %>"/>
|
65
71
|
</form>
|
66
72
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/disable" method="post">
|
67
73
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
68
|
-
<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') %>"/>
|
69
75
|
</form>
|
70
76
|
<% else %>
|
71
77
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/enque" method="post">
|
72
78
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
73
|
-
<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') %>"/>
|
74
80
|
</form>
|
75
81
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/enable" method="post">
|
76
82
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
77
|
-
<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') %>"/>
|
78
84
|
</form>
|
79
85
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/delete" method="post">
|
80
86
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
@@ -7,23 +7,23 @@
|
|
7
7
|
</div>
|
8
8
|
<div class="span col-sm-7 pull-right" style="margin-top: 20px; margin-bottom: 10px;">
|
9
9
|
<% cron_job_path = "#{root_path}cron/#{CGI.escape(@job.name).gsub('+', '%20')}" %>
|
10
|
-
<form action="<%= cron_job_path %>/enque?redirect=<%= cron_job_path %>"
|
10
|
+
<form action="<%= cron_job_path %>/enque?redirect=<%= cron_job_path %>" method="post">
|
11
11
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
12
|
-
<input class="btn btn-
|
12
|
+
<input class="btn btn-warn pull-left" name="enque" type="submit" value="<%= t('EnqueueNow') %>" data-confirm="<%= t('AreYouSureEnqueueCronJob', :job => @job.name) %>" />
|
13
13
|
</form>
|
14
14
|
<% if @job.status == 'enabled' %>
|
15
|
-
<form action="<%= cron_job_path %>/disable?redirect=<%= cron_job_path %>"
|
15
|
+
<form action="<%= cron_job_path %>/disable?redirect=<%= cron_job_path %>" method="post">
|
16
16
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
17
|
-
<input class="btn btn-
|
17
|
+
<input class="btn btn-warn pull-left" name="disable" type="submit" value="<%= t('Disable') %>" />
|
18
18
|
</form>
|
19
19
|
<% else %>
|
20
|
-
<form action="<%= cron_job_path %>/enable?redirect=<%= cron_job_path %>"
|
20
|
+
<form action="<%= cron_job_path %>/enable?redirect=<%= cron_job_path %>" method="post">
|
21
21
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
22
|
-
<input class="btn btn-
|
22
|
+
<input class="btn btn-warn pull-left" name="enable" type="submit" value="<%= t('Enable') %>" />
|
23
23
|
</form>
|
24
|
-
<form action="<%= cron_job_path %>/delete"
|
24
|
+
<form action="<%= cron_job_path %>/delete" method="post">
|
25
25
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
26
|
-
<input class="btn btn-danger
|
26
|
+
<input class="btn btn-danger" data-confirm="<%= t('AreYouSureDeleteCronJob', :job => @job.name) %>" name="delete" type="submit" value="<%= t('Delete') %>" />
|
27
27
|
</form>
|
28
28
|
<% end %>
|
29
29
|
</div>
|
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,12 +12,7 @@ module Sidekiq
|
|
12
12
|
|
13
13
|
@cron_jobs = Sidekiq::Cron::Job.all
|
14
14
|
|
15
|
-
|
16
|
-
if defined?(Slim) && File.exists?(File.join(settings.views,"layout.slim"))
|
17
|
-
render(:slim, File.read(File.join(view_path, "cron.slim")))
|
18
|
-
else
|
19
|
-
render(:erb, File.read(File.join(view_path, "cron.erb")))
|
20
|
-
end
|
15
|
+
render(:erb, File.read(File.join(view_path, "cron.erb")))
|
21
16
|
end
|
22
17
|
|
23
18
|
# display job detail + jid history
|
@@ -26,12 +21,7 @@ module Sidekiq
|
|
26
21
|
|
27
22
|
@job = Sidekiq::Cron::Job.find(route_params[:name])
|
28
23
|
if @job
|
29
|
-
|
30
|
-
if defined?(Slim) && File.exists?(File.join(settings.views,"layout.slim"))
|
31
|
-
render(:slim, File.read(File.join(view_path, "cron_show.slim")))
|
32
|
-
else
|
33
|
-
render(:erb, File.read(File.join(view_path, "cron_show.erb")))
|
34
|
-
end
|
24
|
+
render(:erb, File.read(File.join(view_path, "cron_show.erb")))
|
35
25
|
else
|
36
26
|
redirect "#{root_path}cron"
|
37
27
|
end
|
data/sidekiq-cron.gemspec
CHANGED
@@ -1,129 +1,41 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: sidekiq-cron 1.2.0 ruby lib
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require './lib/sidekiq/cron/version'
|
6
4
|
|
7
5
|
Gem::Specification.new do |s|
|
8
|
-
s.name = "sidekiq-cron"
|
9
|
-
s.version =
|
6
|
+
s.name = "sidekiq-cron"
|
7
|
+
s.version = Sidekiq::Cron::VERSION
|
10
8
|
|
11
|
-
s.
|
12
|
-
s.require_paths = ["lib"
|
13
|
-
s.authors = ["Ondrej Bartas"
|
14
|
-
s.
|
15
|
-
s.
|
16
|
-
s.email = "ondrej@bartas.cz".freeze
|
9
|
+
s.required_ruby_version = ">= 2.6"
|
10
|
+
s.require_paths = ["lib"]
|
11
|
+
s.authors = ["Ondrej Bartas"]
|
12
|
+
s.description = "Enables to set jobs to be run in specified time (using CRON notation)"
|
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/ja.yml",
|
41
|
-
"lib/sidekiq/cron/locales/ru.yml",
|
42
|
-
"lib/sidekiq/cron/locales/zh-CN.yml",
|
43
|
-
"lib/sidekiq/cron/poller.rb",
|
44
|
-
"lib/sidekiq/cron/support.rb",
|
45
|
-
"lib/sidekiq/cron/views/cron.erb",
|
46
|
-
"lib/sidekiq/cron/views/cron.slim",
|
47
|
-
"lib/sidekiq/cron/views/cron_show.erb",
|
48
|
-
"lib/sidekiq/cron/views/cron_show.slim",
|
49
|
-
"lib/sidekiq/cron/web.rb",
|
50
|
-
"lib/sidekiq/cron/web_extension.rb",
|
23
|
+
"README.md",
|
51
24
|
"sidekiq-cron.gemspec",
|
52
|
-
"test/integration/performance_test.rb",
|
53
|
-
"test/test_helper.rb",
|
54
|
-
"test/unit/job_test.rb",
|
55
|
-
"test/unit/poller_test.rb",
|
56
|
-
"test/unit/web_extension_test.rb"
|
57
25
|
]
|
58
|
-
s.homepage = "http://github.com/ondrejbartas/sidekiq-cron".freeze
|
59
|
-
s.licenses = ["MIT".freeze]
|
60
|
-
s.rubygems_version = "2.5.2.3".freeze
|
61
|
-
s.summary = "Sidekiq Cron helps to add repeated scheduled jobs".freeze
|
62
26
|
|
63
|
-
|
64
|
-
|
27
|
+
s.homepage = "https://github.com/ondrejbartas/sidekiq-cron"
|
28
|
+
s.licenses = ["MIT"]
|
29
|
+
s.summary = "Sidekiq-Cron helps to add repeated scheduled jobs"
|
65
30
|
|
66
|
-
|
67
|
-
|
68
|
-
s.add_runtime_dependency(%q<fugit>.freeze, ["~> 1.1"])
|
69
|
-
s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
|
70
|
-
s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
|
71
|
-
s.add_development_dependency(%q<redis-namespace>.freeze, [">= 1.5.2"])
|
72
|
-
s.add_development_dependency(%q<shoulda-context>.freeze, [">= 0"])
|
73
|
-
s.add_development_dependency(%q<rack>.freeze, [">= 0"])
|
74
|
-
s.add_development_dependency(%q<rack-test>.freeze, [">= 0"])
|
75
|
-
s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
|
76
|
-
s.add_development_dependency(%q<minitest>.freeze, [">= 0"])
|
77
|
-
s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
|
78
|
-
s.add_development_dependency(%q<sdoc>.freeze, [">= 0"])
|
79
|
-
s.add_development_dependency(%q<slim>.freeze, [">= 0"])
|
80
|
-
s.add_development_dependency(%q<sinatra>.freeze, [">= 0"])
|
81
|
-
s.add_development_dependency(%q<mocha>.freeze, [">= 0"])
|
82
|
-
s.add_development_dependency(%q<coveralls>.freeze, [">= 0"])
|
83
|
-
s.add_development_dependency(%q<shotgun>.freeze, [">= 0"])
|
84
|
-
s.add_development_dependency(%q<guard>.freeze, [">= 0"])
|
85
|
-
s.add_development_dependency(%q<guard-minitest>.freeze, [">= 0"])
|
86
|
-
else
|
87
|
-
s.add_dependency(%q<sidekiq>.freeze, [">= 4.2.1"])
|
88
|
-
s.add_dependency(%q<fugit>.freeze, ["~> 1.1"])
|
89
|
-
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
90
|
-
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
91
|
-
s.add_dependency(%q<redis-namespace>.freeze, [">= 1.5.2"])
|
92
|
-
s.add_dependency(%q<shoulda-context>.freeze, [">= 0"])
|
93
|
-
s.add_dependency(%q<rack>.freeze, [">= 0"])
|
94
|
-
s.add_dependency(%q<rack-test>.freeze, [">= 0"])
|
95
|
-
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
96
|
-
s.add_dependency(%q<minitest>.freeze, [">= 0"])
|
97
|
-
s.add_dependency(%q<test-unit>.freeze, [">= 0"])
|
98
|
-
s.add_dependency(%q<sdoc>.freeze, [">= 0"])
|
99
|
-
s.add_dependency(%q<slim>.freeze, [">= 0"])
|
100
|
-
s.add_dependency(%q<sinatra>.freeze, [">= 0"])
|
101
|
-
s.add_dependency(%q<mocha>.freeze, [">= 0"])
|
102
|
-
s.add_dependency(%q<coveralls>.freeze, [">= 0"])
|
103
|
-
s.add_dependency(%q<shotgun>.freeze, [">= 0"])
|
104
|
-
s.add_dependency(%q<guard>.freeze, [">= 0"])
|
105
|
-
s.add_dependency(%q<guard-minitest>.freeze, [">= 0"])
|
106
|
-
end
|
107
|
-
else
|
108
|
-
s.add_dependency(%q<sidekiq>.freeze, [">= 4.2.1"])
|
109
|
-
s.add_dependency(%q<fugit>.freeze, ["~> 1.1"])
|
110
|
-
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
111
|
-
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
112
|
-
s.add_dependency(%q<redis-namespace>.freeze, [">= 1.5.2"])
|
113
|
-
s.add_dependency(%q<shoulda-context>.freeze, [">= 0"])
|
114
|
-
s.add_dependency(%q<rack>.freeze, [">= 0"])
|
115
|
-
s.add_dependency(%q<rack-test>.freeze, [">= 0"])
|
116
|
-
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
117
|
-
s.add_dependency(%q<minitest>.freeze, [">= 0"])
|
118
|
-
s.add_dependency(%q<test-unit>.freeze, [">= 0"])
|
119
|
-
s.add_dependency(%q<sdoc>.freeze, [">= 0"])
|
120
|
-
s.add_dependency(%q<slim>.freeze, [">= 0"])
|
121
|
-
s.add_dependency(%q<sinatra>.freeze, [">= 0"])
|
122
|
-
s.add_dependency(%q<mocha>.freeze, [">= 0"])
|
123
|
-
s.add_dependency(%q<coveralls>.freeze, [">= 0"])
|
124
|
-
s.add_dependency(%q<shotgun>.freeze, [">= 0"])
|
125
|
-
s.add_dependency(%q<guard>.freeze, [">= 0"])
|
126
|
-
s.add_dependency(%q<guard-minitest>.freeze, [">= 0"])
|
127
|
-
end
|
128
|
-
end
|
31
|
+
s.add_dependency("fugit", "~> 1")
|
32
|
+
s.add_dependency("sidekiq", ">= 4.2.1")
|
129
33
|
|
34
|
+
s.add_development_dependency("minitest", "~> 5.15")
|
35
|
+
s.add_development_dependency("mocha", "~> 1.14")
|
36
|
+
s.add_development_dependency("redis-namespace", "~> 1.8")
|
37
|
+
s.add_development_dependency("rack", "~> 2.2")
|
38
|
+
s.add_development_dependency("rack-test", "~> 1.1")
|
39
|
+
s.add_development_dependency("rake", "~> 13.0")
|
40
|
+
s.add_development_dependency("simplecov", "~> 0.21")
|
41
|
+
end
|
@@ -1,12 +1,11 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
require './test/test_helper'
|
3
2
|
require 'benchmark'
|
4
3
|
|
5
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
|
-
Redis.current.flushdb
|
10
9
|
|
11
10
|
#clear all previous saved data from redis
|
12
11
|
Sidekiq.redis do |conn|
|
@@ -31,7 +30,7 @@ describe 'Performance Poller' do
|
|
31
30
|
Time.stubs(:now).returns(enqueued_time)
|
32
31
|
end
|
33
32
|
|
34
|
-
it 'should enqueue 10000 jobs in less than
|
33
|
+
it 'should enqueue 10000 jobs in less than 50s' do
|
35
34
|
Sidekiq.redis do |conn|
|
36
35
|
assert_equal 0, conn.llen("queue:default"), 'Queue should be empty'
|
37
36
|
end
|
@@ -45,6 +44,6 @@ describe 'Performance Poller' do
|
|
45
44
|
end
|
46
45
|
|
47
46
|
puts "Performance test finished in #{bench.real}"
|
48
|
-
assert_operator bench.real, :<,
|
47
|
+
assert_operator bench.real, :<, 50
|
49
48
|
end
|
50
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
12
|
require 'mocha/minitest'
|
24
|
-
|
25
|
-
ENV['RACK_ENV'] = 'test'
|
26
|
-
|
27
|
-
#SIDEKIQ Require - need to have sidekiq running!
|
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
|
data/test/unit/job_test.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
require './test/test_helper'
|
3
2
|
|
4
3
|
describe "Cron Job" do
|
@@ -363,6 +362,108 @@ describe "Cron Job" do
|
|
363
362
|
end
|
364
363
|
end
|
365
364
|
|
365
|
+
describe '#active_job_message - unknown Active Job Worker class' do
|
366
|
+
before do
|
367
|
+
SecureRandom.stubs(:uuid).returns('XYZ')
|
368
|
+
ActiveJob::Base.queue_name_prefix = ''
|
369
|
+
|
370
|
+
@args = {
|
371
|
+
name: 'Test',
|
372
|
+
cron: '* * * * *',
|
373
|
+
klass: 'UnknownActiveJobCronTestClass',
|
374
|
+
active_job: true,
|
375
|
+
queue: 'super_queue',
|
376
|
+
description: nil,
|
377
|
+
args: { foo: 'bar' }
|
378
|
+
}
|
379
|
+
@job = Sidekiq::Cron::Job.new(@args)
|
380
|
+
end
|
381
|
+
|
382
|
+
it 'should return valid payload for Sidekiq::Client' do
|
383
|
+
payload = {
|
384
|
+
'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
|
385
|
+
'wrapped' => 'UnknownActiveJobCronTestClass',
|
386
|
+
'queue' => 'super_queue',
|
387
|
+
'description' => nil,
|
388
|
+
'args' => [{
|
389
|
+
'job_class' => 'UnknownActiveJobCronTestClass',
|
390
|
+
'job_id' => 'XYZ',
|
391
|
+
'queue_name' => 'super_queue',
|
392
|
+
'arguments' => [{foo: 'bar'}]
|
393
|
+
}]
|
394
|
+
}
|
395
|
+
assert_equal @job.active_job_message, payload
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
describe '#active_job_message with symbolize_args (hash)' do
|
400
|
+
before do
|
401
|
+
SecureRandom.stubs(:uuid).returns('XYZ')
|
402
|
+
ActiveJob::Base.queue_name_prefix = ''
|
403
|
+
|
404
|
+
@args = {
|
405
|
+
name: 'Test',
|
406
|
+
cron: '* * * * *',
|
407
|
+
klass: 'ActiveJobCronTestClass',
|
408
|
+
queue: 'super_queue',
|
409
|
+
description: nil,
|
410
|
+
symbolize_args: true,
|
411
|
+
args: { 'foo' => 'bar' }
|
412
|
+
}
|
413
|
+
@job = Sidekiq::Cron::Job.new(@args)
|
414
|
+
end
|
415
|
+
|
416
|
+
it 'should return valid payload for Sidekiq::Client' do
|
417
|
+
payload = {
|
418
|
+
'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
|
419
|
+
'wrapped' => 'ActiveJobCronTestClass',
|
420
|
+
'queue' => 'super_queue',
|
421
|
+
'description' => nil,
|
422
|
+
'args' => [{
|
423
|
+
'job_class' => 'ActiveJobCronTestClass',
|
424
|
+
'job_id' => 'XYZ',
|
425
|
+
'queue_name' => 'super_queue',
|
426
|
+
'arguments' => [{foo: 'bar'}]
|
427
|
+
}]
|
428
|
+
}
|
429
|
+
assert_equal @job.active_job_message, payload
|
430
|
+
end
|
431
|
+
end
|
432
|
+
|
433
|
+
describe '#active_job_message with symbolize_args (array)' do
|
434
|
+
before do
|
435
|
+
SecureRandom.stubs(:uuid).returns('XYZ')
|
436
|
+
ActiveJob::Base.queue_name_prefix = ''
|
437
|
+
|
438
|
+
@args = {
|
439
|
+
name: 'Test',
|
440
|
+
cron: '* * * * *',
|
441
|
+
klass: 'ActiveJobCronTestClass',
|
442
|
+
queue: 'super_queue',
|
443
|
+
description: nil,
|
444
|
+
symbolize_args: true,
|
445
|
+
args: [{ 'foo' => 'bar' }]
|
446
|
+
}
|
447
|
+
@job = Sidekiq::Cron::Job.new(@args)
|
448
|
+
end
|
449
|
+
|
450
|
+
it 'should return valid payload for Sidekiq::Client' do
|
451
|
+
payload = {
|
452
|
+
'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
|
453
|
+
'wrapped' => 'ActiveJobCronTestClass',
|
454
|
+
'queue' => 'super_queue',
|
455
|
+
'description' => nil,
|
456
|
+
'args' => [{
|
457
|
+
'job_class' => 'ActiveJobCronTestClass',
|
458
|
+
'job_id' => 'XYZ',
|
459
|
+
'queue_name' => 'super_queue',
|
460
|
+
'arguments' => [{foo: 'bar'}]
|
461
|
+
}]
|
462
|
+
}
|
463
|
+
assert_equal @job.active_job_message, payload
|
464
|
+
end
|
465
|
+
end
|
466
|
+
|
366
467
|
describe '#active_job_message with queue_name_prefix' do
|
367
468
|
before do
|
368
469
|
SecureRandom.stubs(:uuid).returns('XYZ')
|
@@ -827,11 +928,11 @@ describe "Cron Job" do
|
|
827
928
|
cron: "* * * * *",
|
828
929
|
klass: "CronTestClass"
|
829
930
|
}
|
830
|
-
#first time is
|
931
|
+
#first time is always
|
831
932
|
#after next cron time!
|
832
933
|
@time = Time.now.utc + 120
|
833
934
|
end
|
834
|
-
it "be
|
935
|
+
it "be always false when status is disabled" do
|
835
936
|
refute Sidekiq::Cron::Job.new(@args.merge(status: 'disabled')).should_enque? @time
|
836
937
|
refute Sidekiq::Cron::Job.new(@args.merge(status: 'disabled')).should_enque? @time - 60
|
837
938
|
refute Sidekiq::Cron::Job.new(@args.merge(status: 'disabled')).should_enque? @time - 120
|
@@ -1018,7 +1119,6 @@ describe "Cron Job" do
|
|
1018
1119
|
|
1019
1120
|
assert_equal Sidekiq::Cron::Job.all.first.sidekiq_worker_message, payload
|
1020
1121
|
end
|
1021
|
-
|
1022
1122
|
end
|
1023
1123
|
end
|
1024
1124
|
end
|
data/test/unit/poller_test.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
require './test/test_helper'
|
3
2
|
|
4
|
-
|
5
3
|
describe 'Cron Poller' do
|
6
4
|
before do
|
5
|
+
REDIS.with { |c| c.respond_to?(:redis) ? c.redis.flushdb : c.flushdb }
|
7
6
|
Sidekiq.redis = REDIS
|
8
|
-
Redis.current.flushdb
|
9
7
|
|
10
8
|
#clear all previous saved data from redis
|
11
9
|
Sidekiq.redis do |conn|
|