sidekiq 7.3.4 → 7.3.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e334af4f9c2d4bbf79ec6b72e2fe344d07f4660534ca4869ccdfa95274a0d58
4
- data.tar.gz: 1cbea7241abbe7a85800e5e9df75491695d1c10a8af66f4dd7b84e174c23b7ea
3
+ metadata.gz: 6c9bd0a03b27535a34a0525397e84c429a9332e6754dba43c088558ab8f362e9
4
+ data.tar.gz: '08fee2db2d83996d1df6f78e7eb9a226cb98d951cba336dd422771f9127cf95a'
5
5
  SHA512:
6
- metadata.gz: 8dd6fc27c641bf6ded12b52784dfdc99691d810d40a160f2a5dd19e0a49bf1530a6314b48bc248b6ec66127fa108c2186b00d4affe69505040306e0aca5a08eb
7
- data.tar.gz: 7a108824b94fd1e80c62e510cc5efc9aba2b62b8af83c6d4fe4c7cca19eb5a4a17a46abe32b74f0ab2a1cb3187f5688a0058f8f63ef0b1121cb44faae50e1546
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.perform_later(idx)
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 defined?(:SidekiqAdapter)
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 (true) Whether death handlers should be called
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.multi do |transaction|
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.
@@ -5,31 +5,21 @@ module Sidekiq
5
5
  def initialize(config)
6
6
  @config = config
7
7
  @logger = @config.logger
8
- end
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
- return yield if skip_default_logging?
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
- yield
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
- raise
32
- end
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
- job[key] = attrs if attrs.any?
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
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sidekiq
4
- VERSION = "7.3.4"
4
+ VERSION = "7.3.6"
5
5
  MAJOR = 7
6
6
 
7
7
  def self.gem_version
@@ -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
- @count = (params["count"] || 25).to_i
157
- (@current_page, @total_size, @dead) = page("dead", params["page"], @count, reverse: true)
158
- @dead = @dead.map { |msg, score| Sidekiq::SortedEntry.new(nil, score, msg) }
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
- @count = (params["count"] || 25).to_i
211
- (@current_page, @total_size, @retries) = page("retry", params["page"], @count)
212
- @retries = @retries.map { |msg, score| Sidekiq::SortedEntry.new(nil, score, msg) }
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
- @count = (params["count"] || 25).to_i
266
- (@current_page, @total_size, @scheduled) = page("schedule", params["page"], @count)
267
- @scheduled = @scheduled.map { |msg, score| Sidekiq::SortedEntry.new(nil, score, msg) }
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
 
@@ -650,6 +650,11 @@ div.interval-slider input {
650
650
  .redis-url {
651
651
  max-width: 160px;
652
652
  }
653
+
654
+ .navbar-fixed-bottom .nav {
655
+ margin-left: -15px;
656
+ margin-right: -15px;
657
+ }
653
658
  }
654
659
 
655
660
  @media (min-width: 992px) {
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: Thread
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
@@ -1,6 +1,5 @@
1
1
  <div>
2
- <form method="post" class="form-inline" action='<%= root_path %>filter/<%= which %>'>
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>
@@ -9,8 +9,7 @@
9
9
  </div>
10
10
 
11
11
  <div>
12
- <form id="metrics-form" class="form-inline" action="<%= root_path %>filter/metrics" method="post">
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
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-10-23 00:00:00.000000000 Z
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.11
235
+ rubygems_version: 3.5.16
236
236
  signing_key:
237
237
  specification_version: 4
238
238
  summary: Simple, efficient background processing for Ruby