sidekiq-cron 1.2.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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