sidekiq 7.3.9 → 8.1.7

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.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/Changes.md +225 -0
  3. data/README.md +34 -14
  4. data/bin/kiq +17 -0
  5. data/bin/lint-herb +13 -0
  6. data/bin/sidekiqload +12 -10
  7. data/bin/webload +69 -0
  8. data/lib/active_job/queue_adapters/sidekiq_adapter.rb +107 -58
  9. data/lib/generators/sidekiq/job_generator.rb +15 -3
  10. data/lib/generators/sidekiq/templates/job.rb.erb +1 -1
  11. data/lib/sidekiq/api.rb +310 -83
  12. data/lib/sidekiq/capsule.rb +10 -7
  13. data/lib/sidekiq/cli.rb +31 -24
  14. data/lib/sidekiq/client.rb +36 -18
  15. data/lib/sidekiq/component.rb +45 -3
  16. data/lib/sidekiq/config.rb +35 -30
  17. data/lib/sidekiq/embedded.rb +2 -1
  18. data/lib/sidekiq/fetch.rb +1 -0
  19. data/lib/sidekiq/iterable_job.rb +1 -0
  20. data/lib/sidekiq/job/iterable.rb +46 -18
  21. data/lib/sidekiq/job.rb +18 -3
  22. data/lib/sidekiq/job_logger.rb +8 -6
  23. data/lib/sidekiq/job_retry.rb +45 -18
  24. data/lib/sidekiq/job_util.rb +5 -1
  25. data/lib/sidekiq/launcher.rb +22 -12
  26. data/lib/sidekiq/loader.rb +57 -0
  27. data/lib/sidekiq/logger.rb +25 -69
  28. data/lib/sidekiq/manager.rb +2 -2
  29. data/lib/sidekiq/metrics/query.rb +77 -46
  30. data/lib/sidekiq/metrics/shared.rb +8 -5
  31. data/lib/sidekiq/metrics/tracking.rb +12 -7
  32. data/lib/sidekiq/middleware/current_attributes.rb +11 -19
  33. data/lib/sidekiq/middleware/i18n.rb +2 -0
  34. data/lib/sidekiq/monitor.rb +4 -8
  35. data/lib/sidekiq/paginator.rb +18 -2
  36. data/lib/sidekiq/processor.rb +26 -18
  37. data/lib/sidekiq/profiler.rb +73 -0
  38. data/lib/sidekiq/rails.rb +46 -67
  39. data/lib/sidekiq/redis_client_adapter.rb +6 -3
  40. data/lib/sidekiq/redis_connection.rb +16 -5
  41. data/lib/sidekiq/ring_buffer.rb +1 -0
  42. data/lib/sidekiq/scheduled.rb +6 -7
  43. data/lib/sidekiq/test_api.rb +331 -0
  44. data/lib/sidekiq/testing/inline.rb +2 -30
  45. data/lib/sidekiq/testing.rb +2 -333
  46. data/lib/sidekiq/transaction_aware_client.rb +13 -5
  47. data/lib/sidekiq/tui/controls.rb +53 -0
  48. data/lib/sidekiq/tui/filtering.rb +53 -0
  49. data/lib/sidekiq/tui/tabs/base_tab.rb +230 -0
  50. data/lib/sidekiq/tui/tabs/busy.rb +104 -0
  51. data/lib/sidekiq/tui/tabs/dead.rb +14 -0
  52. data/lib/sidekiq/tui/tabs/home.rb +115 -0
  53. data/lib/sidekiq/tui/tabs/metrics.rb +114 -0
  54. data/lib/sidekiq/tui/tabs/queues.rb +83 -0
  55. data/lib/sidekiq/tui/tabs/retries.rb +14 -0
  56. data/lib/sidekiq/tui/tabs/scheduled.rb +14 -0
  57. data/lib/sidekiq/tui/tabs/set_tab.rb +91 -0
  58. data/lib/sidekiq/tui/tabs.rb +15 -0
  59. data/lib/sidekiq/tui.rb +390 -0
  60. data/lib/sidekiq/version.rb +2 -2
  61. data/lib/sidekiq/web/action.rb +146 -83
  62. data/lib/sidekiq/web/application.rb +372 -328
  63. data/lib/sidekiq/web/config.rb +117 -0
  64. data/lib/sidekiq/web/helpers.rb +102 -44
  65. data/lib/sidekiq/web/router.rb +61 -77
  66. data/lib/sidekiq/web.rb +65 -151
  67. data/lib/sidekiq.rb +13 -1
  68. data/sidekiq.gemspec +9 -8
  69. data/web/assets/images/logo.png +0 -0
  70. data/web/assets/images/status.png +0 -0
  71. data/web/assets/javascripts/application.js +43 -27
  72. data/web/assets/javascripts/base-charts.js +30 -16
  73. data/web/assets/javascripts/chartjs-adapter-date-fns.min.js +7 -0
  74. data/web/assets/javascripts/dashboard.js +1 -1
  75. data/web/assets/javascripts/metrics.js +16 -34
  76. data/web/assets/stylesheets/style.css +776 -0
  77. data/web/locales/ar.yml +3 -1
  78. data/web/locales/cs.yml +2 -0
  79. data/web/locales/da.yml +2 -0
  80. data/web/locales/de.yml +2 -0
  81. data/web/locales/el.yml +2 -0
  82. data/web/locales/en.yml +8 -0
  83. data/web/locales/es.yml +25 -2
  84. data/web/locales/fa.yml +3 -1
  85. data/web/locales/fr.yml +3 -1
  86. data/web/locales/gd.yml +13 -1
  87. data/web/locales/he.yml +3 -1
  88. data/web/locales/hi.yml +36 -0
  89. data/web/locales/it.yml +9 -0
  90. data/web/locales/ja.yml +2 -0
  91. data/web/locales/ko.yml +2 -0
  92. data/web/locales/lt.yml +2 -0
  93. data/web/locales/nb.yml +2 -0
  94. data/web/locales/nl.yml +2 -0
  95. data/web/locales/pl.yml +2 -0
  96. data/web/locales/{pt-br.yml → pt-BR.yml} +3 -1
  97. data/web/locales/pt.yml +2 -0
  98. data/web/locales/ru.yml +2 -0
  99. data/web/locales/sv.yml +2 -0
  100. data/web/locales/ta.yml +83 -47
  101. data/web/locales/tr.yml +2 -0
  102. data/web/locales/uk.yml +7 -5
  103. data/web/locales/ur.yml +3 -1
  104. data/web/locales/vi.yml +2 -0
  105. data/web/locales/{zh-cn.yml → zh-CN.yml} +86 -73
  106. data/web/locales/{zh-tw.yml → zh-TW.yml} +3 -1
  107. data/web/views/_footer.html.erb +32 -0
  108. data/web/views/_job_info.html.erb +115 -0
  109. data/web/views/_metrics_period_select.html.erb +15 -0
  110. data/web/views/_nav.html.erb +45 -0
  111. data/web/views/_paging.html.erb +26 -0
  112. data/web/views/_poll_link.html.erb +4 -0
  113. data/web/views/{_summary.erb → _summary.html.erb} +16 -16
  114. data/web/views/busy.html.erb +155 -0
  115. data/web/views/dashboard.html.erb +104 -0
  116. data/web/views/dead.html.erb +38 -0
  117. data/web/views/filtering.html.erb +6 -0
  118. data/web/views/layout.html.erb +26 -0
  119. data/web/views/metrics.html.erb +85 -0
  120. data/web/views/metrics_for_job.html.erb +58 -0
  121. data/web/views/morgue.html.erb +69 -0
  122. data/web/views/profiles.html.erb +43 -0
  123. data/web/views/queue.html.erb +57 -0
  124. data/web/views/queues.html.erb +46 -0
  125. data/web/views/retries.html.erb +77 -0
  126. data/web/views/retry.html.erb +39 -0
  127. data/web/views/scheduled.html.erb +64 -0
  128. data/web/views/{scheduled_job_info.erb → scheduled_job_info.html.erb} +3 -3
  129. metadata +65 -47
  130. data/lib/sidekiq/web/csrf_protection.rb +0 -183
  131. data/web/assets/stylesheets/application-dark.css +0 -147
  132. data/web/assets/stylesheets/application-rtl.css +0 -163
  133. data/web/assets/stylesheets/application.css +0 -759
  134. data/web/assets/stylesheets/bootstrap-rtl.min.css +0 -9
  135. data/web/assets/stylesheets/bootstrap.css +0 -5
  136. data/web/views/_footer.erb +0 -34
  137. data/web/views/_job_info.erb +0 -105
  138. data/web/views/_metrics_period_select.erb +0 -12
  139. data/web/views/_nav.erb +0 -52
  140. data/web/views/_paging.erb +0 -25
  141. data/web/views/_poll_link.erb +0 -4
  142. data/web/views/_status.erb +0 -4
  143. data/web/views/busy.erb +0 -148
  144. data/web/views/dashboard.erb +0 -108
  145. data/web/views/dead.erb +0 -34
  146. data/web/views/filtering.erb +0 -6
  147. data/web/views/layout.erb +0 -42
  148. data/web/views/metrics.erb +0 -90
  149. data/web/views/metrics_for_job.erb +0 -59
  150. data/web/views/morgue.erb +0 -74
  151. data/web/views/queue.erb +0 -55
  152. data/web/views/queues.erb +0 -44
  153. data/web/views/retries.erb +0 -79
  154. data/web/views/retry.erb +0 -34
  155. data/web/views/scheduled.erb +0 -56
@@ -0,0 +1,43 @@
1
+ <section>
2
+ <header>
3
+ <h1>
4
+ <%= t('Profiles') %>
5
+ <a target="blank" href="https://sidekiq.org/wiki/Profiling"><span class="info-circle" title="<%= t("ClickToLearnMore") %>">?</span></a>
6
+ </h1>
7
+ </header>
8
+
9
+ <% @profiles = Sidekiq::ProfileSet.new %>
10
+ <% if @profiles.size > 0 %>
11
+ <div class="table_container">
12
+ <table>
13
+ <thead>
14
+ <th><%= t('CreatedAt') %></th>
15
+ <th><%= t('Type') %></th>
16
+ <th><%= t('JID') %></th>
17
+ <th><%= t('Token') %></th>
18
+ <th><%= t('Size') %></th>
19
+ <th><%= t('ElapsedTime') %></th>
20
+ <th>&nbsp</th>
21
+ </thead>
22
+ <% @profiles.each do |record| %>
23
+ <tr>
24
+ <td><%= relative_time(record.started_at) %></td>
25
+ <td><%= record.type %> </td>
26
+ <td><%= record.jid %> </td>
27
+ <td><%= record.token %> </td>
28
+ <td><%= format_memory(record.size / 1024) %> </td>
29
+ <td><%= number_with_delimiter(record.elapsed, precision: 2) %> </td>
30
+ <td>
31
+ <% if config[:profile_store_url] %>
32
+ <a target="_blank" class="btn" href="<%= root_path %>profiles/<%= CGI.escape(record.key) %>"><%= t("View") %></a>
33
+ <% end %>
34
+ <a class="btn" href="<%= root_path %>profiles/<%= CGI.escape(record.key) %>/data"><%= t("Data") %></a>
35
+ </td>
36
+ </tr>
37
+ <% end %>
38
+ </table>
39
+ </div>
40
+ <% else %>
41
+ <div class="alert alert-success"><%= t('NoDataFound') %></div>
42
+ <% end %>
43
+ </section>
@@ -0,0 +1,57 @@
1
+ <section>
2
+ <header>
3
+ <h1><%= t('CurrentMessagesInQueue', :queue => h(@name)) %>
4
+ <% if @queue.paused? %>
5
+ <span class="label label-danger"><%= t('Paused') %></span>
6
+ <% end %>
7
+ <span class="badge badge-secondary"><%= number_with_delimiter(@total_size) %></span>
8
+ </h1>
9
+ <%= erb :_paging, locals: { url: "#{root_path}queues/#{CGI.escape(@name)}" } %>
10
+ </header>
11
+
12
+ <div class="table_container">
13
+ <table>
14
+ <thead>
15
+ <th><a href="<%= url %>?direction=<%= url_params("direction") == 'asc' ? 'desc' : 'asc' %>"># <%= sort_direction_label %></a></th>
16
+ <th><%= t('Job') %></th>
17
+ <th><%= t('Arguments') %></th>
18
+ <th><%= t('Context') %></th>
19
+ <th><%= t('Actions') %></th>
20
+ </thead>
21
+ <% @jobs.each_with_index do |job, index| %>
22
+ <tr title="<%= job.jid %>">
23
+ <% if url_params("direction") == 'asc' %>
24
+ <td><%= @count * (@current_page - 1) + index + 1 %></td>
25
+ <% else %>
26
+ <td><%= @total_size - (@count * (@current_page - 1) + index) %></td>
27
+ <% end %>
28
+ <td>
29
+ <%= h(job.display_class) %>
30
+ <%= display_tags(job, nil) %>
31
+ </td>
32
+ <td>
33
+ <% a = job.display_args %>
34
+ <% if a.inspect.size > 100 %>
35
+ <span id="job_<%= index %>"><%= h(a.inspect[0..100]) + "... " %></span>
36
+ <button data-toggle="job_<%= index %>_full" class="btn btn-default btn-xs"><%= t('ShowAll') %></button>
37
+ <div class="toggle" id="job_<%= index %>_full"><%= display_args(a) %></div>
38
+ <% else %>
39
+ <code><%= display_args(job.display_args) %></code>
40
+ <% end %>
41
+ </td>
42
+ <td>
43
+ <%= h(job["cattr"].inspect) if job["cattr"]&.any? %>
44
+ </td>
45
+ <td>
46
+ <form action="<%= root_path %>queues/<%= CGI.escape(@name) %>/delete" method="post">
47
+ <%= csrf_tag %>
48
+ <input name="key_val" value="<%= h job.value %>" type="hidden">
49
+ <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSure') %>">
50
+ </form>
51
+ </td>
52
+ </tr>
53
+ <% end %>
54
+ </table>
55
+ </div>
56
+ <%= erb :_paging, locals: { url: "#{root_path}queues/#{CGI.escape(@name)}" } %>
57
+ </section>
@@ -0,0 +1,46 @@
1
+ <section>
2
+ <header>
3
+ <h1><%= t('Queues') %></h1>
4
+ </header>
5
+
6
+ <div class="table_container">
7
+ <table>
8
+ <thead>
9
+ <th><%= t('Queue') %></th>
10
+ <th><%= t('Size') %></th>
11
+ <th><%= t('Latency') %></th>
12
+ <th><%= t('Actions') %></th>
13
+ </thead>
14
+ <% @queues.each do |queue| %>
15
+ <tr>
16
+ <td>
17
+ <a href="<%= root_path %>queues/<%= CGI.escape(queue.name) %>"><%= h queue.name %></a>
18
+ <% if queue.paused? %>
19
+ <span class="label label-danger"><%= t('Paused') %></span>
20
+ <% end %>
21
+ </td>
22
+ <td class="num"><%= number_with_delimiter(queue.size) %> </td>
23
+ <td class="num">
24
+ <% queue_latency = queue.latency %>
25
+ <%= (queue_latency < 60) ? '' : " (#{relative_time(Time.at(Time.now.to_f - queue_latency))})" %>
26
+ <%= number_with_delimiter(queue_latency, precision: 2) %>
27
+ </td>
28
+ <td class="delete-confirm">
29
+ <form action="<%= root_path %>queues/<%= CGI.escape(queue.name) %>" method="post">
30
+ <%= csrf_tag %>
31
+ <input class="btn btn-danger" type="submit" name="delete" title="This will delete all jobs within the queue, it will reappear if you push more jobs to it in the future." value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSureDeleteQueue', :queue => h(queue.name)) %>">
32
+
33
+ <% if Sidekiq.pro? %>
34
+ <% if queue.paused? %>
35
+ <input class="btn btn-danger" type="submit" name="unpause" value="<%= t('Unpause') %>">
36
+ <% else %>
37
+ <input class="btn btn-danger" type="submit" name="pause" value="<%= t('Pause') %>">
38
+ <% end %>
39
+ <% end %>
40
+ </form>
41
+ </td>
42
+ </tr>
43
+ <% end %>
44
+ </table>
45
+ </div>
46
+ </section>
@@ -0,0 +1,77 @@
1
+ <section>
2
+ <header>
3
+ <h1><%= t('Retries') %></h1>
4
+ <% if @retries.size > 0 && @total_size > @count %>
5
+ <%= erb :_paging, locals: { url: "#{root_path}retries" } %>
6
+ <% end %>
7
+ <%= filtering('retries') %>
8
+ </header>
9
+
10
+ <% if @retries.size > 0 %>
11
+ <form action="<%= root_path %>retries" method="post">
12
+ <%= csrf_tag %>
13
+ <div class="table_container">
14
+ <table>
15
+ <thead>
16
+ <tr>
17
+ <th>
18
+ <label>
19
+ <input type="checkbox" class="check_all check-all-items">
20
+ </label>
21
+ </th>
22
+ <th><%= t('NextRetry') %></th>
23
+ <th><%= t('RetryCount') %></th>
24
+ <th><%= t('Queue') %></th>
25
+ <th><%= t('Job') %></th>
26
+ <th><%= t('Arguments') %></th>
27
+ <th><%= t('Error') %></th>
28
+ </tr>
29
+ </thead>
30
+ <% @retries.each do |entry| %>
31
+ <tr>
32
+ <td>
33
+ <label>
34
+ <input type="checkbox" name="key[]" value="<%= job_params(entry.item, entry.score) %>" class="shift_clickable select-item-checkbox">
35
+ </label>
36
+ </td>
37
+ <td>
38
+ <a href="<%= root_path %>retries/<%= job_params(entry.item, entry.score) %>"><%= relative_time(entry.at) %></a>
39
+ </td>
40
+ <td><%= entry['retry_count'] %></td>
41
+ <td>
42
+ <a href="<%= root_path %>queues/<%= CGI.escape(entry.queue) %>"><%= h entry.queue %></a>
43
+ </td>
44
+ <td>
45
+ <%= entry.display_class %>
46
+ <%= display_tags(entry, "retries") %>
47
+ </td>
48
+ <td>
49
+ <code>
50
+ <div class="args"><%= display_args(entry.display_args) %></div>
51
+ </code>
52
+ </td>
53
+ <td>
54
+ <div><a href="<%= root_path %>retries/<%= job_params(entry.item, entry.score) %>"><%= h truncate("#{entry['error_class']}: #{entry['error_message']}", 200) %></a></div>
55
+ <% if (state = @iterable_states[entry.jid]) %>
56
+ <div><small>cursor=<%= h(truncate(state.cursor.inspect, 100)) %>; exec=<%= state.executions %>; rt=<%= number_with_delimiter(state.runtime, precision: 3) %>s</small></div>
57
+ <% end %>
58
+ </td>
59
+ </tr>
60
+ <% end %>
61
+ </table>
62
+ </div>
63
+ <div class="buttons-row">
64
+ <input class="btn btn-primary" type="submit" name="retry" value="<%= t('RetryNow') %>">
65
+ <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>">
66
+ <input class="btn btn-danger" type="submit" name="kill" value="<%= t('Kill') %>">
67
+ <!-- Retry all -->
68
+ <button class="btn btn-primary bulk-action-buttons bulk-lead-button" type="submit" name="action" value="retry_all" formaction="<%= "#{root_path}retries/all/retry" %>"><%= t('RetryAll') %></button>
69
+ <button class="btn btn-danger bulk-action-buttons" type="submit" name="action" value="delete_all" formaction="<%= "#{root_path}retries/all/delete" %>" data-confirm="<%= t('AreYouSure') %>"><%= t('DeleteAll') %></button>
70
+ <button class="btn btn-danger bulk-action-buttons" type="submit" name="action" value="kill_all" formaction="<%= "#{root_path}retries/all/kill" %>"><%= t('KillAll') %></button>
71
+ </div>
72
+ </form>
73
+
74
+ <% else %>
75
+ <div class="alert alert-success"><%= t('NoRetriesFound') %></div>
76
+ <% end %>
77
+ </section>
@@ -0,0 +1,39 @@
1
+ <%= erb :_job_info, locals: { job: @retry, type: :retry } %>
2
+
3
+ <section>
4
+ <header>
5
+ <h2><%= t('Error') %></h2>
6
+ </header>
7
+
8
+ <div class="table_container">
9
+ <table>
10
+ <tbody>
11
+ <tr>
12
+ <th><%= t('ErrorClass') %></th>
13
+ <td>
14
+ <code><%= h @retry['error_class'] %></code>
15
+ </td>
16
+ </tr>
17
+ <tr>
18
+ <th><%= t('ErrorMessage') %></th>
19
+ <td><%= h(@retry['error_message']) %></td>
20
+ </tr>
21
+ <% if @retry.error_backtrace %>
22
+ <tr>
23
+ <th><%= t('ErrorBacktrace') %></th>
24
+ <td>
25
+ <code><%= @retry.error_backtrace.join("<br/>") %></code>
26
+ </td>
27
+ </tr>
28
+ <% end %>
29
+ </tbody>
30
+ </table>
31
+ </div>
32
+
33
+ <form action="<%= root_path %>retries/<%= job_params(@retry, @retry.score) %>" method="post">
34
+ <%= csrf_tag %>
35
+ <a class="btn btn-default" href="<%= root_path %>retries"><%= t('GoBack') %></a>
36
+ <input class="btn btn-primary" type="submit" name="retry" value="<%= t('RetryNow') %>">
37
+ <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>">
38
+ </form>
39
+ </section>
@@ -0,0 +1,64 @@
1
+ <section>
2
+ <header>
3
+ <h1><%= t('ScheduledJobs') %></h1>
4
+ <% if @scheduled.size > 0 && @total_size > @count %>
5
+ <%= erb :_paging, locals: { url: "#{root_path}scheduled" } %>
6
+ <% end %>
7
+ <%= filtering('scheduled') %>
8
+ </header>
9
+
10
+ <% if @scheduled.size > 0 %>
11
+ <form action="<%= root_path %>scheduled" method="post">
12
+ <%= csrf_tag %>
13
+ <div class="table_container">
14
+ <table>
15
+ <thead>
16
+ <tr>
17
+ <th>
18
+ <label>
19
+ <input type="checkbox" class="check_all check-all-items">
20
+ </label>
21
+ </th>
22
+ <th><%= t('When') %></th>
23
+ <th><%= t('Queue') %></th>
24
+ <th><%= t('Job') %></th>
25
+ <th><%= t('Arguments') %></th>
26
+ </tr>
27
+ </thead>
28
+ <% @scheduled.each do |entry| %>
29
+ <tr>
30
+ <td>
31
+ <label>
32
+ <input type="checkbox" name="key[]" value="<%= job_params(entry.item, entry.score) %>" class="shift_clickable select-item-checkbox">
33
+ </label>
34
+ </td>
35
+ <td>
36
+ <a href="<%= root_path %>scheduled/<%= job_params(entry.item, entry.score) %>"><%= relative_time(entry.at) %></a>
37
+ </td>
38
+ <td>
39
+ <a href="<%= root_path %>queues/<%= CGI.escape(entry.queue) %>"><%= h entry.queue %></a>
40
+ </td>
41
+ <td>
42
+ <%= entry.display_class %>
43
+ <%= display_tags(entry, "scheduled") %>
44
+ </td>
45
+ <td>
46
+ <code>
47
+ <div class="args"><%= display_args(entry.display_args) %></div>
48
+ </code>
49
+ </td>
50
+ </tr>
51
+ <% end %>
52
+ </table>
53
+ </div>
54
+ <div class="buttons-row">
55
+ <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>">
56
+ <input class="btn btn-danger" type="submit" name="add_to_queue" value="<%= t('AddToQueue') %>">
57
+ <button class="btn btn-danger bulk-action-buttons bulk-lead-button" type="submit" name="action" value="delete_all" formaction="<%= "#{root_path}scheduled/all/delete" %>" data-confirm="<%= t('AreYouSure') %>"><%= t('DeleteAll') %></button>
58
+ <button class="btn btn-danger bulk-action-buttons" type="submit" name="action" value="add_all_to_queue" formaction="<%= "#{root_path}scheduled/all/add_to_queue" %>"><%= t('AddAllToQueue') %></button>
59
+ </div>
60
+ </form>
61
+ <% else %>
62
+ <div class="alert alert-success"><%= t('NoScheduledFound') %></div>
63
+ <% end %>
64
+ </section>
@@ -1,8 +1,8 @@
1
1
  <%= erb :_job_info, locals: { job: @job, type: :scheduled } %>
2
2
 
3
- <form class="form-horizontal" action="<%= root_path %>scheduled/<%= job_params(@job, @job.score) %>" method="post">
3
+ <form action="<%= root_path %>scheduled/<%= job_params(@job, @job.score) %>" method="post">
4
4
  <%= csrf_tag %>
5
5
  <a class="btn btn-default" href="<%= root_path %>scheduled"><%= t('GoBack') %></a>
6
- <input class="btn btn-primary" type="submit" name="add_to_queue" value="<%= t('AddToQueue') %>" />
7
- <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>" />
6
+ <input class="btn btn-primary" type="submit" name="add_to_queue" value="<%= t('AddToQueue') %>">
7
+ <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>">
8
8
  </form>
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.3.9
4
+ version: 8.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Perham
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-02-14 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: redis-client
@@ -15,74 +15,75 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 0.22.2
18
+ version: 0.29.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 0.22.2
25
+ version: 0.29.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: connection_pool
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 2.3.0
32
+ version: 3.0.0
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 2.3.0
39
+ version: 3.0.0
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rack
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 2.2.4
46
+ version: 3.2.0
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 2.2.4
53
+ version: 3.2.0
54
54
  - !ruby/object:Gem::Dependency
55
- name: logger
55
+ name: json
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: '0'
60
+ version: 2.16.0
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: '0'
67
+ version: 2.16.0
68
68
  - !ruby/object:Gem::Dependency
69
- name: base64
69
+ name: logger
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: '0'
74
+ version: 1.7.0
75
75
  type: :runtime
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: '0'
81
+ version: 1.7.0
82
82
  description: Simple, efficient background processing for Ruby.
83
83
  email:
84
84
  - info@contribsys.com
85
85
  executables:
86
+ - kiq
86
87
  - sidekiq
87
88
  - sidekiqmon
88
89
  extensions: []
@@ -91,10 +92,13 @@ files:
91
92
  - Changes.md
92
93
  - LICENSE.txt
93
94
  - README.md
95
+ - bin/kiq
96
+ - bin/lint-herb
94
97
  - bin/multi_queue_bench
95
98
  - bin/sidekiq
96
99
  - bin/sidekiqload
97
100
  - bin/sidekiqmon
101
+ - bin/webload
98
102
  - lib/active_job/queue_adapters/sidekiq_adapter.rb
99
103
  - lib/generators/sidekiq/job_generator.rb
100
104
  - lib/generators/sidekiq/templates/job.rb.erb
@@ -121,6 +125,7 @@ files:
121
125
  - lib/sidekiq/job_retry.rb
122
126
  - lib/sidekiq/job_util.rb
123
127
  - lib/sidekiq/launcher.rb
128
+ - lib/sidekiq/loader.rb
124
129
  - lib/sidekiq/logger.rb
125
130
  - lib/sidekiq/manager.rb
126
131
  - lib/sidekiq/metrics/query.rb
@@ -133,6 +138,7 @@ files:
133
138
  - lib/sidekiq/monitor.rb
134
139
  - lib/sidekiq/paginator.rb
135
140
  - lib/sidekiq/processor.rb
141
+ - lib/sidekiq/profiler.rb
136
142
  - lib/sidekiq/rails.rb
137
143
  - lib/sidekiq/redis_client_adapter.rb
138
144
  - lib/sidekiq/redis_connection.rb
@@ -140,14 +146,28 @@ files:
140
146
  - lib/sidekiq/scheduled.rb
141
147
  - lib/sidekiq/sd_notify.rb
142
148
  - lib/sidekiq/systemd.rb
149
+ - lib/sidekiq/test_api.rb
143
150
  - lib/sidekiq/testing.rb
144
151
  - lib/sidekiq/testing/inline.rb
145
152
  - lib/sidekiq/transaction_aware_client.rb
153
+ - lib/sidekiq/tui.rb
154
+ - lib/sidekiq/tui/controls.rb
155
+ - lib/sidekiq/tui/filtering.rb
156
+ - lib/sidekiq/tui/tabs.rb
157
+ - lib/sidekiq/tui/tabs/base_tab.rb
158
+ - lib/sidekiq/tui/tabs/busy.rb
159
+ - lib/sidekiq/tui/tabs/dead.rb
160
+ - lib/sidekiq/tui/tabs/home.rb
161
+ - lib/sidekiq/tui/tabs/metrics.rb
162
+ - lib/sidekiq/tui/tabs/queues.rb
163
+ - lib/sidekiq/tui/tabs/retries.rb
164
+ - lib/sidekiq/tui/tabs/scheduled.rb
165
+ - lib/sidekiq/tui/tabs/set_tab.rb
146
166
  - lib/sidekiq/version.rb
147
167
  - lib/sidekiq/web.rb
148
168
  - lib/sidekiq/web/action.rb
149
169
  - lib/sidekiq/web/application.rb
150
- - lib/sidekiq/web/csrf_protection.rb
170
+ - lib/sidekiq/web/config.rb
151
171
  - lib/sidekiq/web/helpers.rb
152
172
  - lib/sidekiq/web/router.rb
153
173
  - lib/sidekiq/worker_compatibility_alias.rb
@@ -159,15 +179,12 @@ files:
159
179
  - web/assets/javascripts/application.js
160
180
  - web/assets/javascripts/base-charts.js
161
181
  - web/assets/javascripts/chart.min.js
182
+ - web/assets/javascripts/chartjs-adapter-date-fns.min.js
162
183
  - web/assets/javascripts/chartjs-plugin-annotation.min.js
163
184
  - web/assets/javascripts/dashboard-charts.js
164
185
  - web/assets/javascripts/dashboard.js
165
186
  - web/assets/javascripts/metrics.js
166
- - web/assets/stylesheets/application-dark.css
167
- - web/assets/stylesheets/application-rtl.css
168
- - web/assets/stylesheets/application.css
169
- - web/assets/stylesheets/bootstrap-rtl.min.css
170
- - web/assets/stylesheets/bootstrap.css
187
+ - web/assets/stylesheets/style.css
171
188
  - web/locales/ar.yml
172
189
  - web/locales/cs.yml
173
190
  - web/locales/da.yml
@@ -187,7 +204,7 @@ files:
187
204
  - web/locales/nb.yml
188
205
  - web/locales/nl.yml
189
206
  - web/locales/pl.yml
190
- - web/locales/pt-br.yml
207
+ - web/locales/pt-BR.yml
191
208
  - web/locales/pt.yml
192
209
  - web/locales/ru.yml
193
210
  - web/locales/sv.yml
@@ -196,30 +213,30 @@ files:
196
213
  - web/locales/uk.yml
197
214
  - web/locales/ur.yml
198
215
  - web/locales/vi.yml
199
- - web/locales/zh-cn.yml
200
- - web/locales/zh-tw.yml
201
- - web/views/_footer.erb
202
- - web/views/_job_info.erb
203
- - web/views/_metrics_period_select.erb
204
- - web/views/_nav.erb
205
- - web/views/_paging.erb
206
- - web/views/_poll_link.erb
207
- - web/views/_status.erb
208
- - web/views/_summary.erb
209
- - web/views/busy.erb
210
- - web/views/dashboard.erb
211
- - web/views/dead.erb
212
- - web/views/filtering.erb
213
- - web/views/layout.erb
214
- - web/views/metrics.erb
215
- - web/views/metrics_for_job.erb
216
- - web/views/morgue.erb
217
- - web/views/queue.erb
218
- - web/views/queues.erb
219
- - web/views/retries.erb
220
- - web/views/retry.erb
221
- - web/views/scheduled.erb
222
- - web/views/scheduled_job_info.erb
216
+ - web/locales/zh-CN.yml
217
+ - web/locales/zh-TW.yml
218
+ - web/views/_footer.html.erb
219
+ - web/views/_job_info.html.erb
220
+ - web/views/_metrics_period_select.html.erb
221
+ - web/views/_nav.html.erb
222
+ - web/views/_paging.html.erb
223
+ - web/views/_poll_link.html.erb
224
+ - web/views/_summary.html.erb
225
+ - web/views/busy.html.erb
226
+ - web/views/dashboard.html.erb
227
+ - web/views/dead.html.erb
228
+ - web/views/filtering.html.erb
229
+ - web/views/layout.html.erb
230
+ - web/views/metrics.html.erb
231
+ - web/views/metrics_for_job.html.erb
232
+ - web/views/morgue.html.erb
233
+ - web/views/profiles.html.erb
234
+ - web/views/queue.html.erb
235
+ - web/views/queues.html.erb
236
+ - web/views/retries.html.erb
237
+ - web/views/retry.html.erb
238
+ - web/views/scheduled.html.erb
239
+ - web/views/scheduled_job_info.html.erb
223
240
  homepage: https://sidekiq.org
224
241
  licenses:
225
242
  - LGPL-3.0
@@ -230,6 +247,7 @@ metadata:
230
247
  changelog_uri: https://github.com/sidekiq/sidekiq/blob/main/Changes.md
231
248
  source_code_uri: https://github.com/sidekiq/sidekiq
232
249
  rubygems_mfa_required: 'true'
250
+ mailing_list_uri: https://www.rubyforum.org/tag/sidekiq
233
251
  rdoc_options: []
234
252
  require_paths:
235
253
  - lib
@@ -237,14 +255,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
237
255
  requirements:
238
256
  - - ">="
239
257
  - !ruby/object:Gem::Version
240
- version: 2.7.0
258
+ version: 3.2.0
241
259
  required_rubygems_version: !ruby/object:Gem::Requirement
242
260
  requirements:
243
261
  - - ">="
244
262
  - !ruby/object:Gem::Version
245
263
  version: '0'
246
264
  requirements: []
247
- rubygems_version: 3.6.2
265
+ rubygems_version: 4.0.16
248
266
  specification_version: 4
249
267
  summary: Simple, efficient background processing for Ruby
250
268
  test_files: []