sidekiq 7.0.2 → 7.0.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sidekiq might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9456d6050f916f7777b11ff32528c3c872fefa5a4e7afa32773e030ca9b6df7e
4
- data.tar.gz: 501ca5569b669bb5c5eaf80d4ae3c1c8cc20e7c51235cfc72abcb2d3b25bc6ea
3
+ metadata.gz: 93289a9aed52b658b609cb6de99fefe182003d71bcc0102fa82fa33d53a70f5b
4
+ data.tar.gz: 1ca1b7ff222845a4a6f23ea00d77826c248a8e45db176eb9f2194afef70dface
5
5
  SHA512:
6
- metadata.gz: 0267fbbfbf028e4f9c091e28c31b4b18de6c795e32359c38cf2f09da7c2bc43654c1b3482443befbaada0715fdb591ae74037bed99069bd26db5fca961befec1
7
- data.tar.gz: f2a5275b2fa2a47e1aa0b6d5a5009cc373dddd64f0226d481f575079fee6a91ebc8ddacfc96536085df9bae685bf45fd42660eecf656d07521033b921f8125ed
6
+ metadata.gz: 680961f7df970445211487780291ecc1adb738fa834126428bbb814b0b7b03e912889c66020079f24aaf548a023c9621e601631d66dd6f7f467e9f8ac5085fee
7
+ data.tar.gz: cdd1e337afbba5aaea110227e8b91e1b965e05c6ff9a5b7f5202850e3725d4d6959137dd8f47075057230451e394dca3ca0cbe5c7d70ef33ac6284a21e7fbea4
data/Changes.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  [Sidekiq Changes](https://github.com/mperham/sidekiq/blob/main/Changes.md) | [Sidekiq Pro Changes](https://github.com/mperham/sidekiq/blob/main/Pro-Changes.md) | [Sidekiq Enterprise Changes](https://github.com/mperham/sidekiq/blob/main/Ent-Changes.md)
4
4
 
5
+ 7.0.3
6
+ ----------
7
+
8
+ - Don't warn about memory policy on Redis Enterprise [#5712]
9
+ - Don't allow Quiet/Stop on embedded Sidekiq instances [#5716]
10
+ - Fix `size: X` for configuring the default Redis pool size [#5702]
11
+ - Improve the display of queue weights on Busy page [#5642]
12
+ - Freeze CurrentAttributes on a job once initially set [#5692]
13
+
5
14
  7.0.2
6
15
  ----------
7
16
 
data/lib/sidekiq/api.rb CHANGED
@@ -828,6 +828,24 @@ module Sidekiq
828
828
  class ProcessSet
829
829
  include Enumerable
830
830
 
831
+ def self.[](identity)
832
+ exists, (info, busy, beat, quiet, rss, rtt_us) = Sidekiq.redis { |conn|
833
+ conn.multi { |transaction|
834
+ transaction.sismember("processes", identity)
835
+ transaction.hmget(identity, "info", "busy", "beat", "quiet", "rss", "rtt_us")
836
+ }
837
+ }
838
+
839
+ return nil if exists == 0 || info.nil?
840
+
841
+ hash = Sidekiq.load_json(info)
842
+ Process.new(hash.merge("busy" => busy.to_i,
843
+ "beat" => beat.to_f,
844
+ "quiet" => quiet,
845
+ "rss" => rss.to_i,
846
+ "rtt_us" => rtt_us.to_i))
847
+ end
848
+
831
849
  # :nodoc:
832
850
  # @api private
833
851
  def initialize(clean_plz = true)
@@ -876,7 +894,7 @@ module Sidekiq
876
894
  end
877
895
  }
878
896
 
879
- result.each do |info, busy, at_s, quiet, rss, rtt|
897
+ result.each do |info, busy, beat, quiet, rss, rtt_us|
880
898
  # If a process is stopped between when we query Redis for `procs` and
881
899
  # when we query for `result`, we will have an item in `result` that is
882
900
  # composed of `nil` values.
@@ -884,10 +902,10 @@ module Sidekiq
884
902
 
885
903
  hash = Sidekiq.load_json(info)
886
904
  yield Process.new(hash.merge("busy" => busy.to_i,
887
- "beat" => at_s.to_f,
905
+ "beat" => beat.to_f,
888
906
  "quiet" => quiet,
889
907
  "rss" => rss.to_i,
890
- "rtt_us" => rtt.to_i))
908
+ "rtt_us" => rtt_us.to_i))
891
909
  end
892
910
  end
893
911
 
@@ -943,6 +961,7 @@ module Sidekiq
943
961
  # 'busy' => 10,
944
962
  # 'beat' => <last heartbeat>,
945
963
  # 'identity' => <unique string identifying the process>,
964
+ # 'embedded' => true,
946
965
  # }
947
966
  class Process
948
967
  # :nodoc:
@@ -979,11 +998,17 @@ module Sidekiq
979
998
  self["version"]
980
999
  end
981
1000
 
1001
+ def embedded?
1002
+ self["embedded"]
1003
+ end
1004
+
982
1005
  # Signal this process to stop processing new jobs.
983
1006
  # It will continue to execute jobs it has already fetched.
984
1007
  # This method is *asynchronous* and it can take 5-10
985
1008
  # seconds for the process to quiet.
986
1009
  def quiet!
1010
+ raise "Can't quiet an embedded process" if embedded?
1011
+
987
1012
  signal("TSTP")
988
1013
  end
989
1014
 
@@ -992,6 +1017,8 @@ module Sidekiq
992
1017
  # This method is *asynchronous* and it can take 5-10
993
1018
  # seconds for the process to start shutting down.
994
1019
  def stop!
1020
+ raise "Can't stop an embedded process" if embedded?
1021
+
995
1022
  signal("TERM")
996
1023
  end
997
1024
 
@@ -21,12 +21,15 @@ module Sidekiq
21
21
  attr_reader :name
22
22
  attr_reader :queues
23
23
  attr_accessor :concurrency
24
+ attr_reader :mode
25
+ attr_reader :weights
24
26
 
25
27
  def initialize(name, config)
26
28
  @name = name
27
29
  @config = config
28
30
  @queues = ["default"]
29
31
  @concurrency = config[:concurrency]
32
+ @mode = :strict
30
33
  end
31
34
 
32
35
  def fetcher
@@ -41,15 +44,28 @@ module Sidekiq
41
44
  fetcher&.bulk_requeue([])
42
45
  end
43
46
 
47
+ # Sidekiq checks queues in three modes:
48
+ # - :strict - all queues have 0 weight and are checked strictly in order
49
+ # - :weighted - queues have arbitrary weight between 1 and N
50
+ # - :random - all queues have weight of 1
44
51
  def queues=(val)
52
+ @weights = {}
45
53
  @queues = Array(val).each_with_object([]) do |qstr, memo|
46
54
  arr = qstr
47
55
  arr = qstr.split(",") if qstr.is_a?(String)
48
56
  name, weight = arr
57
+ @weights[name] = weight.to_i
49
58
  [weight.to_i, 1].max.times do
50
59
  memo << name
51
60
  end
52
61
  end
62
+ @mode = if @weights.values.all?(&:zero?)
63
+ :strict
64
+ elsif @weights.values.all? { |x| x == 1 }
65
+ :random
66
+ else
67
+ :weighted
68
+ end
53
69
  end
54
70
 
55
71
  # Allow the middleware to be different per-capsule.
data/lib/sidekiq/cli.rb CHANGED
@@ -77,7 +77,8 @@ module Sidekiq # :nodoc:
77
77
  raise "You are connecting to Redis #{ver}, Sidekiq requires Redis 6.2.0 or greater" if ver < Gem::Version.new("6.2.0")
78
78
 
79
79
  maxmemory_policy = info["maxmemory_policy"]
80
- if maxmemory_policy != "noeviction"
80
+ if maxmemory_policy != "noeviction" && maxmemory_policy != ""
81
+ # Redis Enterprise Cloud returns "" for their policy 😳
81
82
  logger.warn <<~EOM
82
83
 
83
84
 
@@ -129,7 +129,7 @@ module Sidekiq
129
129
  def new_redis_pool(size, name = "unset")
130
130
  # connection pool is lazy, it will not create connections unless you actually need them
131
131
  # so don't be skimpy!
132
- RedisConnection.create(@redis_config.merge(size: size, logger: logger, pool_name: name))
132
+ RedisConnection.create({size: size, logger: logger, pool_name: name}.merge(@redis_config))
133
133
  end
134
134
 
135
135
  def redis_info
data/lib/sidekiq/fetch.rb CHANGED
@@ -30,11 +30,9 @@ module Sidekiq # :nodoc:
30
30
  def initialize(cap)
31
31
  raise ArgumentError, "missing queue list" unless cap.queues
32
32
  @config = cap
33
- @strictly_ordered_queues = (config.queues.size == config.queues.uniq.size)
33
+ @strictly_ordered_queues = cap.mode == :strict
34
34
  @queues = config.queues.map { |q| "queue:#{q}" }
35
- if @strictly_ordered_queues
36
- @queues.uniq!
37
- end
35
+ @queues.uniq! if @strictly_ordered_queues
38
36
  end
39
37
 
40
38
  def retrieve_work
@@ -49,7 +49,7 @@ module Sidekiq
49
49
  # The default number of retries is 25 which works out to about 3 weeks
50
50
  # You can change the default maximum number of retries in your initializer:
51
51
  #
52
- # Sidekiq.options[:max_retries] = 7
52
+ # Sidekiq.default_configuration[:max_retries] = 7
53
53
  #
54
54
  # or limit the number of retries for a particular job and send retries to
55
55
  # a low priority queue with:
@@ -161,7 +161,7 @@ module Sidekiq
161
161
  fails = procd = 0
162
162
  kb = memory_usage(::Process.pid)
163
163
 
164
- _, exists, _, _, msg = redis { |conn|
164
+ _, exists, _, _, signal = redis { |conn|
165
165
  conn.multi { |transaction|
166
166
  transaction.sadd("processes", [key])
167
167
  transaction.exists(key)
@@ -180,9 +180,7 @@ module Sidekiq
180
180
  fire_event(:heartbeat) unless exists > 0
181
181
  fire_event(:beat, oneshot: false)
182
182
 
183
- return unless msg
184
-
185
- ::Process.kill(msg, ::Process.pid)
183
+ ::Process.kill(signal, ::Process.pid) if signal && !@embedded
186
184
  rescue => e
187
185
  # ignore all redis/network issues
188
186
  logger.error("heartbeat: #{e}")
@@ -251,13 +249,18 @@ module Sidekiq
251
249
  "tag" => @config[:tag] || "",
252
250
  "concurrency" => @config.total_concurrency,
253
251
  "queues" => @config.capsules.values.flat_map { |cap| cap.queues }.uniq,
254
- "weights" => @config.capsules.values.flat_map { |cap| cap.queues }.tally,
252
+ "weights" => to_weights,
255
253
  "labels" => @config[:labels].to_a,
256
254
  "identity" => identity,
257
- "version" => Sidekiq::VERSION
255
+ "version" => Sidekiq::VERSION,
256
+ "embedded" => @embedded
258
257
  }
259
258
  end
260
259
 
260
+ def to_weights
261
+ @config.capsules.values.map(&:weights)
262
+ end
263
+
261
264
  def to_json
262
265
  # this data changes infrequently so dump it to a string
263
266
  # now so we don't need to dump it every heartbeat.
@@ -22,13 +22,11 @@ module Sidekiq
22
22
  end
23
23
 
24
24
  def call(_, job, _, _)
25
- attrs = @strklass.constantize.attributes
26
- if attrs.any?
27
- if job.has_key?("cattr")
28
- job["cattr"].merge!(attrs)
29
- else
30
- job["cattr"] = attrs
31
- end
25
+ if !job.has_key?("cattr")
26
+ attrs = @strklass.constantize.attributes
27
+ # Retries can push the job N times, we don't
28
+ # want retries to reset cattr. #5692, #5090
29
+ job["cattr"] = attrs if attrs.any?
32
30
  end
33
31
  yield
34
32
  end
data/lib/sidekiq/rails.rb CHANGED
@@ -11,7 +11,8 @@ module Sidekiq
11
11
  end
12
12
 
13
13
  def call
14
- @app.reloader.wrap do
14
+ params = (::Rails::VERSION::STRING >= "7.1") ? {source: "job.sidekiq"} : {}
15
+ @app.reloader.wrap(**params) do
15
16
  yield
16
17
  end
17
18
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sidekiq
4
- VERSION = "7.0.2"
4
+ VERSION = "7.0.3"
5
5
  MAJOR = 7
6
6
  end
@@ -82,11 +82,14 @@ module Sidekiq
82
82
 
83
83
  post "/busy" do
84
84
  if params["identity"]
85
- p = Sidekiq::Process.new("identity" => params["identity"])
86
- p.quiet! if params["quiet"]
87
- p.stop! if params["stop"]
85
+ pro = Sidekiq::ProcessSet[params["identity"]]
86
+
87
+ pro.quiet! if params["quiet"]
88
+ pro.stop! if params["stop"]
88
89
  else
89
90
  processes.each do |pro|
91
+ next if pro.embedded?
92
+
90
93
  pro.quiet! if params["quiet"]
91
94
  pro.stop! if params["stop"]
92
95
  end
@@ -161,6 +161,14 @@ module Sidekiq
161
161
  end
162
162
  end
163
163
 
164
+ def busy_weights(capsule_weights)
165
+ # backwards compat with 7.0.0, remove in 7.1
166
+ cw = [capsule_weights].flatten
167
+ cw.map { |hash|
168
+ hash.map { |name, weight| (weight > 0) ? +name << ": " << weight.to_s : name }.join(", ")
169
+ }.join("; ")
170
+ end
171
+
164
172
  def stats
165
173
  @stats ||= Sidekiq::Stats.new
166
174
  end
data/sidekiq.gemspec CHANGED
@@ -28,23 +28,11 @@ Gem::Specification.new do |gem|
28
28
  gem.add_dependency "concurrent-ruby", "< 2"
29
29
  gem.post_install_message = <<~EOM
30
30
 
31
- ####################################################
32
-
33
-
34
- █████████ █████ ██████████ ██████████ █████ ████ █████ ██████ ██████████ █████
35
- ███░░░░░███░░███ ░░███░░░░███ ░░███░░░░░█░░███ ███░ ░░███ ███░░░░███ ░███░░░░███ ███░░░███
36
- ░███ ░░░ ░███ ░███ ░░███ ░███ █ ░ ░███ ███ ░███ ███ ░░███ ░░░ ███ ███ ░░███
37
- ░░█████████ ░███ ░███ ░███ ░██████ ░███████ ░███ ░███ ░███ ███ ░███ ░███
38
- ░░░░░░░░███ ░███ ░███ ░███ ░███░░█ ░███░░███ ░███ ░███ ██░███ ███ ░███ ░███
39
- ███ ░███ ░███ ░███ ███ ░███ ░ █ ░███ ░░███ ░███ ░░███ ░░████ ███ ░░███ ███
40
- ░░█████████ █████ ██████████ ██████████ █████ ░░████ █████ ░░░██████░██ ███ ██ ░░░█████░
41
- ░░░░░░░░░ ░░░░░ ░░░░░░░░░░ ░░░░░░░░░░ ░░░░░ ░░░░ ░░░░░ ░░░░░░ ░░ ░░░ ░░ ░░░░░░
42
-
31
+ Welcome to Sidekiq 7.0!
43
32
 
44
33
  1. Use `gem 'sidekiq', '<7'` in your Gemfile if you don't want this new version.
45
34
  2. Read the release notes at https://github.com/mperham/sidekiq/blob/main/docs/7.0-Upgrade.md
46
- 3. Search for open/closed issues at https://github.com/mperham/sidekiq/issues/
47
-
48
- ####################################################
35
+ 3. If you have problems, search for open/closed issues at https://github.com/mperham/sidekiq/issues/
36
+
49
37
  EOM
50
38
  end
@@ -1,6 +1,6 @@
1
- <header>
1
+ <div class="header-container">
2
2
  <h3><%= t('Job') %></h3>
3
- </header>
3
+ </div>
4
4
 
5
5
  <div class="table_container">
6
6
  <table class="table table-bordered table-striped table-hover">
@@ -1,3 +1,4 @@
1
+ <div>
1
2
  <% if @total_size > @count %>
2
3
  <ul class="pagination pull-right flip">
3
4
  <li class="<%= 'disabled' if @current_page == 1 %>">
@@ -21,3 +22,4 @@
21
22
  </li>
22
23
  </ul>
23
24
  <% end %>
25
+ </div>
data/web/views/busy.erb CHANGED
@@ -1,7 +1,5 @@
1
- <div class="row header">
2
- <div class="col-sm-4 pull-left flip">
3
- <h3><%= t('Status') %></h3>
4
- </div>
1
+ <div class="header-container">
2
+ <h1><%= t('Status') %></h1>
5
3
  </div>
6
4
 
7
5
  <div class="stats-wrapper">
@@ -29,11 +27,9 @@
29
27
  </div>
30
28
  </div>
31
29
 
32
- <div class="row header">
33
- <div class="col-sm-4 pull-left flip">
34
- <h3><%= t('Processes') %></h3>
35
- </div>
36
- <div class="col-sm-3 pull-right flip">
30
+ <div class="header-container">
31
+ <h1><%= t('Processes') %></h1>
32
+ <div>
37
33
  <form method="POST" class="warning-messages">
38
34
  <%= csrf_tag %>
39
35
  <div class="btn-group pull-right flip">
@@ -43,6 +39,7 @@
43
39
  </form>
44
40
  </div>
45
41
  </div>
42
+
46
43
  <div class="table_container">
47
44
  <table class="processes table table-hover table-bordered table-striped">
48
45
  <thead>
@@ -62,6 +59,9 @@
62
59
  <% process.labels.each do |label| %>
63
60
  <span class="label label-info"><%= label %></span>
64
61
  <% end %>
62
+ <% if process.embedded? %>
63
+ <span class="label label-default">embedded</span>
64
+ <% end %>
65
65
  <% if process.stopping? %>
66
66
  <span class="label label-danger">quiet</span>
67
67
  <% end %>
@@ -71,7 +71,7 @@
71
71
  <br>
72
72
  <b><%= "#{t('Queues')}: " %></b>
73
73
  <% if process.weights %>
74
- <%= process.weights.sort_by { |weight| weight[0] }.map { |weight| weight.join(": ") }.join(", ") %>
74
+ <%= busy_weights(process.weights) %>
75
75
  <% else %>
76
76
  <%= process.queues.sort.join(", ") %>
77
77
  <% end %>
@@ -90,29 +90,27 @@
90
90
  <td><%= process['concurrency'] %></td>
91
91
  <td><%= process['busy'] %></td>
92
92
  <td>
93
- <form method="POST">
94
- <%= csrf_tag %>
95
- <input type="hidden" name="identity" value="<%= process['identity'] %>"/>
93
+ <% unless process.embedded? %>
94
+ <form method="POST">
95
+ <%= csrf_tag %>
96
+ <input type="hidden" name="identity" value="<%= process['identity'] %>"/>
96
97
 
97
- <div class="btn-group pull-right flip">
98
- <% unless process.stopping? %><button class="btn btn-xs btn-warn" type="submit" name="quiet" value="1"><%= t('Quiet') %></button><% end %>
99
- <button class="btn btn-xs btn-danger" type="submit" name="stop" value="1"><%= t('Stop') %></button>
100
- </div>
101
- </form>
98
+ <div class="btn-group pull-right flip">
99
+ <% unless process.stopping? %><button class="btn btn-xs btn-warn" type="submit" name="quiet" value="1"><%= t('Quiet') %></button><% end %>
100
+ <button class="btn btn-xs btn-danger" type="submit" name="stop" value="1"><%= t('Stop') %></button>
101
+ </div>
102
+ </form>
103
+ <% end %>
102
104
  </td>
103
105
  </tr>
104
106
  <% end %>
105
107
  </table>
106
108
  </div>
107
109
 
108
- <div class="row header">
109
- <div class="col-sm-7">
110
- <h3><%= t('Jobs') %></h3>
111
- </div>
110
+ <div class="header-container">
111
+ <h1><%= t('Jobs') %></h1>
112
112
  <% if @workset.size > 0 && @total_size > @count %>
113
- <div class="col-sm-4">
114
- <%= erb :_paging, locals: { url: "#{root_path}busy" } %>
115
- </div>
113
+ <%= erb :_paging, locals: { url: "#{root_path}busy" } %>
116
114
  <% end %>
117
115
  </div>
118
116
 
@@ -16,7 +16,7 @@
16
16
  <% if job_result.totals["s"] > 0 %>
17
17
  <div class="header-container">
18
18
  <h1>
19
- <a href="<%= root_path %>metrics"><%= t(:metrics).to_s.titleize %></a> /
19
+ <a href="<%= root_path %>metrics"><%= t('Metrics') %></a> /
20
20
  <%= h @name %>
21
21
  </h1>
22
22
 
@@ -61,7 +61,7 @@
61
61
  <p><small>Data from <%= @query_result.starts_at %> to <%= @query_result.ends_at %></small></p>
62
62
  <% else %>
63
63
  <h1>
64
- <a href="<%= root_path %>/metrics"><%= t(:metrics).to_s.titleize %></a> /
64
+ <a href="<%= root_path %>/metrics"><%= t('Metrics') %></a> /
65
65
  <%= h @name %>
66
66
  </h1>
67
67
 
data/web/views/morgue.erb CHANGED
@@ -1,14 +1,10 @@
1
- <header class="row">
2
- <div class="col-sm-5">
3
- <h3><%= t('DeadJobs') %></h3>
4
- </div>
1
+ <div class="header-container">
2
+ <h1><%= t('DeadJobs') %></h1>
5
3
  <% if @dead.size > 0 && @total_size > @count %>
6
- <div class="col-sm-4">
7
- <%= erb :_paging, locals: { url: "#{root_path}morgue" } %>
8
- </div>
4
+ <%= erb :_paging, locals: { url: "#{root_path}morgue" } %>
9
5
  <% end %>
10
6
  <%= filtering('dead') %>
11
- </header>
7
+ </div>
12
8
 
13
9
  <% if @dead.size > 0 %>
14
10
  <form action="<%= root_path %>morgue" method="post">
data/web/views/queue.erb CHANGED
@@ -1,17 +1,13 @@
1
- <header class="row">
2
- <div class="col-sm-5">
3
- <h3>
4
- <%= t('CurrentMessagesInQueue', :queue => h(@name)) %>
5
- <% if @queue.paused? %>
6
- <span class="label label-danger"><%= t('Paused') %></span>
7
- <% end %>
8
- <span class="badge badge-secondary"><%= number_with_delimiter(@total_size) %></span>
9
- </h3>
10
- </div>
11
- <div class="col-sm-4 pull-right flip">
12
- <%= erb :_paging, locals: { url: "#{root_path}queues/#{CGI.escape(@name)}" } %>
13
- </div>
14
- </header>
1
+ <div class="header-container">
2
+ <h1><%= t('CurrentMessagesInQueue', :queue => h(@name)) %>
3
+ <% if @queue.paused? %>
4
+ <span class="label label-danger"><%= t('Paused') %></span>
5
+ <% end %>
6
+ <span class="badge badge-secondary"><%= number_with_delimiter(@total_size) %></span>
7
+ </h1>
8
+ <%= erb :_paging, locals: { url: "#{root_path}queues/#{CGI.escape(@name)}" } %>
9
+ </div>
10
+
15
11
  <div class="table_container">
16
12
  <table class="queue table table-hover table-bordered table-striped">
17
13
  <thead>
data/web/views/queues.erb CHANGED
@@ -1,4 +1,6 @@
1
- <h3><%= t('Queues') %></h3>
1
+ <div class="header-container">
2
+ <h1><%= t('Queues') %></h1>
3
+ </div>
2
4
 
3
5
  <div class="table_container">
4
6
  <table class="queues table table-hover table-bordered table-striped">
@@ -1,14 +1,10 @@
1
- <header class="row">
2
- <div class="col-sm-5">
3
- <h3><%= t('Retries') %></h3>
4
- </div>
1
+ <div class="header-container">
2
+ <h1><%= t('Retries') %></h1>
5
3
  <% if @retries.size > 0 && @total_size > @count %>
6
- <div class="col-sm-4">
7
- <%= erb :_paging, locals: { url: "#{root_path}retries" } %>
8
- </div>
4
+ <%= erb :_paging, locals: { url: "#{root_path}retries" } %>
9
5
  <% end %>
10
6
  <%= filtering('retries') %>
11
- </header>
7
+ </div>
12
8
 
13
9
  <% if @retries.size > 0 %>
14
10
  <form action="<%= root_path %>retries" method="post">
@@ -1,25 +1,22 @@
1
- <header class="row">
2
- <div class="col-sm-5">
3
- <h3><%= t('ScheduledJobs') %></h3>
4
- </div>
1
+ <div class="header-container">
2
+ <h1><%= t('ScheduledJobs') %></h1>
5
3
  <% if @scheduled.size > 0 && @total_size > @count %>
6
- <div class="col-sm-4">
7
- <%= erb :_paging, locals: { url: "#{root_path}scheduled" } %>
8
- </div>
4
+ <%= erb :_paging, locals: { url: "#{root_path}scheduled" } %>
9
5
  <% end %>
10
6
  <%= filtering('scheduled') %>
11
- </header>
7
+ </div>
12
8
 
13
9
  <% if @scheduled.size > 0 %>
14
-
15
10
  <form action="<%= root_path %>scheduled" method="post">
16
11
  <%= csrf_tag %>
17
12
  <div class="table_container">
18
13
  <table class="table table-striped table-bordered table-hover">
19
14
  <thead>
20
15
  <tr>
21
- <th class="checkbox-column">
22
- <input type="checkbox" class="check_all" />
16
+ <th class="table-checkbox checkbox-column">
17
+ <label>
18
+ <input type="checkbox" class="check_all" />
19
+ </label>
23
20
  </th>
24
21
  <th><%= t('When') %></th>
25
22
  <th><%= t('Queue') %></th>
@@ -29,8 +26,10 @@
29
26
  </thead>
30
27
  <% @scheduled.each do |entry| %>
31
28
  <tr>
32
- <td>
33
- <input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' class='shift_clickable' />
29
+ <td class="table-checkbox">
30
+ <label>
31
+ <input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' class='shift_clickable' />
32
+ </label>
34
33
  </td>
35
34
  <td>
36
35
  <a href="<%= root_path %>scheduled/<%= job_params(entry.item, entry.score) %>"><%= relative_time(entry.at) %></a>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.2
4
+ version: 7.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Perham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-30 00:00:00.000000000 Z
11
+ date: 2023-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis-client
@@ -204,26 +204,14 @@ metadata:
204
204
  documentation_uri: https://github.com/mperham/sidekiq/wiki
205
205
  changelog_uri: https://github.com/mperham/sidekiq/blob/main/Changes.md
206
206
  source_code_uri: https://github.com/mperham/sidekiq
207
- post_install_message: |2
208
-
209
- ####################################################
210
-
211
-
212
- █████████ █████ ██████████ ██████████ █████ ████ █████ ██████ ██████████ █████
213
- ███░░░░░███░░███ ░░███░░░░███ ░░███░░░░░█░░███ ███░ ░░███ ███░░░░███ ░███░░░░███ ███░░░███
214
- ░███ ░░░ ░███ ░███ ░░███ ░███ █ ░ ░███ ███ ░███ ███ ░░███ ░░░ ███ ███ ░░███
215
- ░░█████████ ░███ ░███ ░███ ░██████ ░███████ ░███ ░███ ░███ ███ ░███ ░███
216
- ░░░░░░░░███ ░███ ░███ ░███ ░███░░█ ░███░░███ ░███ ░███ ██░███ ███ ░███ ░███
217
- ███ ░███ ░███ ░███ ███ ░███ ░ █ ░███ ░░███ ░███ ░░███ ░░████ ███ ░░███ ███
218
- ░░█████████ █████ ██████████ ██████████ █████ ░░████ █████ ░░░██████░██ ███ ██ ░░░█████░
219
- ░░░░░░░░░ ░░░░░ ░░░░░░░░░░ ░░░░░░░░░░ ░░░░░ ░░░░ ░░░░░ ░░░░░░ ░░ ░░░ ░░ ░░░░░░
207
+ post_install_message: |2+
220
208
 
209
+ Welcome to Sidekiq 7.0!
221
210
 
222
211
  1. Use `gem 'sidekiq', '<7'` in your Gemfile if you don't want this new version.
223
212
  2. Read the release notes at https://github.com/mperham/sidekiq/blob/main/docs/7.0-Upgrade.md
224
- 3. Search for open/closed issues at https://github.com/mperham/sidekiq/issues/
213
+ 3. If you have problems, search for open/closed issues at https://github.com/mperham/sidekiq/issues/
225
214
 
226
- ####################################################
227
215
  rdoc_options: []
228
216
  require_paths:
229
217
  - lib
@@ -243,3 +231,4 @@ signing_key:
243
231
  specification_version: 4
244
232
  summary: Simple, efficient background processing for Ruby
245
233
  test_files: []
234
+ ...