sidekiq 8.0.8 → 8.0.9

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/Changes.md +13 -0
  3. data/lib/generators/sidekiq/templates/job.rb.erb +1 -1
  4. data/lib/sidekiq/api.rb +18 -5
  5. data/lib/sidekiq/capsule.rb +4 -0
  6. data/lib/sidekiq/config.rb +8 -2
  7. data/lib/sidekiq/fetch.rb +1 -0
  8. data/lib/sidekiq/job/iterable.rb +2 -2
  9. data/lib/sidekiq/job_logger.rb +4 -2
  10. data/lib/sidekiq/launcher.rb +14 -5
  11. data/lib/sidekiq/middleware/i18n.rb +2 -0
  12. data/lib/sidekiq/monitor.rb +4 -8
  13. data/lib/sidekiq/profiler.rb +1 -0
  14. data/lib/sidekiq/ring_buffer.rb +1 -0
  15. data/lib/sidekiq/version.rb +1 -1
  16. data/lib/sidekiq/web/application.rb +10 -0
  17. data/lib/sidekiq/web/helpers.rb +0 -8
  18. data/web/assets/javascripts/application.js +16 -0
  19. data/web/assets/stylesheets/style.css +17 -0
  20. data/web/locales/ar.yml +1 -0
  21. data/web/locales/cs.yml +1 -0
  22. data/web/locales/da.yml +1 -0
  23. data/web/locales/de.yml +1 -0
  24. data/web/locales/el.yml +1 -0
  25. data/web/locales/en.yml +1 -0
  26. data/web/locales/es.yml +1 -0
  27. data/web/locales/fa.yml +1 -0
  28. data/web/locales/fr.yml +1 -0
  29. data/web/locales/gd.yml +1 -0
  30. data/web/locales/he.yml +1 -0
  31. data/web/locales/hi.yml +1 -0
  32. data/web/locales/it.yml +1 -0
  33. data/web/locales/ja.yml +1 -0
  34. data/web/locales/ko.yml +1 -0
  35. data/web/locales/lt.yml +1 -0
  36. data/web/locales/nb.yml +1 -0
  37. data/web/locales/nl.yml +1 -0
  38. data/web/locales/pl.yml +1 -0
  39. data/web/locales/pt-BR.yml +1 -0
  40. data/web/locales/pt.yml +1 -0
  41. data/web/locales/ru.yml +1 -0
  42. data/web/locales/sv.yml +1 -0
  43. data/web/locales/ta.yml +1 -0
  44. data/web/locales/tr.yml +1 -0
  45. data/web/locales/uk.yml +1 -0
  46. data/web/locales/ur.yml +1 -0
  47. data/web/locales/vi.yml +1 -0
  48. data/web/locales/zh-CN.yml +1 -0
  49. data/web/locales/zh-TW.yml +1 -0
  50. data/web/views/_footer.erb +1 -1
  51. data/web/views/_metrics_period_select.erb +1 -1
  52. data/web/views/_paging.erb +0 -1
  53. data/web/views/_poll_link.erb +2 -2
  54. data/web/views/busy.erb +4 -8
  55. data/web/views/dashboard.erb +3 -3
  56. data/web/views/dead.erb +3 -3
  57. data/web/views/filtering.erb +2 -2
  58. data/web/views/layout.erb +7 -7
  59. data/web/views/metrics.erb +7 -7
  60. data/web/views/morgue.erb +8 -4
  61. data/web/views/queue.erb +2 -2
  62. data/web/views/queues.erb +4 -4
  63. data/web/views/retries.erb +9 -5
  64. data/web/views/retry.erb +2 -2
  65. data/web/views/scheduled.erb +8 -4
  66. data/web/views/scheduled_job_info.erb +2 -2
  67. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a1e8c90888b4135f21e4dfef66fd9ad9ac8c72ab267599a8452f4bd172234a2
4
- data.tar.gz: fa83e70c818fc3b25441e946c1a093a2d9a5f4515ee2bd88522cbafcb8097973
3
+ metadata.gz: ef51643693879cd574d6edd54ef41443defc4825c855d5eed0e07d42e35aa1cd
4
+ data.tar.gz: 2d9acb8d89326185356ee9818ca543e8a6992bac0a00262e06aa9394052978c1
5
5
  SHA512:
6
- metadata.gz: 0ea8ac9585538723d941af6ce9150933669705cf1e3459dcea8989d073d234c4e233e74314a5a682e3111e1290a69671051e847b5ee97970c1edd08293e14bbc
7
- data.tar.gz: 0b253cd035132f786613fbb97440f5d16f48717aedaa7f50865e0e261ce0fc17b64885bea3cdeb5aabe72258c06ed013891d83655bdcf842fc1a261d1b0aa985
6
+ metadata.gz: 761f705abeb6b5deb31591d07d9d9ea0d79d5d6f74367f622842994aa0a57866bd3af9add1089ce2b29d8dd4a9cd110d839036504a1ae0830ac59dbca186ff26
7
+ data.tar.gz: 5df2e3b47cb7ed56a51ff90b1a8d23ea96f74e9fd64a9116d249a266c7a074ef2a4bac09d66202c66a4f631c6f15bcae167df8ae733f43020f0b53886ae3e564
data/Changes.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  [Sidekiq Changes](https://github.com/sidekiq/sidekiq/blob/main/Changes.md) | [Sidekiq Pro Changes](https://github.com/sidekiq/sidekiq/blob/main/Pro-Changes.md) | [Sidekiq Enterprise Changes](https://github.com/sidekiq/sidekiq/blob/main/Ent-Changes.md)
4
4
 
5
+ 8.0.9
6
+ ----------
7
+
8
+ - Implement idle Redis connection reaping, will be activated in 8.1 [#6663]
9
+ - Updated `Sidekiq::Process` API to provide capsule data. The `queues` and `weights`
10
+ data will be removed from Redis in Sidekiq 8.1, as this data can now be found in the
11
+ `capsules` element. [#6295]
12
+ - Restore bulk action buttons on Scheduled, Retry and Dead tabs [#6833, deve1212]
13
+ - Support logging additional job attributes [#6846, bschrag620]
14
+ - Fix display of long job args [#6836]
15
+ - Create development lifecycle (`docs/sdlc.md`) and security (`docs/SECURITY.md`) policy
16
+ documentation for Sidekiq's current workflows
17
+
5
18
  8.0.8
6
19
  ----------
7
20
 
@@ -6,4 +6,4 @@ class <%= class_name %>Job
6
6
  # Do something
7
7
  end
8
8
  end
9
- <% end -%>
9
+ <% end -%>
data/lib/sidekiq/api.rb CHANGED
@@ -1059,9 +1059,9 @@ module Sidekiq
1059
1059
  # 'started_at' => <process start time>,
1060
1060
  # 'pid' => 12345,
1061
1061
  # 'tag' => 'myapp'
1062
- # 'concurrency' => 25,
1063
- # 'queues' => ['default', 'low'],
1064
- # 'busy' => 10,
1062
+ # 'concurrency' => 5,
1063
+ # 'capsules' => {"default" => {"mode" => "weighted", "concurrency" => 5, "weights" => {"default" => 2, "low" => 1}}},
1064
+ # 'busy' => 3,
1065
1065
  # 'beat' => <last heartbeat>,
1066
1066
  # 'identity' => <unique string identifying the process>,
1067
1067
  # 'embedded' => true,
@@ -1089,12 +1089,25 @@ module Sidekiq
1089
1089
  self["identity"]
1090
1090
  end
1091
1091
 
1092
+ # deprecated, use capsules below
1092
1093
  def queues
1093
- self["queues"]
1094
+ capsules.values.flat_map { |x| x["weights"].keys }.uniq
1094
1095
  end
1095
1096
 
1097
+ # deprecated, use capsules below
1096
1098
  def weights
1097
- self["weights"]
1099
+ hash = {}
1100
+ capsules.values.each do |cap|
1101
+ # Note: will lose data if two capsules are processing the same named queue
1102
+ cap["weights"].each_pair do |queue, weight|
1103
+ hash[queue] = weight
1104
+ end
1105
+ end
1106
+ hash
1107
+ end
1108
+
1109
+ def capsules
1110
+ self["capsules"]
1098
1111
  end
1099
1112
 
1100
1113
  def version
@@ -38,6 +38,10 @@ module Sidekiq
38
38
  @mode = :strict
39
39
  end
40
40
 
41
+ def to_h
42
+ {concurrency: concurrency, mode: mode, weights: weights}
43
+ end
44
+
41
45
  def fetcher
42
46
  @fetcher ||= begin
43
47
  instance = (config[:fetch_class] || Sidekiq::BasicFetch).new(self)
@@ -35,7 +35,8 @@ module Sidekiq
35
35
  dead_max_jobs: 10_000,
36
36
  dead_timeout_in_seconds: 180 * 24 * 60 * 60, # 6 months
37
37
  reloader: proc { |&block| block.call },
38
- backtrace_cleaner: ->(backtrace) { backtrace }
38
+ backtrace_cleaner: ->(backtrace) { backtrace },
39
+ logged_job_attributes: ["bid", "tags"]
39
40
  }
40
41
 
41
42
  ERROR_HANDLER = ->(ex, ctx, cfg = Sidekiq.default_configuration) {
@@ -144,11 +145,16 @@ module Sidekiq
144
145
  @redis_config = @redis_config.merge(hash)
145
146
  end
146
147
 
148
+ def reap_idle_redis_connections(timeout = nil)
149
+ self[:reap_connections] = timeout
150
+ end
151
+ alias_method :reap, :reap_idle_redis_connections
152
+
147
153
  def redis_pool
148
154
  Thread.current[:sidekiq_redis_pool] || Thread.current[:sidekiq_capsule]&.redis_pool || local_redis_pool
149
155
  end
150
156
 
151
- private def local_redis_pool
157
+ def local_redis_pool
152
158
  # this is our internal client/housekeeping pool. each capsule has its
153
159
  # own pool for executing threads.
154
160
  @redis ||= new_redis_pool(10, "internal")
data/lib/sidekiq/fetch.rb CHANGED
@@ -7,6 +7,7 @@ require "sidekiq/capsule"
7
7
  module Sidekiq # :nodoc:
8
8
  class BasicFetch
9
9
  include Sidekiq::Component
10
+
10
11
  # We want the fetch operation to timeout every few seconds so the thread
11
12
  # can check if the process is shutting down.
12
13
  TIMEOUT = 2
@@ -55,7 +55,7 @@ module Sidekiq
55
55
  def cancel!
56
56
  return @_cancelled if cancelled?
57
57
 
58
- key = "it-#{jid}"
58
+ key = iteration_key
59
59
  _, result, _ = Sidekiq.redis do |c|
60
60
  c.pipelined do |p|
61
61
  p.hsetnx(key, "cancelled", Time.now.to_i)
@@ -177,7 +177,7 @@ module Sidekiq
177
177
  private
178
178
 
179
179
  def is_cancelled?
180
- @_cancelled = Sidekiq.redis { |c| c.hget("it-#{jid}", "cancelled") }
180
+ @_cancelled = Sidekiq.redis { |c| c.hget(iteration_key, "cancelled") }
181
181
  end
182
182
 
183
183
  def fetch_previous_iteration_state
@@ -29,8 +29,10 @@ module Sidekiq
29
29
  jid: job_hash["jid"],
30
30
  class: job_hash["wrapped"] || job_hash["class"]
31
31
  }
32
- h[:bid] = job_hash["bid"] if job_hash.has_key?("bid")
33
- h[:tags] = job_hash["tags"] if job_hash.has_key?("tags")
32
+
33
+ @config[:logged_job_attributes].each do |attr|
34
+ h[attr.to_sym] = job_hash[attr] if job_hash.has_key?(attr)
35
+ end
34
36
 
35
37
  Thread.current[:sidekiq_context] = h
36
38
  level = job_hash["log_level"]
@@ -142,6 +142,12 @@ module Sidekiq
142
142
  key = identity
143
143
  fails = procd = 0
144
144
 
145
+ idle = config[:reap_connections]
146
+ if idle
147
+ config.capsules.each_value { |cap| cap.local_redis_pool.reap(idle, &:close) }
148
+ config.local_redis_pool.reap(idle, &:close)
149
+ end
150
+
145
151
  begin
146
152
  flush_stats
147
153
 
@@ -252,8 +258,15 @@ module Sidekiq
252
258
  "pid" => ::Process.pid,
253
259
  "tag" => @config[:tag] || "",
254
260
  "concurrency" => @config.total_concurrency,
261
+ "capsules" => @config.capsules.each_with_object({}) { |(name, cap), memo|
262
+ memo[name] = cap.to_h
263
+ },
264
+ #####
265
+ # TODO deprecated, remove in 9.0
266
+ # This data is now found in the `capsules` element above
255
267
  "queues" => @config.capsules.values.flat_map { |cap| cap.queues }.uniq,
256
- "weights" => to_weights,
268
+ "weights" => @config.capsules.values.map(&:weights),
269
+ #####
257
270
  "labels" => @config[:labels].to_a,
258
271
  "identity" => identity,
259
272
  "version" => Sidekiq::VERSION,
@@ -261,10 +274,6 @@ module Sidekiq
261
274
  }
262
275
  end
263
276
 
264
- def to_weights
265
- @config.capsules.values.map(&:weights)
266
- end
267
-
268
277
  def to_json
269
278
  # this data changes infrequently so dump it to a string
270
279
  # now so we don't need to dump it every heartbeat.
@@ -11,6 +11,7 @@ module Sidekiq::Middleware::I18n
11
11
  # to be sent to Sidekiq.
12
12
  class Client
13
13
  include Sidekiq::ClientMiddleware
14
+
14
15
  def call(_jobclass, job, _queue, _redis)
15
16
  job["locale"] ||= I18n.locale
16
17
  yield
@@ -20,6 +21,7 @@ module Sidekiq::Middleware::I18n
20
21
  # Pull the msg locale out and set the current thread to use it.
21
22
  class Server
22
23
  include Sidekiq::ServerMiddleware
24
+
23
25
  def call(_jobclass, job, _queue, &block)
24
26
  I18n.with_locale(job.fetch("locale", I18n.default_locale), &block)
25
27
  end
@@ -49,14 +49,10 @@ class Sidekiq::Monitor
49
49
  puts "---- Processes (#{process_set.size}) ----"
50
50
  process_set.each_with_index do |process, index|
51
51
  # Keep compatibility with legacy versions since we don't want to break sidekiqmon during rolling upgrades or downgrades.
52
- #
53
- # Before:
54
- # ["default", "critical"]
55
- #
56
- # After:
57
- # {"default" => 1, "critical" => 10}
58
52
  queues =
59
- if process["weights"]
53
+ if process["capsules"] # 8.0.6+
54
+ process["capsules"].values.map { |x| x["weights"].keys.join(", ") }
55
+ elsif process["weights"]
60
56
  process["weights"].sort_by { |queue| queue[0] }.map { |capsule| capsule.map { |name, weight| (weight > 0) ? "#{name}: #{weight}" : name }.join(", ") }
61
57
  else
62
58
  process["queues"].sort
@@ -105,7 +101,7 @@ class Sidekiq::Monitor
105
101
  out << line
106
102
  line = " " * pad
107
103
  end
108
- line << value + ", "
104
+ line << value + "; "
109
105
  end
110
106
  out << line[0..-3]
111
107
  out.join("\n")
@@ -11,6 +11,7 @@ module Sidekiq
11
11
  }
12
12
 
13
13
  include Sidekiq::Component
14
+
14
15
  def initialize(config)
15
16
  @config = config
16
17
  @vernier_output_dir = ENV.fetch("VERNIER_OUTPUT_DIR") { Dir.tmpdir }
@@ -6,6 +6,7 @@ module Sidekiq
6
6
  class RingBuffer
7
7
  include Enumerable
8
8
  extend Forwardable
9
+
9
10
  def_delegators :@buf, :[], :each, :size
10
11
 
11
12
  def initialize(size, default = 0)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sidekiq
4
- VERSION = "8.0.8"
4
+ VERSION = "8.0.9"
5
5
  MAJOR = 8
6
6
 
7
7
  def self.gem_version
@@ -318,6 +318,16 @@ module Sidekiq
318
318
  redirect_with_query("#{root_path}scheduled")
319
319
  end
320
320
 
321
+ post "/scheduled/all/delete" do
322
+ Sidekiq::ScheduledSet.new.clear
323
+ redirect "#{root_path}scheduled"
324
+ end
325
+
326
+ post "/scheduled/all/add_to_queue" do
327
+ Sidekiq::ScheduledSet.new.each(&:add_to_queue)
328
+ redirect "#{root_path}scheduled"
329
+ end
330
+
321
331
  get "/dashboard/stats" do
322
332
  redirect "#{root_path}stats"
323
333
  end
@@ -256,14 +256,6 @@ module Sidekiq
256
256
  end
257
257
  end
258
258
 
259
- def busy_weights(capsule_weights)
260
- # backwards compat with 7.0.0, remove in 7.1
261
- cw = [capsule_weights].flatten
262
- cw.map { |hash|
263
- hash.map { |name, weight| (weight > 0) ? +name << ": " << weight.to_s : name }.join(", ")
264
- }.join("; ")
265
- end
266
-
267
259
  def stats
268
260
  @stats ||= Sidekiq::Stats.new
269
261
  end
@@ -22,6 +22,7 @@ function addListeners() {
22
22
  node.addEventListener("click", addDataToggleListeners)
23
23
  })
24
24
 
25
+ initializeBulkToggle();
25
26
  addShiftClickListeners();
26
27
  updateFuzzyTimes();
27
28
  updateNumbers();
@@ -63,6 +64,21 @@ function addDataToggleListeners(event) {
63
64
  full.classList.toggle("is-open");
64
65
  }
65
66
 
67
+ function toggleBulkButtons() {
68
+ const checkboxes = document.querySelectorAll('.select-item-checkbox, .check-all-items');
69
+ const anyChecked = Array.from(checkboxes).some(cb => cb.checked);
70
+ const buttons = document.querySelectorAll('.bulk-action-buttons');
71
+ buttons.forEach(btn => {
72
+ btn.style.display = anyChecked ? 'none' : 'block';
73
+ });
74
+ }
75
+
76
+ function initializeBulkToggle(){
77
+ document.querySelectorAll('.check-all-items, .select-item-checkbox').forEach(cb => {
78
+ cb.addEventListener('change', toggleBulkButtons);
79
+ });
80
+ }
81
+
66
82
  function addShiftClickListeners() {
67
83
  let checkboxes = Array.from(document.querySelectorAll(".shift_clickable"));
68
84
  let lastChecked = null;
@@ -454,6 +454,10 @@ canvas + .table_container {
454
454
  gap: 8px;
455
455
  }
456
456
 
457
+ .bulk-action-buttons.bulk-lead-button {
458
+ margin-inline-start: auto;
459
+ }
460
+
457
461
  table {
458
462
  background-color: var(--color-elevated);
459
463
  border: 1px solid var(--color-border);
@@ -757,3 +761,16 @@ body > footer .nav {
757
761
  padding: 20px;
758
762
  background: var(--color-success);
759
763
  }
764
+
765
+ .args {
766
+ overflow-y: auto;
767
+ max-height: 50px;
768
+ word-break: break-word
769
+ }
770
+ .args-extended {
771
+ overflow-y: scroll;
772
+ max-height: 500px;
773
+ }
774
+
775
+ .toggle { display: none; }
776
+ .toggle.is-open { display: block; }
data/web/locales/ar.yml CHANGED
@@ -3,6 +3,7 @@ ar:
3
3
  LanguageName: العربية
4
4
  Actions: إجراءات
5
5
  AddToQueue: إضافة إلى الرتل
6
+ AddAllToQueue: إضافة الكل إلى الرتل
6
7
  AreYouSure: هل انت متأكد؟
7
8
  AreYouSureDeleteJob: هل أنت متأكد من حذف الوظيفة؟
8
9
  AreYouSureDeleteQueue: هل أنت متأكد من حذف الرتل %{queue}؟
data/web/locales/cs.yml CHANGED
@@ -3,6 +3,7 @@ cs:
3
3
  LanguageName: Čeština
4
4
  Actions: Akce
5
5
  AddToQueue: Přidat do fronty
6
+ AddAllToQueue: Přidat vše do fronty
6
7
  AreYouSure: Jste si jisti?
7
8
  AreYouSureDeleteJob: Jste si jisti, že chcete odstranit tento úkol?
8
9
  AreYouSureDeleteQueue: Jste si jisti, že chcete odstranit frontu %{queue}?
data/web/locales/da.yml CHANGED
@@ -3,6 +3,7 @@ da:
3
3
  LanguageName: Dansk
4
4
  Actions: Handlinger
5
5
  AddToQueue: Tilføj til kø
6
+ AddAllToQueue: Tilføj alle til kø
6
7
  AreYouSure: Er du sikker?
7
8
  AreYouSureDeleteJob: Er du sikker på at du vil slette dette job?
8
9
  AreYouSureDeleteQueue: Er du sikker på at du vil slette %{queue} køen?
data/web/locales/de.yml CHANGED
@@ -3,6 +3,7 @@ de:
3
3
  LanguageName: Deutsch
4
4
  Actions: Aktionen
5
5
  AddToQueue: In Warteschlange einreihen
6
+ AddAllToQueue: Alle in Warteschlange einreihen
6
7
  AreYouSure: Bist du sicher?
7
8
  AreYouSureDeleteJob: Möchtest du diesen Job wirklich löschen?
8
9
  AreYouSureDeleteQueue: Möchtest du %{queue} wirklich löschen?
data/web/locales/el.yml CHANGED
@@ -26,6 +26,7 @@ el: # <---- change this to your locale code
26
26
  ShowAll: Εμφάνιση Όλων
27
27
  Enqueued: Μπήκαν στην στοίβα
28
28
  AddToQueue: Προσθήκη στην στοίβα
29
+ AddAllToQueue: Προσθήκη όλων στην στοίβα
29
30
  AreYouSureDeleteJob: Θέλετε να διαγράψετε αυτή την εργασία;
30
31
  AreYouSureDeleteQueue: Θέλετε να διαγράψετε την στοίβα %{queue}; Αυτό θα διαγράψει όλες τις εργασίες εντός της στοίβας, θα εμφανιστεί ξανά εάν προωθήσετε περισσότερες εργασίες σε αυτήν στο μέλλον.
31
32
  Queues: Στοίβες
data/web/locales/en.yml CHANGED
@@ -3,6 +3,7 @@ en:
3
3
  LanguageName: English
4
4
  Actions: Actions
5
5
  AddToQueue: Add to queue
6
+ AddAllToQueue: Add All to Queue
6
7
  AreYouSure: Are you sure?
7
8
  AreYouSureDeleteJob: Are you sure you want to delete this job?
8
9
  AreYouSureDeleteQueue: Are you sure you want to delete the %{queue} queue? This will delete all jobs within the queue, it will reappear if you push more jobs to it in the future.
data/web/locales/es.yml CHANGED
@@ -3,6 +3,7 @@ es:
3
3
  LanguageName: Español
4
4
  Actions: Acciones
5
5
  AddToQueue: Añadir a la cola
6
+ AddAllToQueue: Añadir todo a la cola
6
7
  AreYouSure: ¿Estás seguro?
7
8
  AreYouSureDeleteJob: ¿Estás seguro de eliminar este trabajo?
8
9
  AreYouSureDeleteQueue: ¿Estás seguro de eliminar la cola %{queue}?
data/web/locales/fa.yml CHANGED
@@ -3,6 +3,7 @@ fa:
3
3
  LanguageName: فارسى
4
4
  Actions: اعمال
5
5
  AddToQueue: افزودن به صف
6
+ AddAllToQueue: افزودن همه به صف
6
7
  AreYouSure: آیا مطمعن هستید?
7
8
  AreYouSureDeleteJob: آیا شما مطمعن هستید از حذف این کار ؟
8
9
  AreYouSureDeleteQueue: ایا شما مطمعنید از حذف %{queue} ?
data/web/locales/fr.yml CHANGED
@@ -3,6 +3,7 @@ fr:
3
3
  LanguageName: Français
4
4
  Actions: Actions
5
5
  AddToQueue: Ajouter à la queue
6
+ AddAllToQueue: Ajouter tout à la queue
6
7
  AreYouSure: Êtes-vous certain ?
7
8
  AreYouSureDeleteJob: Êtes-vous certain de vouloir supprimer cette tâche ?
8
9
  AreYouSureDeleteQueue: Êtes-vous certain de vouloir supprimer la queue %{queue} ?
data/web/locales/gd.yml CHANGED
@@ -3,6 +3,7 @@ gd:
3
3
  LanguageName: Gaeilge
4
4
  Actions: Gnìomhan
5
5
  AddToQueue: Cuir ris a’ chiutha
6
+ AddAllToQueue: Cuir a h-uile ris a’ chiutha
6
7
  AreYouSure: A bheil thu cinnteach?
7
8
  AreYouSureDeleteJob: A bheil thu cinnteach gu bheil thu airson an obair seo a sguabadh às?
8
9
  AreYouSureDeleteQueue: A bheil thu cinnteach gu bheil thu airson ciutha %{queue} a sguabadh às? Sguabaidh seo às gach obair sa chiutha seo, nochdaidh e a-rithist nuair a phutas tu barrachd obraichean dha an uairsin.
data/web/locales/he.yml CHANGED
@@ -3,6 +3,7 @@ he:
3
3
  LanguageName: עברית
4
4
  Actions: פעולות
5
5
  AddToQueue: הוסף לתור
6
+ AddAllToQueue: הוסף הכל לתור
6
7
  AreYouSure: אתם בטוחים?
7
8
  AreYouSureDeleteJob: האם אתם בטוחים שברצונכם למחוק את העבודה הזאת?
8
9
  AreYouSureDeleteQueue: האם אתם בטוחים שברצונכם למחוק את התור %{queue}?
data/web/locales/hi.yml CHANGED
@@ -3,6 +3,7 @@ hi:
3
3
  LanguageName: हिन्दी
4
4
  Actions: कार्रवाई
5
5
  AddToQueue: कतार मे जोड़ें
6
+ AddAllToQueue: सभी को कतार मे जोड़ें
6
7
  AreYouSure: क्या आपको यकीन है?
7
8
  AreYouSureDeleteJob: क्या आप इस कार्य को हटाना चाहते है?
8
9
  AreYouSureDeleteQueue: क्या आप %{queue} कतार को हटाना चाहते है?
data/web/locales/it.yml CHANGED
@@ -3,6 +3,7 @@ it:
3
3
  LanguageName: Italiano
4
4
  Actions: Azioni
5
5
  AddToQueue: Aggiungi alla coda
6
+ AddAllToQueue: Aggiungi tutto alla coda
6
7
  AreYouSure: Sei sicuro?
7
8
  AreYouSureDeleteJob: Sei sicuro di voler cancellare questo lavoro?
8
9
  AreYouSureDeleteQueue: Sei sicuro di voler cancellare la coda %{queue}?
data/web/locales/ja.yml CHANGED
@@ -3,6 +3,7 @@ ja:
3
3
  LanguageName: 日本語
4
4
  Actions: アクション
5
5
  AddToQueue: キューに追加
6
+ AddAllToQueue: すべてをキューに追加
6
7
  AreYouSure: よろしいですか?
7
8
  AreYouSureDeleteJob: このジョブを削除しますか?
8
9
  AreYouSureDeleteQueue: この %{queue} キューを削除しますか?
data/web/locales/ko.yml CHANGED
@@ -3,6 +3,7 @@ ko:
3
3
  LanguageName: 한국어
4
4
  Actions: 동작
5
5
  AddToQueue: 큐 추가
6
+ AddAllToQueue: 모든 것을 큐에 추가
6
7
  AreYouSure: 정말입니까?
7
8
  AreYouSureDeleteJob: 이 작업을 삭제하시겠습니까?
8
9
  AreYouSureDeleteQueue: 이 %{queue} 큐를 삭제하시겠습니까?
data/web/locales/lt.yml CHANGED
@@ -3,6 +3,7 @@ lt:
3
3
  LanguageName: Lietuvių
4
4
  Actions: Veiksmai
5
5
  AddToQueue: Pridėti į eilę
6
+ AddAllToQueue: Pridėti viską į eilę
6
7
  AreYouSure: Ar jūs įsitikinę?
7
8
  AreYouSureDeleteJob: Ar tikrai norite pašalinti šį darbą?
8
9
  AreYouSureDeleteQueue: Ar tikrai norite pašalinti šią eilę %{queue}?
data/web/locales/nb.yml CHANGED
@@ -3,6 +3,7 @@ nb:
3
3
  LanguageName: Norsk
4
4
  Actions: Handlinger
5
5
  AddToQueue: Legg til i kø
6
+ AddAllToQueue: Legg alt til i kø
6
7
  AreYouSure: Er du sikker?
7
8
  AreYouSureDeleteJob: Er du sikker på at du vil slette denne jobben?
8
9
  AreYouSureDeleteQueue: Er du sikker på at du vil slette køen %{queue}?
data/web/locales/nl.yml CHANGED
@@ -3,6 +3,7 @@ nl:
3
3
  LanguageName: Nederlands
4
4
  Actions: Acties
5
5
  AddToQueue: Toevoegen aan wachtrij
6
+ AddAllToQueue: Alles toevoegen aan wachtrij
6
7
  AreYouSure: Weet u het zeker?
7
8
  AreYouSureDeleteJob: Weet u zeker dat u deze taak wilt verwijderen?
8
9
  AreYouSureDeleteQueue: Weet u zeker dat u wachtrij %{queue} wilt verwijderen?
data/web/locales/pl.yml CHANGED
@@ -3,6 +3,7 @@ pl:
3
3
  LanguageName: Polski
4
4
  Actions: Akcje
5
5
  AddToQueue: dodaj do kolejki
6
+ AddAllToQueue: dodaj wszystko do kolejki
6
7
  AreYouSure: Na pewno?
7
8
  AreYouSureDeleteJob: Czy na pewno usunąć to zadanie?
8
9
  AreYouSureDeleteQueue: Czy na pewno usunąć kolejkę %{queue}?
@@ -2,6 +2,7 @@
2
2
  LanguageName: Português (Brasil)
3
3
  Actions: Ações
4
4
  AddToQueue: Adicionar à fila
5
+ AddAllToQueue: Adicionar tudo à fila
5
6
  AreYouSure: Tem certeza?
6
7
  AreYouSureDeleteJob: Deseja deletar esta tarefa?
7
8
  AreYouSureDeleteQueue: Deseja deletar a fila %{queue}? Isso irá deletar todas as tarefas desta fila.
data/web/locales/pt.yml CHANGED
@@ -3,6 +3,7 @@ pt:
3
3
  LanguageName: Português
4
4
  Actions: Acções
5
5
  AddToQueue: Adicionar à fila
6
+ AddAllToQueue: Adicionar tudo à fila
6
7
  AreYouSure: Tem a certeza?
7
8
  AreYouSureDeleteJob: Tem a certeza que deseja eliminar esta tarefa?
8
9
  AreYouSureDeleteQueue: Tem a certeza que deseja eliminar a fila %{queue}?
data/web/locales/ru.yml CHANGED
@@ -3,6 +3,7 @@ ru:
3
3
  LanguageName: Русский
4
4
  Actions: Действия
5
5
  AddToQueue: Добавить в очередь
6
+ AddAllToQueue: Добавить все в очередь
6
7
  AreYouSure: Вы уверены?
7
8
  AreYouSureDeleteJob: Вы уверены, что хотите удалить эту задачу?
8
9
  AreYouSureDeleteQueue: Вы уверены, что хотите удалить очередь %{queue}?
data/web/locales/sv.yml CHANGED
@@ -3,6 +3,7 @@ sv:
3
3
  LanguageName: Svenska
4
4
  Actions: Åtgärder
5
5
  AddToQueue: Lägg till i kö
6
+ AddAllToQueue: Lägg till allt i kö
6
7
  AreYouSure: Är du säker?
7
8
  AreYouSureDeleteJob: Är du säker på att du vill ta bort detta jobb?
8
9
  AreYouSureDeleteQueue: Är du säker på att du vill ta bort kön %{queue}?
data/web/locales/ta.yml CHANGED
@@ -3,6 +3,7 @@ ta:
3
3
  LanguageName: தமிழ்
4
4
  Actions: செயல்கள்
5
5
  AddToQueue: வரிசையில் சேர்
6
+ AddAllToQueue: அனைத்தையும் வரிசையில் சேர்
6
7
  AreYouSure: நீங்கள் உறுதியாக இருக்கிறீர்களா?
7
8
  AreYouSureDeleteJob: நீ இந்த வேலையை நீக்க வேண்டும் என்று உறுதியாக இருக்கிறீர்களா?
8
9
  AreYouSureDeleteQueue: நீங்கள் %{queue} வரிசையில் நீக்க வேண்டும் என்பதில் உறுதியாக இருக்கிறீர்களா?
data/web/locales/tr.yml CHANGED
@@ -3,6 +3,7 @@ tr:
3
3
  LanguageName: Türkçe
4
4
  Actions: Eylemler
5
5
  AddToQueue: Kuyruğa ekle
6
+ AddAllToQueue: Hepsini kuyruğa ekle
6
7
  AreYouSure: Emin misiniz?
7
8
  AreYouSureDeleteJob: Bu işi silmek istediğinizden emin misiniz?
8
9
  AreYouSureDeleteQueue: "%{queue} kuyruğunu silmek istediğinizden emin misiniz?"
data/web/locales/uk.yml CHANGED
@@ -3,6 +3,7 @@ uk:
3
3
  LanguageName: Українська
4
4
  Actions: Дії
5
5
  AddToQueue: Додати до черги
6
+ AddAllToQueue: Додати все до черги
6
7
  AreYouSure: Ви впевнені?
7
8
  AreYouSureDeleteJob: Ви впевнені у тому, що хочете видалити задачу?
8
9
  AreYouSureDeleteQueue: Ви впевнені у тому, що хочете видалити чергу %{queue}?
data/web/locales/ur.yml CHANGED
@@ -3,6 +3,7 @@ ur:
3
3
  LanguageName: اردو
4
4
  Actions: ﻋﻮاﻣﻞ
5
5
  AddToQueue: ﻗﻄﺎﺭ ميں شامل کريں
6
+ AddAllToQueue: سب کو ﻗﻄﺎﺭ ميں شامل کريں
6
7
  AreYouSure: کيا یقین ؟
7
8
  AreYouSureDeleteJob: کيا آپ یقین جاب حتم کرنا چاھتے ہيں ؟
8
9
  AreYouSureDeleteQueue: کيا آپ یقین قطار حتم کرنا چاھتے ہيں ؟
data/web/locales/vi.yml CHANGED
@@ -3,6 +3,7 @@ vi:
3
3
  LanguageName: Tiếng Việt
4
4
  Actions: Những hành động
5
5
  AddToQueue: Thêm vào hàng đợi
6
+ AddAllToQueue: Thêm tất cả vào hàng đợi
6
7
  AreYouSure: Bạn chắc chứ?
7
8
  AreYouSureDeleteJob: Bạn có chắc là muốn xóa tác vụ này?
8
9
  AreYouSureDeleteQueue: Bạn có chắc là muốn xóa %{queue} này?
@@ -3,6 +3,7 @@ zh-CN: # <---- change this to your locale code
3
3
  LanguageName: 中文
4
4
  Actions: 操作
5
5
  AddToQueue: 添加至队列
6
+ AddAllToQueue: 添加所有至队列
6
7
  AreYouSure: 你确定?
7
8
  AreYouSureDeleteJob: 你确定要删除这个任务么?
8
9
  AreYouSureDeleteQueue: 你确定要删除 %{queue} 队列吗?这将删除当前队列中的所有任务,当新的任务添加到该队列时,它会重新出现。
@@ -27,6 +27,7 @@ zh-TW: # <---- change this to your locale code
27
27
  CurrentMessagesInQueue: 目前在<span class='title'>%{queue}</span>的工作
28
28
  Delete: 刪除
29
29
  AddToQueue: 增加至佇列
30
+ AddAllToQueue: 增加所有至佇列
30
31
  AreYouSureDeleteJob: 確定要刪除這個工作嗎?
31
32
  AreYouSureDeleteQueue: 確定要刪除%{queue}佇列?這會刪除佇列裡的所有工作,佇列將會在有新工作時重新出現。
32
33
  Queues: 佇列
@@ -11,7 +11,7 @@
11
11
  <p id="serverUtcTime"><%= server_utc_time %></p>
12
12
  </li>
13
13
  <li>
14
- <p><a rel=help href="https://github.com/sidekiq/sidekiq/wiki">docs</a></p>
14
+ <p><a rel="help" href="https://github.com/sidekiq/sidekiq/wiki">docs</a></p>
15
15
  </li>
16
16
  <li>
17
17
  <form id="locale-form" action="<%= root_path %>change_locale" method="post">
@@ -1,7 +1,7 @@
1
1
  <div class="filter">
2
2
  <form id="metrics-form" class="form-inline" action="<%= path %>" method="get">
3
3
  <label for="substr"><%= t('Filter') %></label>
4
- <input id="class-filter" class="form-control" type="text" name="substr" placeholder="<%= t('Name') %>" value="<%= h url_params("substr") %>">
4
+ <input id="class-filter" class="form-control" type="text" name="substr" placeholder="<%= t('Name') %>" value="<%= h url_params("substr") %>" autocomplete="off">
5
5
  <select id="period-selector" class="form-control" name="period">
6
6
  <% periods.each_key do |code| %>
7
7
  <% if code == period %>
@@ -24,4 +24,3 @@
24
24
  </ul>
25
25
  </div>
26
26
  <% end %>
27
-
@@ -1,4 +1,4 @@
1
1
  <% if pollable? %>
2
- <a class="btn live-poll live-poll-start btn-primary"><%= t('LivePoll') %></a>
3
- <a class="btn live-poll live-poll-stop btn-danger"><%= t('StopPolling') %></a>
2
+ <a href="#" class="btn live-poll live-poll-start btn-primary"><%= t('LivePoll') %></a>
3
+ <a href="#" class="btn live-poll live-poll-stop btn-danger"><%= t('StopPolling') %></a>
4
4
  <% end %>
data/web/views/busy.erb CHANGED
@@ -33,8 +33,8 @@
33
33
  <form method="POST" class="filter warning-messages">
34
34
  <%= csrf_tag %>
35
35
  <div class="btn-group pull-right flip">
36
- <input class="btn btn-warn" type="submit" name="quiet" value="<%= t('QuietAll') %>" data-confirm="<%= t('AreYouSure') %>"/>
37
- <input class="btn btn-danger" type="submit" name="stop" value="<%= t('StopAll') %>" data-confirm="<%= t('AreYouSure') %>"/>
36
+ <input class="btn btn-warn" type="submit" name="quiet" value="<%= t('QuietAll') %>" data-confirm="<%= t('AreYouSure') %>">
37
+ <input class="btn btn-danger" type="submit" name="stop" value="<%= t('StopAll') %>" data-confirm="<%= t('AreYouSure') %>">
38
38
  </div>
39
39
  </form>
40
40
  </header>
@@ -69,11 +69,7 @@
69
69
  <% end %>
70
70
  <br>
71
71
  <b><%= "#{t('Queues')}: " %></b>
72
- <% if process.weights %>
73
- <%= busy_weights(process.weights) %>
74
- <% else %>
75
- <%= process.queues.sort.join(", ") %>
76
- <% end %>
72
+ <%= process.queues.sort.join(", ") %>
77
73
  <% if process.version != Sidekiq::VERSION %>
78
74
  <br>
79
75
  <b><%= "#{t('Version')}: " %></b>
@@ -92,7 +88,7 @@
92
88
  <% unless process.embedded? %>
93
89
  <form method="POST">
94
90
  <%= csrf_tag %>
95
- <input type="hidden" name="identity" value="<%= process['identity'] %>"/>
91
+ <input type="hidden" name="identity" value="<%= process['identity'] %>">
96
92
 
97
93
  <div class="btn-group">
98
94
  <% unless process.stopping? %><button class="btn btn-warn" type="submit" name="quiet" value="1"><%= t('Quiet') %></button><% end %>
@@ -9,13 +9,13 @@
9
9
  <div class="filter interval-slider">
10
10
  <span class="interval-slider-label"><%= t('PollingInterval') %>:</span>
11
11
  <span id="sldr-text" class="current-interval">5 s</span>
12
- <br/>
13
- <input id="sldr" aria-label="<%= t("PollingIntervalMilliseconds") %>" role="slider" type="range" min="2000" max="20000" step="1000" value="5000"/>
12
+ <br>
13
+ <input id="sldr" aria-label="<%= t("PollingIntervalMilliseconds") %>" role="slider" type="range" min="2000" max="20000" step="1000" value="5000" autocomplete="off">
14
14
  </div>
15
15
  </header>
16
16
 
17
17
  <div class="chart">
18
- <span id="sr-last-dashboard-update-template" hidden="hidden"><%= t("LastDashboardUpdateTemplateLiteral") %></span>
18
+ <span id="sr-last-dashboard-update-template" hidden><%= t("LastDashboardUpdateTemplateLiteral") %></span>
19
19
  <span id="sr-last-dashboard-update" class="sr-only" role="status"></span>
20
20
 
21
21
  <canvas id="realtime-chart">
data/web/views/dead.erb CHANGED
@@ -32,7 +32,7 @@
32
32
  <form action="<%= root_path %>morgue/<%= job_params(@dead, @dead.score) %>" method="post">
33
33
  <%= csrf_tag %>
34
34
  <a class="btn btn-default" href="<%= root_path %>morgue"><%= t('GoBack') %></a>
35
- <input class="btn btn-primary" type="submit" name="retry" value="<%= t('RetryNow') %>" />
36
- <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>" />
35
+ <input class="btn btn-primary" type="submit" name="retry" value="<%= t('RetryNow') %>">
36
+ <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>">
37
37
  </form>
38
- </section>
38
+ </section>
@@ -1,6 +1,6 @@
1
1
  <div class="filter">
2
- <form role="search" method="get" class="form-inline" action='<%= root_path %><%= which %>'>
2
+ <form role="search" method="get" class="form-inline" action="<%= root_path %><%= which %>">
3
3
  <label for="substr"><%= t('Filter') %></label>
4
- <input class="form-control" type="search" name="substr" value="<%= h url_params("substr") %>" placeholder="<%= t('AnyJobContent') %>"/>
4
+ <input class="form-control" type="search" name="substr" value="<%= h url_params("substr") %>" placeholder="<%= t('AnyJobContent') %>" autocomplete="off">
5
5
  </form>
6
6
  </div>
data/web/views/layout.erb CHANGED
@@ -2,14 +2,14 @@
2
2
  <html dir="<%= text_direction %>" lang="<%= locale %>">
3
3
  <head>
4
4
  <title><%= environment_title_prefix %><%= Sidekiq::NAME %></title>
5
- <meta charset="utf-8"/>
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0"/>
7
- <meta name="color-scheme" content="light dark"/>
8
- <link href="<%= root_path %>stylesheets/style.css" media="screen" rel="stylesheet" type="text/css" nonce="<%= csp_nonce %>"/>
9
- <link rel="apple-touch-icon" href="<%= root_path %>images/apple-touch-icon.png"/>
10
- <link rel="shortcut icon" type="image/ico" href="<%= root_path %>images/favicon.ico"/>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
7
+ <meta name="color-scheme" content="light dark">
8
+ <link href="<%= root_path %>stylesheets/style.css" media="screen" rel="stylesheet" type="text/css" nonce="<%= csp_nonce %>">
9
+ <link rel="apple-touch-icon" href="<%= root_path %>images/apple-touch-icon.png">
10
+ <link rel="shortcut icon" type="image/ico" href="<%= root_path %>images/favicon.ico">
11
11
  <script type="text/javascript" src="<%= root_path %>javascripts/application.js" nonce="<%= csp_nonce %>"></script>
12
- <meta name="google" content="notranslate"/>
12
+ <meta name="google" content="notranslate">
13
13
  <%= display_custom_head %>
14
14
  </head>
15
15
  <body class="admin" data-locale="<%= locale %>">
@@ -59,7 +59,7 @@
59
59
  class="metrics-swatch"
60
60
  value="<%= kls %>"
61
61
  <%= visible_kls.include?(kls) ? 'checked' : '' %>
62
- />
62
+ >
63
63
  <code><a href="<%= root_path %>metrics/<%= kls %>?period=<%= @period %>"><%= kls %></a></code>
64
64
  </div>
65
65
  </td>
@@ -70,15 +70,15 @@
70
70
  </tr>
71
71
  <% end %>
72
72
  <% else %>
73
- <tr><td colspan=5><%= t("NoDataFound") %></td></tr>
73
+ <tr><td colspan="5"><%= t("NoDataFound") %></td></tr>
74
74
  <% end %>
75
75
  </tbody>
76
76
  </table>
77
77
  </div>
78
78
 
79
- <% if job_results.any? %>
80
- <p><small>Data from <%= @query_result.starts_at %> to <%= @query_result.ends_at %>.<% if @period == "1h" %> Auto-refreshing every 60 seconds.<% end %></small></p>
81
- <% end %>
82
-
79
+ <% if job_results.any? %>
80
+ <p><small>Data from <%= @query_result.starts_at %> to <%= @query_result.ends_at %>.<% if @period == "1h" %> Auto-refreshing every 60 seconds.<% end %></small></p>
81
+ <% end %>
83
82
  </section>
84
- <%= script_tag "javascripts/metrics.js" %>
83
+
84
+ <%= script_tag "javascripts/metrics.js" %>
data/web/views/morgue.erb CHANGED
@@ -16,7 +16,7 @@
16
16
  <tr>
17
17
  <th>
18
18
  <label>
19
- <input type="checkbox" class="check_all" />
19
+ <input type="checkbox" class="check_all check-all-items">
20
20
  </label>
21
21
  </th>
22
22
  <th><%= t('LastRetry') %></th>
@@ -30,7 +30,7 @@
30
30
  <tr>
31
31
  <td>
32
32
  <label>
33
- <input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' class='shift_clickable' />
33
+ <input type="checkbox" name="key[]" value="<%= job_params(entry.item, entry.score) %>" class="shift_clickable select-item-checkbox">
34
34
  </label>
35
35
  </td>
36
36
  <td>
@@ -55,8 +55,12 @@
55
55
  <% end %>
56
56
  </table>
57
57
  </div>
58
- <input class="btn btn-primary pull-left flip" type="submit" name="retry" value="<%= t('RetryNow') %>" />
59
- <input class="btn btn-danger pull-left flip" type="submit" name="delete" value="<%= t('Delete') %>" />
58
+ <div class="buttons-row">
59
+ <input class="btn btn-primary pull-left flip" type="submit" name="retry" value="<%= t('RetryNow') %>">
60
+ <input class="btn btn-danger pull-left flip" type="submit" name="delete" value="<%= t('Delete') %>">
61
+ <button class="btn btn-primary bulk-action-buttons bulk-lead-button" type="submit" name="action" value="retry_all" formaction="<%= "#{root_path}morgue/all/retry" %>"><%= t('RetryAll') %></button>
62
+ <button class="btn btn-danger bulk-action-buttons" type="submit" name="action" value="delete_all" formaction="<%= "#{root_path}morgue/all/delete" %>"><%= t('DeleteAll') %></button>
63
+ </div>
60
64
  </form>
61
65
 
62
66
  <% else %>
data/web/views/queue.erb CHANGED
@@ -45,8 +45,8 @@
45
45
  <td>
46
46
  <form action="<%= root_path %>queues/<%= CGI.escape(@name) %>/delete" method="post">
47
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') %>" />
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
50
  </form>
51
51
  </td>
52
52
  </tr>
data/web/views/queues.erb CHANGED
@@ -26,15 +26,15 @@
26
26
  <%= number_with_delimiter(queue_latency, precision: 2) %>
27
27
  </td>
28
28
  <td class="delete-confirm">
29
- <form action="<%=root_path %>queues/<%= CGI.escape(queue.name) %>" method="post">
29
+ <form action="<%= root_path %>queues/<%= CGI.escape(queue.name) %>" method="post">
30
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)) %>" />
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
32
 
33
33
  <% if Sidekiq.pro? %>
34
34
  <% if queue.paused? %>
35
- <input class="btn btn-danger" type="submit" name="unpause" value="<%= t('Unpause') %>" />
35
+ <input class="btn btn-danger" type="submit" name="unpause" value="<%= t('Unpause') %>">
36
36
  <% else %>
37
- <input class="btn btn-danger" type="submit" name="pause" value="<%= t('Pause') %>" />
37
+ <input class="btn btn-danger" type="submit" name="pause" value="<%= t('Pause') %>">
38
38
  <% end %>
39
39
  <% end %>
40
40
  </form>
@@ -16,7 +16,7 @@
16
16
  <tr>
17
17
  <th>
18
18
  <label>
19
- <input type="checkbox" class="check_all" />
19
+ <input type="checkbox" class="check_all check-all-items">
20
20
  </label>
21
21
  </th>
22
22
  <th><%= t('NextRetry') %></th>
@@ -31,7 +31,7 @@
31
31
  <tr>
32
32
  <td>
33
33
  <label>
34
- <input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' class='shift_clickable' />
34
+ <input type="checkbox" name="key[]" value="<%= job_params(entry.item, entry.score) %>" class="shift_clickable select-item-checkbox">
35
35
  </label>
36
36
  </td>
37
37
  <td>
@@ -58,9 +58,13 @@
58
58
  </table>
59
59
  </div>
60
60
  <div class="buttons-row">
61
- <input class="btn btn-primary" type="submit" name="retry" value="<%= t('RetryNow') %>" />
62
- <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>" />
63
- <input class="btn btn-danger" type="submit" name="kill" value="<%= t('Kill') %>" />
61
+ <input class="btn btn-primary" type="submit" name="retry" value="<%= t('RetryNow') %>">
62
+ <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>">
63
+ <input class="btn btn-danger" type="submit" name="kill" value="<%= t('Kill') %>">
64
+ <!-- Retry all -->
65
+ <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>
66
+ <button class="btn btn-danger bulk-action-buttons" type="submit" name="action" value="delete_all" formaction="<%= "#{root_path}retries/all/delete" %>"><%= t('DeleteAll') %></button>
67
+ <button class="btn btn-danger bulk-action-buttons" type="submit" name="action" value="kill_all" formaction="<%= "#{root_path}retries/all/kill" %>"><%= t('KillAll') %></button>
64
68
  </div>
65
69
  </form>
66
70
 
data/web/views/retry.erb CHANGED
@@ -33,7 +33,7 @@
33
33
  <form action="<%= root_path %>retries/<%= job_params(@retry, @retry.score) %>" method="post">
34
34
  <%= csrf_tag %>
35
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') %>" />
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
38
  </form>
39
39
  </section>
@@ -16,7 +16,7 @@
16
16
  <tr>
17
17
  <th>
18
18
  <label>
19
- <input type="checkbox" class="check_all" />
19
+ <input type="checkbox" class="check_all check-all-items">
20
20
  </label>
21
21
  </th>
22
22
  <th><%= t('When') %></th>
@@ -29,7 +29,7 @@
29
29
  <tr>
30
30
  <td>
31
31
  <label>
32
- <input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' class='shift_clickable' />
32
+ <input type="checkbox" name="key[]" value="<%= job_params(entry.item, entry.score) %>" class="shift_clickable select-item-checkbox">
33
33
  </label>
34
34
  </td>
35
35
  <td>
@@ -51,8 +51,12 @@
51
51
  <% end %>
52
52
  </table>
53
53
  </div>
54
- <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>" />
55
- <input class="btn btn-danger" type="submit" name="add_to_queue" value="<%= t('AddToQueue') %>" />
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" %>"><%= 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>
56
60
  </form>
57
61
  <% else %>
58
62
  <div class="alert alert-success"><%= t('NoScheduledFound') %></div>
@@ -3,6 +3,6 @@
3
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,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.8
4
+ version: 8.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Perham