sidekiq 7.3.4 → 7.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changes.md +16 -0
- data/bin/sidekiqload +21 -12
- data/lib/active_job/queue_adapters/sidekiq_adapter.rb +1 -1
- data/lib/sidekiq/api.rb +52 -29
- data/lib/sidekiq/cli.rb +1 -1
- data/lib/sidekiq/job_logger.rb +10 -20
- data/lib/sidekiq/middleware/current_attributes.rb +16 -1
- data/lib/sidekiq/rails.rb +2 -6
- data/lib/sidekiq/version.rb +1 -1
- data/lib/sidekiq/web/application.rb +32 -50
- data/web/assets/stylesheets/application.css +5 -0
- data/web/locales/it.yml +32 -1
- data/web/views/filtering.erb +1 -2
- data/web/views/metrics.erb +1 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c9bd0a03b27535a34a0525397e84c429a9332e6754dba43c088558ab8f362e9
|
4
|
+
data.tar.gz: '08fee2db2d83996d1df6f78e7eb9a226cb98d951cba336dd422771f9127cf95a'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4876eb7594d0c87e4dba08a752dbcb65bbf45ae8213fb9b9ee6a1e12d7a48750c161ffe632f3b13eacfed73de3c3c73a9dc06a2548ddf7e5f6dde0f7de161bd
|
7
|
+
data.tar.gz: a0f485adef4ba6751114daf0d2c1d509966d530bc620e00ebf17a9c244f1eb0821ae5e8214d88d3652106d932cae7acfd2b66874647acc8c33fe6ec2e3b9d691
|
data/Changes.md
CHANGED
@@ -2,6 +2,22 @@
|
|
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
|
+
7.3.6
|
6
|
+
----------
|
7
|
+
|
8
|
+
- Forward compatibility fixes for Ruby 3.4
|
9
|
+
- Filtering in the Web UI now works via GET so you can bookmark a filtered view. [#6497]
|
10
|
+
|
11
|
+
7.3.5
|
12
|
+
----------
|
13
|
+
|
14
|
+
- Reimplement `retry_all` and `kill_all` API methods to use ZPOPMIN,
|
15
|
+
approximately 30-60% faster. [#6481]
|
16
|
+
- Add preload testing binary at `examples/testing/sidekiq_boot` to verify your Rails app boots correctly with Sidekiq Enterprise's app preloading.
|
17
|
+
- Fix circular require with ActiveJob adapter [#6477]
|
18
|
+
- Fix potential race condition leading to incorrect serialized values for CurrentAttributes [#6475]
|
19
|
+
- Restore missing elapsed time when default job logging is disabled
|
20
|
+
|
5
21
|
7.3.4
|
6
22
|
----------
|
7
23
|
|
data/bin/sidekiqload
CHANGED
@@ -50,7 +50,7 @@ if ENV["AJ"]
|
|
50
50
|
ActiveJob::Base.logger.level = Logger::WARN
|
51
51
|
|
52
52
|
class LoadJob < ActiveJob::Base
|
53
|
-
def perform(idx, ts = nil)
|
53
|
+
def perform(string, idx, hash, ts = nil)
|
54
54
|
puts(Time.now.to_f - ts) if !ts.nil?
|
55
55
|
end
|
56
56
|
end
|
@@ -58,12 +58,21 @@ end
|
|
58
58
|
|
59
59
|
class LoadWorker
|
60
60
|
include Sidekiq::Job
|
61
|
+
$count = 0
|
62
|
+
$lock = Mutex.new
|
63
|
+
|
61
64
|
sidekiq_options retry: 1
|
62
65
|
sidekiq_retry_in do |x|
|
63
66
|
1
|
64
67
|
end
|
65
68
|
|
66
|
-
def perform(idx, ts = nil)
|
69
|
+
def perform(string, idx, hash, ts = nil)
|
70
|
+
$lock.synchronize do
|
71
|
+
$count += 1
|
72
|
+
if $count % 100_000 == 0
|
73
|
+
logger.warn("#{Time.now} Done #{$count}")
|
74
|
+
end
|
75
|
+
end
|
67
76
|
puts(Time.now.to_f - ts) if !ts.nil?
|
68
77
|
# raise idx.to_s if idx % 100 == 1
|
69
78
|
end
|
@@ -133,13 +142,13 @@ class Loader
|
|
133
142
|
start = Time.now
|
134
143
|
if ENV["AJ"]
|
135
144
|
@iter.times do
|
136
|
-
@count.times do |idx|
|
137
|
-
LoadJob.
|
138
|
-
end
|
145
|
+
ActiveJob.perform_all_later(@count.times.map do |idx|
|
146
|
+
LoadJob.new("mike", idx, {mike: "bob"})
|
147
|
+
end)
|
139
148
|
end
|
140
149
|
else
|
141
150
|
@iter.times do
|
142
|
-
arr = Array.new(@count) { |idx| [idx] }
|
151
|
+
arr = Array.new(@count) { |idx| ["string", idx, {"mike" => "bob"}] }
|
143
152
|
Sidekiq::Client.push_bulk("class" => LoadWorker, "args" => arr)
|
144
153
|
end
|
145
154
|
end
|
@@ -163,13 +172,13 @@ class Loader
|
|
163
172
|
Sidekiq.logger.error("Now here's the latency for three jobs")
|
164
173
|
|
165
174
|
if ENV["AJ"]
|
166
|
-
LoadJob.perform_later(1, Time.now.to_f)
|
167
|
-
LoadJob.perform_later(2, Time.now.to_f)
|
168
|
-
LoadJob.perform_later(3, Time.now.to_f)
|
175
|
+
LoadJob.perform_later("", 1, {}, Time.now.to_f)
|
176
|
+
LoadJob.perform_later("", 2, {}, Time.now.to_f)
|
177
|
+
LoadJob.perform_later("", 3, {}, Time.now.to_f)
|
169
178
|
else
|
170
|
-
LoadWorker.perform_async(1, Time.now.to_f)
|
171
|
-
LoadWorker.perform_async(2, Time.now.to_f)
|
172
|
-
LoadWorker.perform_async(3, Time.now.to_f)
|
179
|
+
LoadWorker.perform_async("", 1, {}, Time.now.to_f)
|
180
|
+
LoadWorker.perform_async("", 2, {}, Time.now.to_f)
|
181
|
+
LoadWorker.perform_async("", 3, {}, Time.now.to_f)
|
173
182
|
end
|
174
183
|
|
175
184
|
sleep 0.1
|
@@ -16,7 +16,7 @@ end
|
|
16
16
|
module ActiveJob
|
17
17
|
module QueueAdapters
|
18
18
|
# Explicitly remove the implementation existing in older rails'.
|
19
|
-
remove_const(:SidekiqAdapter) if
|
19
|
+
remove_const(:SidekiqAdapter) if const_defined?(:SidekiqAdapter)
|
20
20
|
|
21
21
|
# Sidekiq adapter for Active Job
|
22
22
|
#
|
data/lib/sidekiq/api.rb
CHANGED
@@ -668,6 +668,41 @@ module Sidekiq
|
|
668
668
|
end
|
669
669
|
end
|
670
670
|
|
671
|
+
def pop_each
|
672
|
+
Sidekiq.redis do |c|
|
673
|
+
size.times do
|
674
|
+
data, score = c.zpopmin(name, 1)&.first
|
675
|
+
break unless data
|
676
|
+
yield data, score
|
677
|
+
end
|
678
|
+
end
|
679
|
+
end
|
680
|
+
|
681
|
+
def retry_all
|
682
|
+
c = Sidekiq::Client.new
|
683
|
+
pop_each do |msg, _|
|
684
|
+
job = Sidekiq.load_json(msg)
|
685
|
+
# Manual retries should not count against the retry limit.
|
686
|
+
job["retry_count"] -= 1 if job["retry_count"]
|
687
|
+
c.push(job)
|
688
|
+
end
|
689
|
+
end
|
690
|
+
|
691
|
+
# Move all jobs from this Set to the Dead Set.
|
692
|
+
# See DeadSet#kill
|
693
|
+
def kill_all(notify_failure: false, ex: nil)
|
694
|
+
ds = DeadSet.new
|
695
|
+
opts = {notify_failure: notify_failure, ex: ex, trim: false}
|
696
|
+
|
697
|
+
begin
|
698
|
+
pop_each do |msg, _|
|
699
|
+
ds.kill(msg, opts)
|
700
|
+
end
|
701
|
+
ensure
|
702
|
+
ds.trim
|
703
|
+
end
|
704
|
+
end
|
705
|
+
|
671
706
|
def each
|
672
707
|
initial_size = @_size
|
673
708
|
offset_size = 0
|
@@ -765,10 +800,6 @@ module Sidekiq
|
|
765
800
|
|
766
801
|
##
|
767
802
|
# The set of scheduled jobs within Sidekiq.
|
768
|
-
# Based on this, you can search/filter for jobs. Here's an
|
769
|
-
# example where I'm selecting jobs based on some complex logic
|
770
|
-
# and deleting them from the scheduled set.
|
771
|
-
#
|
772
803
|
# See the API wiki page for usage notes and examples.
|
773
804
|
#
|
774
805
|
class ScheduledSet < JobSet
|
@@ -779,26 +810,12 @@ module Sidekiq
|
|
779
810
|
|
780
811
|
##
|
781
812
|
# The set of retries within Sidekiq.
|
782
|
-
# Based on this, you can search/filter for jobs. Here's an
|
783
|
-
# example where I'm selecting all jobs of a certain type
|
784
|
-
# and deleting them from the retry queue.
|
785
|
-
#
|
786
813
|
# See the API wiki page for usage notes and examples.
|
787
814
|
#
|
788
815
|
class RetrySet < JobSet
|
789
816
|
def initialize
|
790
817
|
super("retry")
|
791
818
|
end
|
792
|
-
|
793
|
-
# Enqueues all jobs pending within the retry set.
|
794
|
-
def retry_all
|
795
|
-
each(&:retry) while size > 0
|
796
|
-
end
|
797
|
-
|
798
|
-
# Kills all jobs pending within the retry set.
|
799
|
-
def kill_all
|
800
|
-
each(&:kill) while size > 0
|
801
|
-
end
|
802
819
|
end
|
803
820
|
|
804
821
|
##
|
@@ -811,20 +828,31 @@ module Sidekiq
|
|
811
828
|
super("dead")
|
812
829
|
end
|
813
830
|
|
831
|
+
# Trim dead jobs which are over our storage limits
|
832
|
+
def trim
|
833
|
+
hash = Sidekiq.default_configuration
|
834
|
+
now = Time.now.to_f
|
835
|
+
Sidekiq.redis do |conn|
|
836
|
+
conn.multi do |transaction|
|
837
|
+
transaction.zremrangebyscore(name, "-inf", now - hash[:dead_timeout_in_seconds])
|
838
|
+
transaction.zremrangebyrank(name, 0, - hash[:dead_max_jobs])
|
839
|
+
end
|
840
|
+
end
|
841
|
+
end
|
842
|
+
|
814
843
|
# Add the given job to the Dead set.
|
815
844
|
# @param message [String] the job data as JSON
|
816
|
-
# @option opts [Boolean] :notify_failure
|
845
|
+
# @option opts [Boolean] :notify_failure (true) Whether death handlers should be called
|
846
|
+
# @option opts [Boolean] :trim (true) Whether Sidekiq should trim the structure to keep it within configuration
|
817
847
|
# @option opts [Exception] :ex (RuntimeError) An exception to pass to the death handlers
|
818
848
|
def kill(message, opts = {})
|
819
849
|
now = Time.now.to_f
|
820
850
|
Sidekiq.redis do |conn|
|
821
|
-
conn.
|
822
|
-
transaction.zadd(name, now.to_s, message)
|
823
|
-
transaction.zremrangebyscore(name, "-inf", now - Sidekiq::Config::DEFAULTS[:dead_timeout_in_seconds])
|
824
|
-
transaction.zremrangebyrank(name, 0, - Sidekiq::Config::DEFAULTS[:dead_max_jobs])
|
825
|
-
end
|
851
|
+
conn.zadd(name, now.to_s, message)
|
826
852
|
end
|
827
853
|
|
854
|
+
trim if opts[:trim] != false
|
855
|
+
|
828
856
|
if opts[:notify_failure] != false
|
829
857
|
job = Sidekiq.load_json(message)
|
830
858
|
if opts[:ex]
|
@@ -839,11 +867,6 @@ module Sidekiq
|
|
839
867
|
end
|
840
868
|
true
|
841
869
|
end
|
842
|
-
|
843
|
-
# Enqueue all dead jobs
|
844
|
-
def retry_all
|
845
|
-
each(&:retry) while size > 0
|
846
|
-
end
|
847
870
|
end
|
848
871
|
|
849
872
|
##
|
data/lib/sidekiq/cli.rb
CHANGED
@@ -101,7 +101,7 @@ module Sidekiq # :nodoc:
|
|
101
101
|
# Touch middleware so it isn't lazy loaded by multiple threads, #3043
|
102
102
|
@config.server_middleware
|
103
103
|
|
104
|
-
::Process.warmup if warmup && ::Process.respond_to?(:warmup)
|
104
|
+
::Process.warmup if warmup && ::Process.respond_to?(:warmup) && ENV["RUBY_DISABLE_WARMUP"] != "1"
|
105
105
|
|
106
106
|
# Before this point, the process is initializing with just the main thread.
|
107
107
|
# Starting here the process will now have multiple threads running.
|
data/lib/sidekiq/job_logger.rb
CHANGED
@@ -5,31 +5,21 @@ module Sidekiq
|
|
5
5
|
def initialize(config)
|
6
6
|
@config = config
|
7
7
|
@logger = @config.logger
|
8
|
-
|
9
|
-
|
10
|
-
# If true we won't do any job logging out of the box.
|
11
|
-
# The user is responsible for any logging.
|
12
|
-
def skip_default_logging?
|
13
|
-
@config[:skip_default_job_logging]
|
8
|
+
@skip = !!@config[:skip_default_job_logging]
|
14
9
|
end
|
15
10
|
|
16
11
|
def call(item, queue)
|
17
|
-
|
18
|
-
|
19
|
-
begin
|
20
|
-
start = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
|
21
|
-
@logger.info("start")
|
12
|
+
start = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
|
13
|
+
@logger.info { "start" } unless @skip
|
22
14
|
|
23
|
-
|
24
|
-
|
25
|
-
Sidekiq::Context.add(:elapsed, elapsed(start))
|
26
|
-
@logger.info("done")
|
27
|
-
rescue Exception
|
28
|
-
Sidekiq::Context.add(:elapsed, elapsed(start))
|
29
|
-
@logger.info("fail")
|
15
|
+
yield
|
30
16
|
|
31
|
-
|
32
|
-
|
17
|
+
Sidekiq::Context.add(:elapsed, elapsed(start))
|
18
|
+
@logger.info { "done" } unless @skip
|
19
|
+
rescue Exception
|
20
|
+
Sidekiq::Context.add(:elapsed, elapsed(start))
|
21
|
+
@logger.info { "fail" } unless @skip
|
22
|
+
raise
|
33
23
|
end
|
34
24
|
|
35
25
|
def prepare(job_hash, &block)
|
@@ -33,11 +33,26 @@ module Sidekiq
|
|
33
33
|
attrs = strklass.constantize.attributes
|
34
34
|
# Retries can push the job N times, we don't
|
35
35
|
# want retries to reset cattr. #5692, #5090
|
36
|
-
|
36
|
+
if attrs.any?
|
37
|
+
# Older rails has a bug that `CurrentAttributes#attributes` always returns
|
38
|
+
# the same hash instance. We need to dup it to avoid being accidentally mutated.
|
39
|
+
job[key] = if returns_same_object?
|
40
|
+
attrs.dup
|
41
|
+
else
|
42
|
+
attrs
|
43
|
+
end
|
44
|
+
end
|
37
45
|
end
|
38
46
|
end
|
39
47
|
yield
|
40
48
|
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def returns_same_object?
|
53
|
+
ActiveSupport::VERSION::MAJOR < 8 ||
|
54
|
+
(ActiveSupport::VERSION::MAJOR == 8 && ActiveSupport::VERSION::MINOR == 0)
|
55
|
+
end
|
41
56
|
end
|
42
57
|
|
43
58
|
class Load
|
data/lib/sidekiq/rails.rb
CHANGED
@@ -3,12 +3,6 @@
|
|
3
3
|
require "sidekiq/job"
|
4
4
|
require "rails"
|
5
5
|
|
6
|
-
begin
|
7
|
-
require "active_job"
|
8
|
-
require "active_job/queue_adapters/sidekiq_adapter"
|
9
|
-
rescue LoadError
|
10
|
-
end
|
11
|
-
|
12
6
|
module Sidekiq
|
13
7
|
class Rails < ::Rails::Engine
|
14
8
|
class Reloader
|
@@ -45,6 +39,8 @@ module Sidekiq
|
|
45
39
|
# end
|
46
40
|
initializer "sidekiq.active_job_integration" do
|
47
41
|
ActiveSupport.on_load(:active_job) do
|
42
|
+
require "active_job/queue_adapters/sidekiq_adapter"
|
43
|
+
|
48
44
|
include ::Sidekiq::Job::Options unless respond_to?(:sidekiq_options)
|
49
45
|
end
|
50
46
|
end
|
data/lib/sidekiq/version.rb
CHANGED
@@ -67,11 +67,15 @@ module Sidekiq
|
|
67
67
|
end
|
68
68
|
|
69
69
|
get "/metrics" do
|
70
|
+
x = params[:substr]
|
71
|
+
class_filter = (x.nil? || x == "") ? nil : Regexp.new(Regexp.escape(x), Regexp::IGNORECASE)
|
72
|
+
|
70
73
|
q = Sidekiq::Metrics::Query.new
|
71
74
|
@period = h((params[:period] || "")[0..1])
|
72
75
|
@periods = METRICS_PERIODS
|
73
76
|
minutes = @periods.fetch(@period, @periods.values.first)
|
74
|
-
@query_result = q.top_jobs(minutes: minutes)
|
77
|
+
@query_result = q.top_jobs(minutes: minutes, class_filter: class_filter)
|
78
|
+
|
75
79
|
erb(:metrics)
|
76
80
|
end
|
77
81
|
|
@@ -153,9 +157,15 @@ module Sidekiq
|
|
153
157
|
end
|
154
158
|
|
155
159
|
get "/morgue" do
|
156
|
-
|
157
|
-
|
158
|
-
|
160
|
+
x = params[:substr]
|
161
|
+
|
162
|
+
if x && x != ""
|
163
|
+
@dead = search(Sidekiq::DeadSet.new, x)
|
164
|
+
else
|
165
|
+
@count = (params["count"] || 25).to_i
|
166
|
+
(@current_page, @total_size, @dead) = page("dead", params["page"], @count, reverse: true)
|
167
|
+
@dead = @dead.map { |msg, score| Sidekiq::SortedEntry.new(nil, score, msg) }
|
168
|
+
end
|
159
169
|
|
160
170
|
erb(:morgue)
|
161
171
|
end
|
@@ -207,9 +217,15 @@ module Sidekiq
|
|
207
217
|
end
|
208
218
|
|
209
219
|
get "/retries" do
|
210
|
-
|
211
|
-
|
212
|
-
|
220
|
+
x = params[:substr]
|
221
|
+
|
222
|
+
if x && x != ""
|
223
|
+
@retries = search(Sidekiq::RetrySet.new, x)
|
224
|
+
else
|
225
|
+
@count = (params["count"] || 25).to_i
|
226
|
+
(@current_page, @total_size, @retries) = page("retry", params["page"], @count)
|
227
|
+
@retries = @retries.map { |msg, score| Sidekiq::SortedEntry.new(nil, score, msg) }
|
228
|
+
end
|
213
229
|
|
214
230
|
erb(:retries)
|
215
231
|
end
|
@@ -262,9 +278,15 @@ module Sidekiq
|
|
262
278
|
end
|
263
279
|
|
264
280
|
get "/scheduled" do
|
265
|
-
|
266
|
-
|
267
|
-
|
281
|
+
x = params[:substr]
|
282
|
+
|
283
|
+
if x && x != ""
|
284
|
+
@scheduled = search(Sidekiq::ScheduledSet.new, x)
|
285
|
+
else
|
286
|
+
@count = (params["count"] || 25).to_i
|
287
|
+
(@current_page, @total_size, @scheduled) = page("schedule", params["page"], @count)
|
288
|
+
@scheduled = @scheduled.map { |msg, score| Sidekiq::SortedEntry.new(nil, score, msg) }
|
289
|
+
end
|
268
290
|
|
269
291
|
erb(:scheduled)
|
270
292
|
end
|
@@ -328,46 +350,6 @@ module Sidekiq
|
|
328
350
|
json Sidekiq::Stats.new.queues
|
329
351
|
end
|
330
352
|
|
331
|
-
########
|
332
|
-
# Filtering
|
333
|
-
|
334
|
-
route :get, :post, "/filter/metrics" do
|
335
|
-
x = params[:substr]
|
336
|
-
return redirect "#{root_path}metrics" unless x && x != ""
|
337
|
-
|
338
|
-
q = Sidekiq::Metrics::Query.new
|
339
|
-
@period = h((params[:period] || "")[0..1])
|
340
|
-
@periods = METRICS_PERIODS
|
341
|
-
minutes = @periods.fetch(@period, @periods.values.first)
|
342
|
-
@query_result = q.top_jobs(minutes: minutes, class_filter: Regexp.new(Regexp.escape(x), Regexp::IGNORECASE))
|
343
|
-
|
344
|
-
erb :metrics
|
345
|
-
end
|
346
|
-
|
347
|
-
route :get, :post, "/filter/retries" do
|
348
|
-
x = params[:substr]
|
349
|
-
return redirect "#{root_path}retries" unless x && x != ""
|
350
|
-
|
351
|
-
@retries = search(Sidekiq::RetrySet.new, params[:substr])
|
352
|
-
erb :retries
|
353
|
-
end
|
354
|
-
|
355
|
-
route :get, :post, "/filter/scheduled" do
|
356
|
-
x = params[:substr]
|
357
|
-
return redirect "#{root_path}scheduled" unless x && x != ""
|
358
|
-
|
359
|
-
@scheduled = search(Sidekiq::ScheduledSet.new, params[:substr])
|
360
|
-
erb :scheduled
|
361
|
-
end
|
362
|
-
|
363
|
-
route :get, :post, "/filter/dead" do
|
364
|
-
x = params[:substr]
|
365
|
-
return redirect "#{root_path}morgue" unless x && x != ""
|
366
|
-
|
367
|
-
@dead = search(Sidekiq::DeadSet.new, params[:substr])
|
368
|
-
erb :morgue
|
369
|
-
end
|
370
|
-
|
371
353
|
post "/change_locale" do
|
372
354
|
locale = params["locale"]
|
373
355
|
|
data/web/locales/it.yml
CHANGED
@@ -6,44 +6,60 @@ it:
|
|
6
6
|
AreYouSureDeleteJob: Sei sicuro di voler cancellare questo lavoro?
|
7
7
|
AreYouSureDeleteQueue: Sei sicuro di voler cancellare la coda %{queue}?
|
8
8
|
Arguments: Argomenti
|
9
|
+
BackToApp: Torna all'App
|
9
10
|
Busy: Occupato
|
10
11
|
Class: Classe
|
11
12
|
Connections: Connessioni
|
13
|
+
CreatedAt: Creato il
|
12
14
|
CurrentMessagesInQueue: Messaggi in <span class='title'>%{queue}</span>
|
13
15
|
Dashboard: Dashboard
|
14
16
|
Dead: Arrestato
|
15
17
|
DeadJobs: Lavori arrestati
|
16
18
|
Delete: Cancella
|
17
19
|
DeleteAll: Cancella tutti
|
20
|
+
Deploy: Distribuire
|
18
21
|
Enqueued: In coda
|
19
22
|
Error: Errore
|
20
23
|
ErrorBacktrace: Backtrace dell'errore
|
21
24
|
ErrorClass: Classe dell'errore
|
22
25
|
ErrorMessage: Messaggio di errore
|
26
|
+
ExecutionTime: Tempo di esecuzione
|
23
27
|
Extras: Extra
|
24
28
|
Failed: Fallito
|
25
29
|
Failures: Fallimenti
|
30
|
+
Failure: Fallimento
|
26
31
|
GoBack: ← Indietro
|
27
32
|
History: Storia
|
28
33
|
Job: Lavoro
|
29
34
|
Jobs: Lavori
|
30
35
|
Kill: Uccidere
|
36
|
+
KillAll: Uccidere tutti
|
31
37
|
LastRetry: Ultimo tentativo
|
38
|
+
Latency: Latenza
|
32
39
|
LivePoll: Live poll
|
33
40
|
MemoryUsage: Memoria utilizzata
|
41
|
+
Name: Nome
|
34
42
|
Namespace: Namespace
|
35
43
|
NextRetry: Prossimo tentativo
|
36
44
|
NoDeadJobsFound: Non ci sono lavori arrestati
|
37
45
|
NoRetriesFound: Non sono stati trovati nuovi tentativi
|
38
46
|
NoScheduledFound: Non ci sono lavori pianificati
|
47
|
+
NotYetEnqueued: Non ancora in coda
|
39
48
|
OneMonth: 1 mese
|
40
49
|
OneWeek: 1 settimana
|
41
50
|
OriginallyFailed: Primo fallimento
|
51
|
+
Pause: Metti in pausa
|
52
|
+
Paused: In pausa
|
42
53
|
PeakMemoryUsage: Memoria utilizzata (max.)
|
54
|
+
Plugins: Plugins
|
55
|
+
PollingInterval: Intervallo di polling
|
56
|
+
Process: Processo
|
43
57
|
Processed: Processato
|
44
58
|
Processes: Processi
|
45
59
|
Queue: Coda
|
46
60
|
Queues: Code
|
61
|
+
Quiet: Silenzia
|
62
|
+
QuietAll: Silenzia Tutti
|
47
63
|
Realtime: Tempo reale
|
48
64
|
Retries: Nuovi tentativi
|
49
65
|
RetryAll: Riprova tutti
|
@@ -51,19 +67,34 @@ it:
|
|
51
67
|
RetryNow: Riprova
|
52
68
|
Scheduled: Pianificato
|
53
69
|
ScheduledJobs: Lavori pianificati
|
70
|
+
Seconds: Secondi
|
54
71
|
ShowAll: Mostra tutti
|
55
72
|
SixMonths: 6 mesi
|
56
73
|
Size: Dimensione
|
57
74
|
Started: Iniziato
|
58
75
|
Status: Stato
|
76
|
+
Stop: Ferma
|
77
|
+
StopAll: Ferma Tutti
|
59
78
|
StopPolling: Ferma il polling
|
79
|
+
Success: Successo
|
80
|
+
Summary: Riepilogo
|
60
81
|
Thread: Thread
|
61
|
-
Threads:
|
82
|
+
Threads: Threads
|
62
83
|
ThreeMonths: 3 mesi
|
63
84
|
Time: Ora
|
85
|
+
Unpause: Riattiva
|
64
86
|
Uptime: Uptime (giorni)
|
87
|
+
Utilization: Utilizzo
|
65
88
|
Version: Versione
|
66
89
|
When: Quando
|
67
90
|
Worker: Lavoratore
|
68
91
|
active: attivo
|
69
92
|
idle: inattivo
|
93
|
+
Metrics: Metriche
|
94
|
+
NoDataFound: Nessun dato trovato
|
95
|
+
TotalExecutionTime: Tempo totale di esecuzione
|
96
|
+
AvgExecutionTime: Tempo medio di esecuzione
|
97
|
+
Context: Contesto
|
98
|
+
NoJobMetricsFound: Metriche recenti di lavoro non trovate
|
99
|
+
Filter: Filtro
|
100
|
+
AnyJobContent: Qualsiasi contenuto di lavoro
|
data/web/views/filtering.erb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
<div>
|
2
|
-
<form method="
|
3
|
-
<%= csrf_tag %>
|
2
|
+
<form method="get" class="form-inline" action='<%= root_path %><%= which %>'>
|
4
3
|
<label for="substr"><%= t('Filter') %></label>
|
5
4
|
<input class="search form-control" type="search" name="substr" value="<%= h params[:substr] %>" placeholder="<%= t('AnyJobContent') %>"/>
|
6
5
|
</form>
|
data/web/views/metrics.erb
CHANGED
@@ -9,8 +9,7 @@
|
|
9
9
|
</div>
|
10
10
|
|
11
11
|
<div>
|
12
|
-
<form id="metrics-form" class="form-inline" action="<%= root_path %>
|
13
|
-
<%= csrf_tag %>
|
12
|
+
<form id="metrics-form" class="form-inline" action="<%= root_path %>metrics" method="get">
|
14
13
|
<label for="substr"><%= t('Filter') %></label>
|
15
14
|
<input id="class-filter" class="form-control" type="text" name="substr" placeholder="<%= t('Name') %>" value="<%= h params[:substr] %>">
|
16
15
|
<select id="period-selector" class="form-control" name="period">
|
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.3.
|
4
|
+
version: 7.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Perham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis-client
|
@@ -232,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
232
232
|
- !ruby/object:Gem::Version
|
233
233
|
version: '0'
|
234
234
|
requirements: []
|
235
|
-
rubygems_version: 3.5.
|
235
|
+
rubygems_version: 3.5.16
|
236
236
|
signing_key:
|
237
237
|
specification_version: 4
|
238
238
|
summary: Simple, efficient background processing for Ruby
|