sidekiq-cron 1.2.0 → 1.7.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.
@@ -1,14 +1,27 @@
1
1
  require 'sidekiq'
2
- require 'sidekiq/util'
3
2
  require 'sidekiq/cron'
4
3
  require 'sidekiq/scheduled'
4
+ require 'sidekiq/options'
5
5
 
6
6
  module Sidekiq
7
7
  module Cron
8
- POLL_INTERVAL = 30
8
+ POLL_INTERVAL = Sidekiq::Options[:average_scheduled_poll_interval] || 30
9
9
 
10
- # The Poller checks Redis every N seconds for sheduled cron jobs
10
+ # The Poller checks Redis every N seconds for sheduled cron jobs.
11
11
  class Poller < Sidekiq::Scheduled::Poller
12
+ def initialize
13
+ Sidekiq.configure_server do
14
+ Sidekiq::Options[:poll_interval_average] = POLL_INTERVAL
15
+ end
16
+
17
+ if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('6.5.0')
18
+ # Sidekiq Poller init requires a config argument.
19
+ super(Sidekiq)
20
+ else
21
+ super
22
+ end
23
+ end
24
+
12
25
  def enqueue
13
26
  time = Time.now.utc
14
27
  Sidekiq::Cron::Job.all.each do |job|
@@ -16,7 +29,7 @@ module Sidekiq
16
29
  end
17
30
  rescue => ex
18
31
  # Most likely a problem with redis networking.
19
- # Punt and try again at the next interval
32
+ # Punt and try again at the next interval.
20
33
  Sidekiq.logger.error ex.message
21
34
  Sidekiq.logger.error ex.backtrace.first
22
35
  handle_exception(ex) if respond_to?(:handle_exception)
@@ -27,15 +40,11 @@ module Sidekiq
27
40
  def enqueue_job(job, time = Time.now.utc)
28
41
  job.test_and_enque_for_time! time if job && job.valid?
29
42
  rescue => ex
30
- # problem somewhere in one job
43
+ # Problem somewhere in one job.
31
44
  Sidekiq.logger.error "CRON JOB: #{ex.message}"
32
45
  Sidekiq.logger.error "CRON JOB: #{ex.backtrace.first}"
33
46
  handle_exception(ex) if respond_to?(:handle_exception)
34
47
  end
35
-
36
- def poll_interval_average
37
- Sidekiq.options[:poll_interval] || POLL_INTERVAL
38
- end
39
48
  end
40
49
  end
41
50
  end
@@ -0,0 +1,22 @@
1
+ require 'sidekiq'
2
+ require 'sidekiq/cron/job'
3
+ require 'sidekiq/options'
4
+
5
+ if Sidekiq.server?
6
+ Sidekiq.configure_server do |config|
7
+ schedule_file = Sidekiq::Options[:cron_schedule_file] || 'config/schedule.yml'
8
+
9
+ if File.exist?(schedule_file)
10
+ config.on(:startup) do
11
+ schedule = YAML.load_file(schedule_file)
12
+ if schedule.kind_of?(Hash)
13
+ Sidekiq::Cron::Job.load_from_hash schedule
14
+ elsif schedule.kind_of?(Array)
15
+ Sidekiq::Cron::Job.load_from_array schedule
16
+ else
17
+ raise "Not supported schedule format. Confirm your #{schedule_file}"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -28,7 +28,6 @@ module Sidekiq
28
28
  const
29
29
  end
30
30
 
31
- # owner is in Object, so raise
32
31
  constant.const_get(name, false)
33
32
  end
34
33
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sidekiq
4
+ module Cron
5
+ VERSION = "1.7.0"
6
+ end
7
+ end
@@ -1,24 +1,24 @@
1
1
  <header class='row'>
2
2
  <div class='col-sm-5 pull-left'>
3
- <h3><%=t 'CronJobs' %></h3>
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-small btn-danger" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSureDeleteCronJobs') %>">
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-small" type="submit" name="enque" value="<%= t('DisableAll') %>" />
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-small" type="submit" name="enque" value="<%= t('EnableAll') %>" />
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-small" type="submit" name="enque" value="<%= t('EnqueueAll') %>" />
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
- <button data-toggle="collapse" data-target=".worker_<%= index %>" class="btn btn-xs"><%= t('ShowAll')%></button>
51
- <div class="toggle worker_<%= index %>" style="display: inline;"><%= job.message[0..100] + "... " %></div>
52
- <div class="toggle worker_<%= index %>" style="display: none;"><%= job.message %></div>
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 %>" class="pull-right" method="post">
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-small pull-left" name="enque" type="submit" value="<%= t('EnqueueNow') %>" />
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 %>" class="pull-right" method="post">
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-small pull-left" name="disable" type="submit" value="<%= t('Disable') %>" />
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 %>" class="pull-right" method="post">
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-small pull-left" name="enable" type="submit" value="<%= t('Enable') %>" />
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" class="pull-right" method="post">
24
+ <form action="<%= cron_job_path %>/delete" method="post">
25
25
  <%= csrf_tag if respond_to?(:csrf_tag) %>
26
- <input class="btn btn-danger btn-small" data-confirm="<%= t('AreYouSureDeleteCronJob', :job => @job.name) %>" name="delete" type="submit" value="<%= t('Delete') %>" />
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>
@@ -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
@@ -1,43 +1,31 @@
1
1
  module Sidekiq
2
2
  module Cron
3
3
  module WebExtension
4
-
5
4
  def self.registered(app)
6
-
7
5
  app.settings.locales << File.join(File.expand_path("..", __FILE__), "locales")
8
6
 
9
- #index page of cron jobs
7
+ # Index page of cron jobs.
10
8
  app.get '/cron' do
11
9
  view_path = File.join(File.expand_path("..", __FILE__), "views")
12
10
 
13
11
  @cron_jobs = Sidekiq::Cron::Job.all
14
12
 
15
- #if Slim renderer exists and sidekiq has layout.slim in views
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
13
+ render(:erb, File.read(File.join(view_path, "cron.erb")))
21
14
  end
22
15
 
23
- # display job detail + jid history
16
+ # Display job detail + jid history.
24
17
  app.get '/cron/:name' do
25
18
  view_path = File.join(File.expand_path("..", __FILE__), "views")
26
19
 
27
20
  @job = Sidekiq::Cron::Job.find(route_params[:name])
28
21
  if @job
29
- #if Slim renderer exists and sidekiq has layout.slim in views
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
22
+ render(:erb, File.read(File.join(view_path, "cron_show.erb")))
35
23
  else
36
24
  redirect "#{root_path}cron"
37
25
  end
38
26
  end
39
27
 
40
- #enque cron job
28
+ # Enqueue cron job.
41
29
  app.post '/cron/:name/enque' do
42
30
  if route_params[:name] === '__all__'
43
31
  Sidekiq::Cron::Job.all.each(&:enque!)
@@ -47,7 +35,7 @@ module Sidekiq
47
35
  redirect params['redirect'] || "#{root_path}cron"
48
36
  end
49
37
 
50
- #delete schedule
38
+ # Delete schedule.
51
39
  app.post '/cron/:name/delete' do
52
40
  if route_params[:name] === '__all__'
53
41
  Sidekiq::Cron::Job.all.each(&:destroy)
@@ -57,7 +45,7 @@ module Sidekiq
57
45
  redirect "#{root_path}cron"
58
46
  end
59
47
 
60
- #enable job
48
+ # Enable job.
61
49
  app.post '/cron/:name/enable' do
62
50
  if route_params[:name] === '__all__'
63
51
  Sidekiq::Cron::Job.all.each(&:enable!)
@@ -67,7 +55,7 @@ module Sidekiq
67
55
  redirect params['redirect'] || "#{root_path}cron"
68
56
  end
69
57
 
70
- #disable job
58
+ # Disable job.
71
59
  app.post '/cron/:name/disable' do
72
60
  if route_params[:name] === '__all__'
73
61
  Sidekiq::Cron::Job.all.each(&:disable!)
@@ -76,7 +64,6 @@ module Sidekiq
76
64
  end
77
65
  redirect params['redirect'] || "#{root_path}cron"
78
66
  end
79
-
80
67
  end
81
68
  end
82
69
  end
data/lib/sidekiq/cron.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "sidekiq/cron/job"
2
2
  require "sidekiq/cron/poller"
3
3
  require "sidekiq/cron/launcher"
4
+ require "sidekiq/cron/schedule_loader"
4
5
 
5
6
  module Sidekiq
6
7
  module Cron
@@ -0,0 +1,18 @@
1
+ require 'sidekiq'
2
+
3
+ module Sidekiq
4
+ module Options
5
+ def self.[](key)
6
+ new_version? ? Sidekiq[key] : Sidekiq.options[key]
7
+ end
8
+
9
+ def self.[]=(key, value)
10
+ new_version? ? Sidekiq[key] = value : Sidekiq.options[key] = value
11
+ end
12
+
13
+ # sidekiq --version >= 6.5.0
14
+ def self.new_version?
15
+ @new_version ||= Sidekiq.respond_to?(:[])
16
+ end
17
+ end
18
+ end
data/sidekiq-cron.gemspec CHANGED
@@ -1,129 +1,39 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
- # stub: sidekiq-cron 1.2.0 ruby lib
1
+ # frozen_string_literal: true
6
2
 
7
- Gem::Specification.new do |s|
8
- s.name = "sidekiq-cron".freeze
9
- s.version = "1.2.0"
3
+ require './lib/sidekiq/cron/version'
10
4
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib".freeze]
13
- s.authors = ["Ondrej Bartas".freeze]
14
- s.date = "2020-04-03"
15
- s.description = "Enables to set jobs to be run in specified time (using CRON notation)".freeze
16
- s.email = "ondrej@bartas.cz".freeze
5
+ Gem::Specification.new do |s|
6
+ s.name = "sidekiq-cron"
7
+ s.version = Sidekiq::Cron::VERSION
8
+ s.summary = "Scheduler/Cron for Sidekiq jobs"
9
+ s.description = "Enables to set jobs to be run in specified time (using CRON notation or natural language)"
10
+ s.homepage = "https://github.com/ondrejbartas/sidekiq-cron"
11
+ s.authors = ["Ondrej Bartas"]
12
+ s.email = "ondrej@bartas.cz"
13
+ s.licenses = ["MIT"]
17
14
  s.extra_rdoc_files = [
18
15
  "LICENSE.txt",
19
16
  "README.md"
20
17
  ]
21
- s.files = [
22
- ".document",
23
- ".travis.yml",
24
- "Changes.md",
25
- "Dockerfile",
18
+ s.files = Dir.glob('lib/**/*') + Dir.glob('test/**/*') + [
19
+ "CHANGELOG.md",
26
20
  "Gemfile",
27
21
  "LICENSE.txt",
28
- "README.md",
29
22
  "Rakefile",
30
- "VERSION",
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
- if s.respond_to? :specification_version then
64
- s.specification_version = 4
27
+ s.required_ruby_version = ">= 2.6"
65
28
 
66
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
67
- s.add_runtime_dependency(%q<sidekiq>.freeze, [">= 4.2.1"])
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
29
+ s.add_dependency("fugit", "~> 1")
30
+ s.add_dependency("sidekiq", ">= 4.2.1")
129
31
 
32
+ s.add_development_dependency("minitest", "~> 5.15")
33
+ s.add_development_dependency("mocha", "~> 1.14")
34
+ s.add_development_dependency("redis-namespace", "~> 1.8")
35
+ s.add_development_dependency("rack", "~> 2.2")
36
+ s.add_development_dependency("rack-test", "~> 1.1")
37
+ s.add_development_dependency("rake", "~> 13.0")
38
+ s.add_development_dependency("simplecov", "~> 0.21")
39
+ end
@@ -1,14 +1,13 @@
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
- #clear all previous saved data from redis
10
+ # Clear all previous saved data from Redis.
12
11
  Sidekiq.redis do |conn|
13
12
  conn.keys("cron_job*").each do |key|
14
13
  conn.del(key)
@@ -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 40s' do
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, :<, 40
47
+ assert_operator bench.real, :<, 50
49
48
  end
50
49
  end
data/test/test_helper.rb CHANGED
@@ -1,37 +1,22 @@
1
- require 'rubygems'
2
- require 'bundler'
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 'sidekiq/util'
14
+ require "sidekiq-pro" if ENV['SIDEKIQ_PRO_VERSION']
30
15
  require 'sidekiq/web'
16
+ require "sidekiq/cli"
31
17
 
32
18
  Sidekiq.logger.level = Logger::ERROR
33
19
 
34
- require 'sidekiq/redis_connection'
35
20
  redis_url = ENV['REDIS_URL'] || 'redis://0.0.0.0:6379'
36
21
  REDIS = Sidekiq::RedisConnection.create(:url => redis_url, :namespace => 'testy')
37
22
 
@@ -39,12 +24,15 @@ Sidekiq.configure_client do |config|
39
24
  config.redis = { :url => redis_url, :namespace => 'testy' }
40
25
  end
41
26
 
42
-
43
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
44
- $LOAD_PATH.unshift(File.dirname(__FILE__))
45
27
  require 'sidekiq-cron'
46
28
  require 'sidekiq/cron/web'
47
- require 'pp'
29
+
30
+ # For testing os symbilize args!
31
+ class Hash
32
+ def symbolize_keys
33
+ transform_keys { |key| key.to_sym rescue key }
34
+ end
35
+ end
48
36
 
49
37
  class CronTestClass
50
38
  include Sidekiq::Worker
@@ -0,0 +1,13 @@
1
+ ---
2
+ -
3
+ name: "my_first_job"
4
+ cron: "*/5 * * * *"
5
+ class: "HardWorker"
6
+ queue: "hard_worker"
7
+ -
8
+ name: "second_job"
9
+ cron: "*/30 * * * *"
10
+ class: "HardWorker"
11
+ queue: "hard_worker_long"
12
+ args:
13
+ hard: "stuff"
@@ -0,0 +1,12 @@
1
+ ---
2
+ my_first_job:
3
+ cron: "*/5 * * * *"
4
+ class: "HardWorker"
5
+ queue: hard_worker
6
+
7
+ second_job:
8
+ cron: "*/30 * * * *"
9
+ class: "HardWorker"
10
+ queue: hard_worker_long
11
+ args:
12
+ hard: "stuff"
@@ -0,0 +1 @@
1
+ --- string