sidekiq-cron 2.0.0.rc1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,18 +1,22 @@
1
1
  ja:
2
- Job: ジョブ
2
+ AreYouSureDeleteCronJob: 本当に%{job}のcronジョブを削除しますか?
3
+ AreYouSureDeleteCronJobs: 本当にすべてのcronジョブを削除しますか?
4
+ AreYouSureEnqueueCronJob: %{job} の クロン ジョブをキューに入れてもよろしいですか?
5
+ AreYouSureEnqueueCronJobs: すべての クロン ジョブをキューに入れてもよろしいですか?
3
6
  Cron: Cron
4
7
  CronJobs: Cronジョブ
5
- EnqueueNow: すぐにキューに入れる
6
- EnableAll: すべて有効にする
8
+ CronString: Cron
9
+ DeleteAll: すべて削除
10
+ Description: 説明
11
+ Disable: 無効にする
7
12
  DisableAll: すべて無効にする
13
+ Enable: 有効にする
14
+ EnableAll: すべて有効にする
8
15
  EnqueueAll: すべてキューに入れる
9
- DeleteAll: すべて削除
10
- 'Cron string': Cron
11
- AreYouSureDeleteCronJobs: 本当にすべてのcronジョブを削除しますか?
12
- AreYouSureDeleteCronJob: 本当に%{job}のcronジョブを削除しますか?
16
+ EnqueueNow: すぐにキューに入れる
17
+ Job: ジョブ
18
+ LastEnqueued: 最後のキュー
13
19
  NoCronJobsWereFound: Cronジョブが見つかりませんでした
14
- Enable: 有効にする
15
- Disable: 無効にする
16
- 'Last enqueued': 最後のキュー
20
+ NoHistoryWereFound: 履歴が見つかりませんでした
17
21
  disabled: 無効
18
22
  enabled: 有効
@@ -1,22 +1,22 @@
1
1
  pt:
2
- Job: Tarefa
2
+ AreYouSureDeleteCronJob: Tem certeza de que deseja excluir a tarefa %{job}?
3
+ AreYouSureDeleteCronJobs: Tem certeza de que deseja excluir TODOS as tarefas?
4
+ AreYouSureEnqueueCronJob: Tem certeza de que deseja enfileirar a tarefa %{job}?
5
+ AreYouSureEnqueueCronJobs: Tem certeza de que deseja enfileirar TODOS as tarefas?
3
6
  Cron: Cron
4
7
  CronJobs: Tarefas do Cron
5
- EnqueueNow: Enfileirar agora
6
- EnableAll: Habilitar todos
8
+ CronString: Cron
9
+ DeleteAll: Excluir todos
10
+ Description: Descrição
11
+ Disable: Desabilitar
7
12
  DisableAll: Desabilitar todos
13
+ Enable: Habilitar
14
+ EnableAll: Habilitar todos
8
15
  EnqueueAll: Enfileirar todos
9
- DeleteAll: Excluir todos
10
- 'Cron string': Cron
11
- AreYouSureEnqueueCronJobs: Tem certeza de que deseja enfileirar TODOS as tarefas?
12
- AreYouSureEnqueueCronJob: Tem certeza de que deseja enfileirar a tarefa %{job}?
13
- AreYouSureDeleteCronJobs: Tem certeza de que deseja excluir TODOS as tarefas?
14
- AreYouSureDeleteCronJob: Tem certeza de que deseja excluir a tarefa %{job}?
16
+ EnqueueNow: Enfileirar agora
17
+ Job: Tarefa
18
+ LastEnqueued: Último enfileirado
15
19
  NoCronJobsWereFound: Nenhuma tarefa foi encontrada
16
- Enable: Habilitar
17
- Disable: Desabilitar
18
- 'Last enqueued': Último enfileirado
20
+ NoHistoryWereFound: Nenhum histórico foi encontrado
19
21
  disabled: desabilitado
20
22
  enabled: habilitado
21
- NoHistoryWereFound: Nenhum histórico foi encontrado
22
- Description: Descrição
@@ -1,14 +1,22 @@
1
1
  ru:
2
- Job: Задача
2
+ AreYouSureDeleteCronJob: Вы действительно хотите удалить задачу «%{job}»?
3
+ AreYouSureDeleteCronJobs: Вы уверены, что хотите удалить ВСЕ cron-задачи?
4
+ AreYouSureEnqueueCronJob: Вы уверены, что хотите добавить в очередь cron-задачу %{job}?
5
+ AreYouSureEnqueueCronJobs: Вы уверены, что хотите добавить в очередь ВСЕ cron-задачи?
3
6
  Cron: Cron
4
7
  CronJobs: Периодические задачи
5
- Name: Название
6
- 'Cron string': Периодичность (синтаксис Cron)
8
+ CronString: Периодичность (синтаксис Cron)
9
+ DeleteAll: Удалить все
10
+ Description: Описание
11
+ Disable: Отключить
12
+ DisableAll: Отключить все
13
+ Enable: Включить
14
+ EnableAll: Включить все
15
+ EnqueueAll: Добавить все в очередь
7
16
  EnqueueNow: Запустить
8
- AreYouSureDeleteCronJob: Вы действительно хотите удалить задачу «%{job}»?
17
+ Job: Задача
18
+ LastEnqueued: Последний запуск
9
19
  NoCronJobsWereFound: Не найдено периодических задач
10
- Enable: Включить
11
- Disable: Отключить
12
- 'Last enqueued': Последний запуск
20
+ NoHistoryWereFound: История не найдена
13
21
  disabled: отключено
14
22
  enabled: включено
@@ -1,19 +1,22 @@
1
1
  zh-CN:
2
- Job: 任务
2
+ AreYouSureDeleteCronJob: 你确定删除定时任务(%{job})吗?
3
+ AreYouSureDeleteCronJobs: 你确定删除所有的定时任务吗?
4
+ AreYouSureEnqueueCronJob: 您确定要将 %{job} 的 定时任务 任务加入队列吗?
5
+ AreYouSureEnqueueCronJobs: 您确定要将所有 定时任务 任务加入队列吗?
3
6
  Cron: 定时任务
4
7
  CronJobs: 定时任务列表
5
- EnqueueNow: 立刻执行
6
- EnableAll: 启用所有
8
+ CronString: 定时策略
9
+ DeleteAll: 删除所有
10
+ Description: 描述
11
+ Disable: 禁用
7
12
  DisableAll: 禁用所有
13
+ Enable: 启用
14
+ EnableAll: 启用所有
8
15
  EnqueueAll: 执行所有
9
- DeleteAll: 删除所有
10
- 'Cron string': 定时策略
11
- AreYouSureDeleteCronJobs: 你确定删除所有的定时任务吗?
12
- AreYouSureDeleteCronJob: 你确定删除定时任务(%{job})吗?
16
+ EnqueueNow: 立刻执行
17
+ Job: 任务
18
+ LastEnqueued: 放入队列时间
13
19
  NoCronJobsWereFound: 没有定时任务
14
- Enable: 启用
15
- Disable: 禁用
16
- 'Last enqueued': 放入队列时间
20
+ NoHistoryWereFound: 未找到历史记录
17
21
  disabled: 已禁用
18
22
  enabled: 已启用
19
-
@@ -1,5 +1,3 @@
1
- require 'sidekiq'
2
-
3
1
  module Sidekiq
4
2
  module Cron
5
3
  class Namespace
@@ -1,20 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'sidekiq'
4
- require 'sidekiq/cron'
5
3
  require 'sidekiq/scheduled'
6
- require 'sidekiq/options'
7
4
 
8
5
  module Sidekiq
9
6
  module Cron
10
7
  # The Poller checks Redis every N seconds for scheduled cron jobs.
11
8
  class Poller < Sidekiq::Scheduled::Poller
12
9
  def initialize(config = nil)
13
- if Gem::Version.new(Sidekiq::VERSION) < Gem::Version.new('6.5.0')
14
- # Old version of Sidekiq does not accept a config argument.
15
- @config = config
16
- end
17
-
18
10
  super
19
11
  end
20
12
 
@@ -40,7 +32,7 @@ module Sidekiq
40
32
  private
41
33
 
42
34
  def enqueue_job(job, time = Time.now.utc)
43
- job.test_and_enque_for_time! time if job && job.valid?
35
+ job.test_and_enqueue_for_time! time if job && job.valid?
44
36
  rescue => ex
45
37
  # Problem somewhere in one job.
46
38
  Sidekiq.logger.error "CRON JOB: #{ex.message}"
@@ -1,9 +1,5 @@
1
- require 'sidekiq'
2
- require 'sidekiq/cron/job'
3
- require 'sidekiq/options'
4
-
5
1
  Sidekiq.configure_server do |config|
6
- schedule_file = Sidekiq::Options[:cron_schedule_file] || 'config/schedule.yml'
2
+ schedule_file = Sidekiq::Cron.configuration.cron_schedule_file
7
3
 
8
4
  if File.exist?(schedule_file)
9
5
  config.on(:startup) do
@@ -1,8 +1,7 @@
1
- # https://github.com/rails/rails/blob/352865d0f835c24daa9a2e9863dcc9dde9e5371a/activesupport/lib/active_support/inflector/methods.rb#L270
2
-
3
1
  module Sidekiq
4
2
  module Cron
5
3
  module Support
4
+ # Inspired by Active Support Inflector
6
5
  def self.constantize(camel_cased_word)
7
6
  names = camel_cased_word.split("::".freeze)
8
7
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sidekiq
4
4
  module Cron
5
- VERSION = "2.0.0.rc1"
5
+ VERSION = "2.0.0"
6
6
  end
7
7
  end
@@ -5,23 +5,23 @@
5
5
  <small><%= @current_namespace %></small>
6
6
  </h3>
7
7
  </div>
8
- <div class='col-sm-7 pull-right' style="margin-top: 20px; margin-bottom: 10px;">
8
+ <div class='col-sm-7 pull-right h2'>
9
9
  <% if @cron_jobs.size > 0 %>
10
10
  <form action="<%= root_path %>cron/namespaces/<%= @current_namespace %>/all/delete" method="post" class="pull-right">
11
- <%= csrf_tag if respond_to?(:csrf_tag) %>
11
+ <%= csrf_tag %>
12
12
  <input class="btn btn-danger" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSureDeleteCronJobs') %>" />
13
13
  </form>
14
14
  <form action="<%= root_path %>cron/namespaces/<%= @current_namespace %>/all/disable" method="post" class="pull-right">
15
- <%= csrf_tag if respond_to?(:csrf_tag) %>
16
- <input class="btn btn-warn" type="submit" name="enque" value="<%= t('DisableAll') %>" />
15
+ <%= csrf_tag %>
16
+ <input class="btn btn-warn" type="submit" name="enqueue" value="<%= t('DisableAll') %>" />
17
17
  </form>
18
18
  <form action="<%= root_path %>cron/namespaces/<%= @current_namespace %>/all/enable" method="post" class="pull-right">
19
- <%= csrf_tag if respond_to?(:csrf_tag) %>
20
- <input class="btn btn-warn" type="submit" name="enque" value="<%= t('EnableAll') %>" />
19
+ <%= csrf_tag %>
20
+ <input class="btn btn-warn" type="submit" name="enqueue" value="<%= t('EnableAll') %>" />
21
21
  </form>
22
- <form action="<%= root_path %>cron/namespaces/<%= @current_namespace %>/all/enque" method="post" class="pull-right">
23
- <%= csrf_tag if respond_to?(:csrf_tag) %>
24
- <input class="btn btn-warn" type="submit" name="enque" value="<%= t('EnqueueAll') %>" data-confirm="<%= t('AreYouSureEnqueueCronJobs') %>" />
22
+ <form action="<%= root_path %>cron/namespaces/<%= @current_namespace %>/all/enqueue" method="post" class="pull-right">
23
+ <%= csrf_tag %>
24
+ <input class="btn btn-warn" type="submit" name="enqueue" value="<%= t('EnqueueAll') %>" data-confirm="<%= t('AreYouSureEnqueueCronJobs') %>" />
25
25
  </form>
26
26
  <% end %>
27
27
  </div>
@@ -31,7 +31,7 @@
31
31
  <div class='row'>
32
32
  <div class="col-sm-12 summary_bar">
33
33
  <ul class="list-unstyled summary row">
34
- <% @namespaces.sort_by { |namespace| namespace[:name] } .each do |namespace| %>
34
+ <% Sidekiq::Cron::Namespace.all_with_count.sort_by { |namespace| namespace[:name] }.each do |namespace| %>
35
35
  <li class="col-sm-1">
36
36
  <a href="<%= root_path %>cron/namespaces/<%= namespace[:name] %>">
37
37
  <span class="count"><%= namespace[:count] %></span>
@@ -47,63 +47,59 @@
47
47
  <% if @cron_jobs.size > 0 %>
48
48
  <table class="table table-hover table-bordered table-striped table-white">
49
49
  <thead>
50
+ <tr>
50
51
  <th><%= t('Status') %></th>
51
- <th><%= t('Name') %></th>
52
- <th><%= t('Cron string') %></th>
53
- <th><%= t('Last enqueued') %></th>
54
- <th width="180"><%= t('Actions')%></th>
52
+ <th width="50%"><%= t('Name') %></th>
53
+ <th><%= t('CronString') %></th>
54
+ <th><%= t('LastEnqueued') %></th>
55
+ <th width="180"><%= t('Actions') %></th>
56
+ </tr>
55
57
  </thead>
56
58
 
57
59
  <tbody>
58
- <% @cron_jobs.sort{|a,b| a.sort_name <=> b.sort_name }.each_with_index do |job, index| %>
59
- <% style = "#{job.status == 'disabled' ? "background: #ecc; color: #585454;": ""}" %>
60
+ <% @cron_jobs.sort{ |a,b| a.sort_name <=> b.sort_name }.each do |job| %>
61
+ <% klass = (job.status == 'disabled') ? 'bg-danger text-muted' : '' %>
62
+ <% escaped_job_name = CGI.escape(job.name).gsub('+', '%20') %>
60
63
  <tr>
61
- <td style="<%= style %>"><%= t job.status %></td>
62
- <td style="<%= style %>">
63
- <a href="<%= root_path %>cron/namespaces/<%= @current_namespace %>/jobs/<%= CGI.escape(job.name).gsub('+', '%20') %>" title="<%= job.description %>">
64
- <b style="<%= style %>"><%= job.name %></b>
64
+ <td class="<%= klass %>"><%= t job.status %></td>
65
+ <td class="<%= klass %>">
66
+ <a href="<%= root_path %>cron/namespaces/<%= job.namespace %>/jobs/<%= escaped_job_name %>" title="<%= job.description %>">
67
+ <b class="<%= klass %>"><%= job.name %></b>
65
68
  </a>
66
- <hr style="margin:3px;border:0;">
67
- <small>
69
+ <br/>
68
70
  <% if job.message and job.message.to_s.size > 100 %>
69
- <% if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("6.3.0") %>
70
- <button data-toggle="job_<%= index %>" class="btn btn-warn btn-xs"><%= t('ShowAll')%></button>
71
- <div class="toggle" id="job_<%= index %>" style="display: inline;"><%= job.message[0..100] + "... " %></div>
72
- <div class="toggle" id="job_<%= index %>_full" style="display: none;"><%= job.message %></div>
73
- <% else %>
74
- <button data-toggle="collapse" data-target=".worker_<%= index %>" class="btn btn-warn btn-xs"><%= t('ShowAll')%></button>
75
- <div class="toggle worker_<%= index %>" style="display: inline;"><%= job.message[0..100] + "... " %></div>
76
- <div class="toggle worker_<%= index %>" style="display: none;"><%= job.message %></div>
77
- <% end %>
71
+ <details>
72
+ <summary class="btn btn-warn btn-xs">Show message</summary>
73
+ <p><small><%= job.message %></small></p>
74
+ </details>
78
75
  <% else %>
79
- <%= job.message %>
76
+ <small><%= job.message %></small>
80
77
  <% end %>
81
- </small>
82
78
  </td>
83
- <td style="<%= style %>"><b><%= job.human_cron %><br/><small><%= job.cron.gsub(" ", "&nbsp;") %></small></b></td>
84
- <td style="<%= style %>"><%= job.last_enqueue_time ? relative_time(job.last_enqueue_time) : "-" %></td>
85
- <td style="<%= style %>">
79
+ <td class="<%= klass %>"><b><%= job.human_cron %><br/><small><%= job.cron.gsub(" ", "&nbsp;") %></small></b></td>
80
+ <td class="<%= klass %>"><%= job.last_enqueue_time ? relative_time(job.last_enqueue_time) : "-" %></td>
81
+ <td class="<%= klass %>">
86
82
  <% if job.status == 'enabled' %>
87
- <form action="<%= root_path %>cron/namespaces/<%= @current_namespace %>/jobs/<%= CGI.escape(job.name).gsub('+', '%20') %>/enque" method="post">
88
- <%= csrf_tag if respond_to?(:csrf_tag) %>
89
- <input class='btn btn-warn btn-xs pull-left' type="submit" name="enque" value="<%= t('EnqueueNow') %>" data-confirm="<%= t('AreYouSureEnqueueCronJob', :job => job.name) %>"/>
83
+ <form action="<%= root_path %>cron/namespaces/<%= job.namespace %>/jobs/<%= escaped_job_name %>/enqueue" method="post">
84
+ <%= csrf_tag %>
85
+ <input class='btn btn-warn btn-xs pull-left' type="submit" name="enqueue" value="<%= t('EnqueueNow') %>" data-confirm="<%= t('AreYouSureEnqueueCronJob', :job => job.name) %>"/>
90
86
  </form>
91
- <form action="<%= root_path %>cron/namespaces/<%= @current_namespace %>/jobs/<%= CGI.escape(job.name).gsub('+', '%20') %>/disable" method="post">
92
- <%= csrf_tag if respond_to?(:csrf_tag) %>
87
+ <form action="<%= root_path %>cron/namespaces/<%= job.namespace %>/jobs/<%= escaped_job_name %>/disable" method="post">
88
+ <%= csrf_tag %>
93
89
  <input class='btn btn-warn btn-xs pull-left' type="submit" name="disable" value="<%= t('Disable') %>"/>
94
90
  </form>
95
91
  <% else %>
96
- <form action="<%= root_path %>cron/namespaces/<%= @current_namespace %>/jobs/<%= CGI.escape(job.name).gsub('+', '%20') %>/enque" method="post">
97
- <%= csrf_tag if respond_to?(:csrf_tag) %>
98
- <input class='btn btn-warn btn-xs pull-left' type="submit" name="enque" value="<%= t('EnqueueNow') %>"/>
92
+ <form action="<%= root_path %>cron/namespaces/<%= job.namespace %>/jobs/<%= escaped_job_name %>/enqueue" method="post">
93
+ <%= csrf_tag %>
94
+ <input class='btn btn-warn btn-xs pull-left' type="submit" name="enqueue" value="<%= t('EnqueueNow') %>" data-confirm="<%= t('AreYouSureEnqueueCronJob', :job => job.name) %>"/>
99
95
  </form>
100
- <form action="<%= root_path %>cron/namespaces/<%= @current_namespace %>/jobs/<%= CGI.escape(job.name).gsub('+', '%20') %>/enable" method="post">
101
- <%= csrf_tag if respond_to?(:csrf_tag) %>
96
+ <form action="<%= root_path %>cron/namespaces/<%= job.namespace %>/jobs/<%= escaped_job_name %>/enable" method="post">
97
+ <%= csrf_tag %>
102
98
  <input class='btn btn-warn btn-xs pull-left' type="submit" name="enable" value="<%= t('Enable') %>"/>
103
99
  </form>
104
- <form action="<%= root_path %>cron/namespaces/<%= @current_namespace %>/jobs/<%= CGI.escape(job.name).gsub('+', '%20') %>/delete" method="post">
105
- <%= csrf_tag if respond_to?(:csrf_tag) %>
106
- <input class='btn btn-xs btn-danger pull-left' type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSureDeleteCronJob', :job => job.name) %>"/>
100
+ <form action="<%= root_path %>cron/namespaces/<%= job.namespace %>/jobs/<%= escaped_job_name %>/delete" method="post">
101
+ <%= csrf_tag %>
102
+ <input class='btn btn-xs btn-danger pull-left help-block' type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSureDeleteCronJob', :job => job.name) %>"/>
107
103
  </form>
108
104
  <% end %>
109
105
  </td>
@@ -5,25 +5,25 @@
5
5
  <small><%= @job.name %></small>
6
6
  </h3>
7
7
  </div>
8
- <div class="span col-sm-7 pull-right" style="margin-top: 20px; margin-bottom: 10px;">
8
+ <div class="span col-sm-7 pull-right h2">
9
9
  <% cron_job_path = "#{root_path}cron/namespaces/#{@current_namespace}/jobs/#{CGI.escape(@job.name).gsub('+', '%20')}" %>
10
- <form action="<%= cron_job_path %>/enque?redirect=<%= cron_job_path %>" class="pull-right" method="post">
11
- <%= csrf_tag if respond_to?(:csrf_tag) %>
12
- <input class="btn btn-warn pull-left" name="enque" type="submit" value="<%= t('EnqueueNow') %>" data-confirm="<%= t('AreYouSureEnqueueCronJob', :job => @job.name) %>" />
10
+ <form action="<%= cron_job_path %>/enqueue?redirect=<%= cron_job_path %>" class="pull-right" method="post">
11
+ <%= csrf_tag %>
12
+ <input class="btn btn-warn pull-left" name="enqueue" 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 %>" method="post">
16
- <%= csrf_tag if respond_to?(:csrf_tag) %>
15
+ <form action="<%= cron_job_path %>/disable?redirect=<%= cron_job_path %>" class="pull-right" method="post">
16
+ <%= csrf_tag %>
17
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 %>" method="post">
21
- <%= csrf_tag if respond_to?(:csrf_tag) %>
20
+ <form action="<%= cron_job_path %>/enable?redirect=<%= cron_job_path %>" class="pull-right" method="post">
21
+ <%= csrf_tag %>
22
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" method="post">
25
- <%= csrf_tag if respond_to?(:csrf_tag) %>
26
- <input class="btn btn-danger" data-confirm="<%= t('AreYouSureDeleteCronJob', :job => @job.name) %>" name="delete" type="submit" value="<%= t('Delete') %>" />
24
+ <form action="<%= cron_job_path %>/delete" class="pull-right" method="post">
25
+ <%= csrf_tag %>
26
+ <input class="btn btn-danger pull-left" data-confirm="<%= t('AreYouSureDeleteCronJob', :job => @job.name) %>" name="delete" type="submit" value="<%= t('Delete') %>" />
27
27
  </form>
28
28
  <% end %>
29
29
  </div>
@@ -1,7 +1,17 @@
1
1
  require "sidekiq/cron/web_extension"
2
2
  require "sidekiq/cron/job"
3
+ require "sidekiq/cron/namespace"
3
4
 
4
5
  if defined?(Sidekiq::Web)
5
- Sidekiq::Web.register Sidekiq::Cron::WebExtension
6
- Sidekiq::Web.tabs["Cron"] = "cron"
6
+ if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('7.3.0')
7
+ Sidekiq::Web.register(
8
+ Sidekiq::Cron::WebExtension, # Class which contains the HTTP actions, required
9
+ name: "cron", # the name of the extension, used to namespace assets
10
+ tab: "Cron", # labels(s) of the UI tabs
11
+ index: "cron", # index route(s) for each tab
12
+ )
13
+ else
14
+ Sidekiq::Web.register Sidekiq::Cron::WebExtension
15
+ Sidekiq::Web.tabs["Cron"] = "cron"
16
+ end
7
17
  end
@@ -4,68 +4,71 @@ module Sidekiq
4
4
  def self.registered(app)
5
5
  app.settings.locales << File.join(File.expand_path("..", __FILE__), "locales")
6
6
 
7
- # Index page of cron jobs.
8
- app.get '/cron' do
9
- view_path = File.join(File.expand_path("..", __FILE__), "views")
7
+ app.helpers do
8
+ # This method constructs the URL for the cron jobs page within the specified namespace.
9
+ def namespace_redirect_path
10
+ "#{root_path}cron/namespaces/#{route_params[:namespace]}"
11
+ end
10
12
 
11
- @current_namespace = 'default'
13
+ def redirect_to_previous_or_default
14
+ redirect params['redirect'] || namespace_redirect_path
15
+ end
12
16
 
13
- @namespaces = Sidekiq::Cron::Namespace.all_with_count
17
+ def render_erb(view)
18
+ views_path = File.join(File.expand_path("..", __FILE__), "views")
19
+ erb(File.read(File.join(views_path, "#{view}.erb")))
20
+ end
21
+ end
14
22
 
15
- # Not passing namespace takes all the jobs from the default one.
16
- @cron_jobs = Sidekiq::Cron::Job.all
23
+ # Index page.
24
+ app.get '/cron' do
25
+ @current_namespace = 'default'
26
+ @cron_jobs = Sidekiq::Cron::Job.all(@current_namespace)
17
27
 
18
- render(:erb, File.read(File.join(view_path, "cron.erb")))
28
+ render_erb(:cron)
19
29
  end
20
30
 
31
+ # Detail page for a specific namespace.
21
32
  app.get '/cron/namespaces/:name' do
22
- view_path = File.join(File.expand_path("..", __FILE__), "views")
23
-
24
33
  @current_namespace = route_params[:name]
25
-
26
- @namespaces = Sidekiq::Cron::Namespace.all_with_count
27
-
28
34
  @cron_jobs = Sidekiq::Cron::Job.all(@current_namespace)
29
35
 
30
- render(:erb, File.read(File.join(view_path, "cron.erb")))
36
+ render_erb(:cron)
31
37
  end
32
38
 
33
39
  # Display job detail + jid history.
34
40
  app.get '/cron/namespaces/:namespace/jobs/:name' do
35
- view_path = File.join(File.expand_path("..", __FILE__), "views")
36
-
37
41
  @current_namespace = route_params[:namespace]
38
- @job_name = route_params[:name]
39
-
40
- @namespaces = Sidekiq::Cron::Namespace.all_with_count
41
-
42
- @job = Sidekiq::Cron::Job.find(@job_name, @current_namespace)
42
+ @job = Sidekiq::Cron::Job.find(route_params[:name], @current_namespace)
43
43
 
44
44
  if @job
45
- render(:erb, File.read(File.join(view_path, "cron_show.erb")))
45
+ render_erb(:cron_show)
46
46
  else
47
- redirect "#{root_path}cron/namespaces/#{route_params[:namespace]}"
47
+ redirect namespace_redirect_path
48
48
  end
49
49
  end
50
50
 
51
- # Enque all cron jobs.
52
- app.post '/cron/namespaces/:namespace/all/enque' do
53
- Sidekiq::Cron::Job.all(route_params[:namespace]).each(&:enque!)
54
- redirect params['redirect'] || "#{root_path}cron/namespaces/#{route_params[:namespace]}"
51
+ # Enqueue all cron jobs.
52
+ app.post '/cron/namespaces/:namespace/all/enqueue' do
53
+ Sidekiq::Cron::Job.all(route_params[:namespace]).each(&:enqueue!)
54
+
55
+ redirect_to_previous_or_default
55
56
  end
56
57
 
57
58
  # Enqueue cron job.
58
- app.post '/cron/namespaces/:namespace/jobs/:name/enque' do
59
+ app.post '/cron/namespaces/:namespace/jobs/:name/enqueue' do
59
60
  if job = Sidekiq::Cron::Job.find(route_params[:name], route_params[:namespace])
60
- job.enque!
61
+ job.enqueue!
61
62
  end
62
- redirect params['redirect'] || "#{root_path}cron"
63
+
64
+ redirect_to_previous_or_default
63
65
  end
64
66
 
65
67
  # Delete all schedules.
66
68
  app.post '/cron/namespaces/:namespace/all/delete' do
67
69
  Sidekiq::Cron::Job.all(route_params[:namespace]).each(&:destroy)
68
- redirect "#{root_path}cron/namespaces/#{route_params[:namespace]}"
70
+
71
+ redirect_to_previous_or_default
69
72
  end
70
73
 
71
74
  # Delete schedule.
@@ -73,13 +76,15 @@ module Sidekiq
73
76
  if job = Sidekiq::Cron::Job.find(route_params[:name], route_params[:namespace])
74
77
  job.destroy
75
78
  end
76
- redirect "#{root_path}cron"
79
+
80
+ redirect_to_previous_or_default
77
81
  end
78
82
 
79
83
  # Enable all jobs.
80
84
  app.post '/cron/namespaces/:namespace/all/enable' do
81
85
  Sidekiq::Cron::Job.all(route_params[:namespace]).each(&:enable!)
82
- redirect params['redirect'] || "#{root_path}cron/namespaces/#{route_params[:namespace]}"
86
+
87
+ redirect_to_previous_or_default
83
88
  end
84
89
 
85
90
  # Enable job.
@@ -87,13 +92,15 @@ module Sidekiq
87
92
  if job = Sidekiq::Cron::Job.find(route_params[:name], route_params[:namespace])
88
93
  job.enable!
89
94
  end
90
- redirect params['redirect'] || "#{root_path}cron"
95
+
96
+ redirect_to_previous_or_default
91
97
  end
92
98
 
93
99
  # Disable all jobs.
94
100
  app.post '/cron/namespaces/:namespace/all/disable' do
95
101
  Sidekiq::Cron::Job.all(route_params[:namespace]).each(&:disable!)
96
- redirect params['redirect'] || "#{root_path}cron/namespaces/#{route_params[:namespace]}"
102
+
103
+ redirect_to_previous_or_default
97
104
  end
98
105
 
99
106
  # Disable job.
@@ -101,7 +108,8 @@ module Sidekiq
101
108
  if job = Sidekiq::Cron::Job.find(route_params[:name], route_params[:namespace])
102
109
  job.disable!
103
110
  end
104
- redirect params['redirect'] || "#{root_path}cron"
111
+
112
+ redirect_to_previous_or_default
105
113
  end
106
114
  end
107
115
  end
data/lib/sidekiq/cron.rb CHANGED
@@ -1,9 +1,3 @@
1
- require "sidekiq/cron/job"
2
- require "sidekiq/cron/namespace"
3
- require "sidekiq/cron/poller"
4
- require "sidekiq/cron/launcher"
5
- require "sidekiq/cron/schedule_loader"
6
-
7
1
  module Sidekiq
8
2
  module Cron
9
3
  class << self
@@ -15,7 +9,22 @@ module Sidekiq
15
9
  yield(configuration) if block_given?
16
10
  end
17
11
 
12
+ def self.reset!
13
+ self.configuration = Configuration.new
14
+ end
15
+
18
16
  class Configuration
17
+ # The interval, in seconds, at which to poll for scheduled cron jobs.
18
+ # This determines how frequently the scheduler checks for jobs to enqueue.
19
+ attr_accessor :cron_poll_interval
20
+
21
+ # The path to a YAML file containing multiple cron job schedules.
22
+ attr_accessor :cron_schedule_file
23
+
24
+ # The maximum number of recent cron job execution histories to retain.
25
+ # This value controls how many past job executions are stored.
26
+ attr_accessor :cron_history_size
27
+
19
28
  # The default namespace is used when no namespace is specified.
20
29
  attr_accessor :default_namespace
21
30
 
@@ -28,12 +37,15 @@ module Sidekiq
28
37
  # The poller will not enqueue jobs that are late by more than this amount of seconds.
29
38
  # Defaults to 60 seconds.
30
39
  #
31
- # This is useful when sidekiq (and sidekiq-cron) is not used in zero downtime deployments and
32
- # when the deployment is done and sidekiq-cron starts to catch up, it will consider older
40
+ # This is useful when Sidekiq (and Sidekiq-Cron) is not used in zero downtime deployments and
41
+ # when the deployment is done and Sidekiq-Cron starts to catch up, it will consider older
33
42
  # jobs that missed their schedules during the deployment. E.g., jobs that run once a day.
34
43
  attr_accessor :reschedule_grace_period
35
44
 
36
45
  def initialize
46
+ @cron_poll_interval = 30
47
+ @cron_schedule_file = 'config/schedule.yml'
48
+ @cron_history_size = 10
37
49
  @default_namespace = 'default'
38
50
  @natural_cron_parsing_mode = :single
39
51
  @reschedule_grace_period = 60
@@ -1,5 +1,4 @@
1
- require 'sidekiq'
2
-
1
+ # Module to access Sidekiq config
3
2
  module Sidekiq
4
3
  module Options
5
4
  def self.[](key)
@@ -16,13 +15,12 @@ module Sidekiq
16
15
 
17
16
  def self.options_field
18
17
  return @options_field unless @options_field.nil?
18
+
19
19
  sidekiq_version = Gem::Version.new(Sidekiq::VERSION)
20
20
  @options_field = if sidekiq_version >= Gem::Version.new('7.0')
21
21
  :default_configuration
22
- elsif sidekiq_version >= Gem::Version.new('6.5')
23
- false
24
22
  else
25
- :options
23
+ false
26
24
  end
27
25
  end
28
26
  end