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.
- checksums.yaml +5 -5
 - data/CHANGELOG.md +122 -0
 - data/Gemfile +1 -30
 - data/README.md +151 -121
 - data/Rakefile +3 -42
 - data/lib/sidekiq/cron/job.rb +139 -104
 - data/lib/sidekiq/cron/launcher.rb +7 -9
 - data/lib/sidekiq/cron/locales/en.yml +2 -0
 - data/lib/sidekiq/cron/locales/pt.yml +22 -0
 - data/lib/sidekiq/cron/poller.rb +18 -9
 - data/lib/sidekiq/cron/schedule_loader.rb +22 -0
 - data/lib/sidekiq/cron/support.rb +0 -1
 - 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 +8 -21
 - data/lib/sidekiq/cron.rb +1 -0
 - data/lib/sidekiq/options.rb +18 -0
 - data/sidekiq-cron.gemspec +25 -115
 - data/test/integration/performance_test.rb +4 -5
 - data/test/test_helper.rb +11 -23
 - data/test/unit/fixtures/schedule_array.yml +13 -0
 - data/test/unit/fixtures/schedule_hash.yml +12 -0
 - data/test/unit/fixtures/schedule_string.yml +1 -0
 - data/test/unit/job_test.rb +227 -23
 - data/test/unit/poller_test.rb +7 -9
 - data/test/unit/schedule_loader_test.rb +45 -0
 - data/test/unit/web_extension_test.rb +40 -40
 - metadata +56 -197
 - data/.document +0 -5
 - data/.travis.yml +0 -18
 - data/Changes.md +0 -82
 - 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
 
    
        data/lib/sidekiq/cron/poller.rb
    CHANGED
    
    | 
         @@ -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 
     | 
    
         
            -
                    #  
     | 
| 
      
 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
         
     | 
    
        data/lib/sidekiq/cron/support.rb
    CHANGED
    
    
| 
         @@ -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
         
     | 
| 
         @@ -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 
     | 
    
         
            -
                    # 
     | 
| 
      
 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 
     | 
    
         
            -
                       
     | 
| 
       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 
     | 
    
         
            -
                    #  
     | 
| 
      
 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 
     | 
    
         
            -
                         
     | 
| 
       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 
     | 
    
         
            -
                    # 
     | 
| 
      
 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 
     | 
    
         
            -
                    # 
     | 
| 
      
 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 
     | 
    
         
            -
                    # 
     | 
| 
      
 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 
     | 
    
         
            -
                    # 
     | 
| 
      
 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
    
    
| 
         @@ -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 
     | 
    
         
            -
            #  
     | 
| 
       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 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              s.name = "sidekiq-cron".freeze
         
     | 
| 
       9 
     | 
    
         
            -
              s.version = "1.2.0"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require './lib/sidekiq/cron/version'
         
     | 
| 
       10 
4 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              s. 
     | 
| 
       13 
     | 
    
         
            -
              s. 
     | 
| 
       14 
     | 
    
         
            -
              s. 
     | 
| 
       15 
     | 
    
         
            -
              s.description = "Enables to set jobs to be run in specified time (using CRON notation)" 
     | 
| 
       16 
     | 
    
         
            -
              s. 
     | 
| 
      
 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 
     | 
    
         
            -
                ". 
     | 
| 
       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 
     | 
    
         
            -
                " 
     | 
| 
       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 
     | 
    
         
            -
                s.specification_version = 4
         
     | 
| 
      
 27 
     | 
    
         
            +
              s.required_ruby_version = ">= 2.6"
         
     | 
| 
       65 
28 
     | 
    
         | 
| 
       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
         
     | 
| 
      
 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 
     | 
    
         
            -
                # 
     | 
| 
      
 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  
     | 
| 
      
 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,22 @@ 
     | 
|
| 
       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'
         
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
      
 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 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- string
         
     |