sidekiq 6.4.2 → 6.5.5
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 +4 -4
- data/Changes.md +52 -0
- data/bin/sidekiqload +15 -3
- data/lib/sidekiq/api.rb +163 -32
- data/lib/sidekiq/cli.rb +34 -32
- data/lib/sidekiq/client.rb +4 -4
- data/lib/sidekiq/component.rb +65 -0
- data/lib/sidekiq/delay.rb +1 -1
- data/lib/sidekiq/fetch.rb +16 -14
- data/lib/sidekiq/job_retry.rb +60 -39
- data/lib/sidekiq/job_util.rb +7 -3
- data/lib/sidekiq/launcher.rb +22 -19
- data/lib/sidekiq/logger.rb +1 -1
- data/lib/sidekiq/manager.rb +23 -20
- data/lib/sidekiq/metrics/deploy.rb +47 -0
- data/lib/sidekiq/metrics/query.rb +153 -0
- data/lib/sidekiq/metrics/shared.rb +94 -0
- data/lib/sidekiq/metrics/tracking.rb +134 -0
- data/lib/sidekiq/middleware/chain.rb +82 -38
- data/lib/sidekiq/middleware/current_attributes.rb +10 -4
- data/lib/sidekiq/middleware/i18n.rb +2 -0
- data/lib/sidekiq/middleware/modules.rb +21 -0
- data/lib/sidekiq/paginator.rb +2 -2
- data/lib/sidekiq/processor.rb +21 -15
- data/lib/sidekiq/rails.rb +5 -5
- data/lib/sidekiq/redis_client_adapter.rb +154 -0
- data/lib/sidekiq/redis_connection.rb +80 -47
- data/lib/sidekiq/ring_buffer.rb +29 -0
- data/lib/sidekiq/scheduled.rb +12 -17
- data/lib/sidekiq/testing.rb +1 -1
- data/lib/sidekiq/transaction_aware_client.rb +45 -0
- data/lib/sidekiq/version.rb +1 -1
- data/lib/sidekiq/web/action.rb +3 -3
- data/lib/sidekiq/web/application.rb +18 -5
- data/lib/sidekiq/web/helpers.rb +25 -2
- data/lib/sidekiq/web.rb +5 -1
- data/lib/sidekiq/worker.rb +2 -1
- data/lib/sidekiq.rb +87 -18
- data/sidekiq.gemspec +1 -1
- data/web/assets/javascripts/application.js +1 -1
- data/web/assets/javascripts/chart.min.js +13 -0
- data/web/assets/javascripts/chartjs-plugin-annotation.min.js +7 -0
- data/web/assets/javascripts/dashboard.js +0 -17
- data/web/assets/javascripts/graph.js +16 -0
- data/web/assets/javascripts/metrics.js +262 -0
- data/web/assets/stylesheets/application.css +44 -1
- data/web/locales/el.yml +43 -19
- data/web/locales/en.yml +7 -0
- data/web/locales/pt-br.yml +27 -9
- data/web/views/_nav.erb +1 -1
- data/web/views/busy.erb +1 -1
- data/web/views/dashboard.erb +1 -0
- data/web/views/metrics.erb +69 -0
- data/web/views/metrics_for_job.erb +87 -0
- data/web/views/queue.erb +5 -1
- metadata +19 -6
- data/lib/sidekiq/exception_handler.rb +0 -27
- data/lib/sidekiq/util.rb +0 -108
data/web/views/queue.erb
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
<th><a href="<%= url %>?direction=<%= params[:direction] == 'asc' ? 'desc' : 'asc' %>"># <%= sort_direction_label %></a></th>
|
19
19
|
<th><%= t('Job') %></th>
|
20
20
|
<th><%= t('Arguments') %></th>
|
21
|
+
<th><%= t('Context') %></th>
|
21
22
|
<th></th>
|
22
23
|
</thead>
|
23
24
|
<% @jobs.each_with_index do |job, index| %>
|
@@ -35,12 +36,15 @@
|
|
35
36
|
<% a = job.display_args %>
|
36
37
|
<% if a.inspect.size > 100 %>
|
37
38
|
<span id="job_<%= index %>"><%= h(a.inspect[0..100]) + "... " %></span>
|
38
|
-
<button data-toggle="job_<%= index %>" class="btn btn-default btn-xs"><%= t('ShowAll') %></button>
|
39
|
+
<button data-toggle="job_<%= index %>_full" class="btn btn-default btn-xs"><%= t('ShowAll') %></button>
|
39
40
|
<div class="toggle" id="job_<%= index %>_full"><%= display_args(a) %></div>
|
40
41
|
<% else %>
|
41
42
|
<%= display_args(job.display_args) %>
|
42
43
|
<% end %>
|
43
44
|
</td>
|
45
|
+
<td>
|
46
|
+
<%= h(job["cattr"].inspect) if job["cattr"]&.any? %>
|
47
|
+
</td>
|
44
48
|
<td>
|
45
49
|
<form action="<%= root_path %>queues/<%= CGI.escape(@name) %>/delete" method="post">
|
46
50
|
<%= csrf_tag %>
|
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: 6.
|
4
|
+
version: 6.5.5
|
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
|
+
date: 2022-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.
|
19
|
+
version: 4.5.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.
|
26
|
+
version: 4.5.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: connection_pool
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,8 +75,8 @@ files:
|
|
75
75
|
- lib/sidekiq/api.rb
|
76
76
|
- lib/sidekiq/cli.rb
|
77
77
|
- lib/sidekiq/client.rb
|
78
|
+
- lib/sidekiq/component.rb
|
78
79
|
- lib/sidekiq/delay.rb
|
79
|
-
- lib/sidekiq/exception_handler.rb
|
80
80
|
- lib/sidekiq/extensions/action_mailer.rb
|
81
81
|
- lib/sidekiq/extensions/active_record.rb
|
82
82
|
- lib/sidekiq/extensions/class_methods.rb
|
@@ -89,20 +89,27 @@ files:
|
|
89
89
|
- lib/sidekiq/launcher.rb
|
90
90
|
- lib/sidekiq/logger.rb
|
91
91
|
- lib/sidekiq/manager.rb
|
92
|
+
- lib/sidekiq/metrics/deploy.rb
|
93
|
+
- lib/sidekiq/metrics/query.rb
|
94
|
+
- lib/sidekiq/metrics/shared.rb
|
95
|
+
- lib/sidekiq/metrics/tracking.rb
|
92
96
|
- lib/sidekiq/middleware/chain.rb
|
93
97
|
- lib/sidekiq/middleware/current_attributes.rb
|
94
98
|
- lib/sidekiq/middleware/i18n.rb
|
99
|
+
- lib/sidekiq/middleware/modules.rb
|
95
100
|
- lib/sidekiq/monitor.rb
|
96
101
|
- lib/sidekiq/paginator.rb
|
97
102
|
- lib/sidekiq/processor.rb
|
98
103
|
- lib/sidekiq/rails.rb
|
104
|
+
- lib/sidekiq/redis_client_adapter.rb
|
99
105
|
- lib/sidekiq/redis_connection.rb
|
106
|
+
- lib/sidekiq/ring_buffer.rb
|
100
107
|
- lib/sidekiq/scheduled.rb
|
101
108
|
- lib/sidekiq/sd_notify.rb
|
102
109
|
- lib/sidekiq/systemd.rb
|
103
110
|
- lib/sidekiq/testing.rb
|
104
111
|
- lib/sidekiq/testing/inline.rb
|
105
|
-
- lib/sidekiq/
|
112
|
+
- lib/sidekiq/transaction_aware_client.rb
|
106
113
|
- lib/sidekiq/version.rb
|
107
114
|
- lib/sidekiq/web.rb
|
108
115
|
- lib/sidekiq/web/action.rb
|
@@ -117,7 +124,11 @@ files:
|
|
117
124
|
- web/assets/images/logo.png
|
118
125
|
- web/assets/images/status.png
|
119
126
|
- web/assets/javascripts/application.js
|
127
|
+
- web/assets/javascripts/chart.min.js
|
128
|
+
- web/assets/javascripts/chartjs-plugin-annotation.min.js
|
120
129
|
- web/assets/javascripts/dashboard.js
|
130
|
+
- web/assets/javascripts/graph.js
|
131
|
+
- web/assets/javascripts/metrics.js
|
121
132
|
- web/assets/stylesheets/application-dark.css
|
122
133
|
- web/assets/stylesheets/application-rtl.css
|
123
134
|
- web/assets/stylesheets/application.css
|
@@ -162,6 +173,8 @@ files:
|
|
162
173
|
- web/views/dashboard.erb
|
163
174
|
- web/views/dead.erb
|
164
175
|
- web/views/layout.erb
|
176
|
+
- web/views/metrics.erb
|
177
|
+
- web/views/metrics_for_job.erb
|
165
178
|
- web/views/morgue.erb
|
166
179
|
- web/views/queue.erb
|
167
180
|
- web/views/queues.erb
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "sidekiq"
|
4
|
-
|
5
|
-
module Sidekiq
|
6
|
-
module ExceptionHandler
|
7
|
-
class Logger
|
8
|
-
def call(ex, ctx)
|
9
|
-
Sidekiq.logger.warn(Sidekiq.dump_json(ctx)) unless ctx.empty?
|
10
|
-
Sidekiq.logger.warn("#{ex.class.name}: #{ex.message}")
|
11
|
-
Sidekiq.logger.warn(ex.backtrace.join("\n")) unless ex.backtrace.nil?
|
12
|
-
end
|
13
|
-
|
14
|
-
Sidekiq.error_handlers << Sidekiq::ExceptionHandler::Logger.new
|
15
|
-
end
|
16
|
-
|
17
|
-
def handle_exception(ex, ctx = {})
|
18
|
-
Sidekiq.error_handlers.each do |handler|
|
19
|
-
handler.call(ex, ctx)
|
20
|
-
rescue => ex
|
21
|
-
Sidekiq.logger.error "!!! ERROR HANDLER THREW AN ERROR !!!"
|
22
|
-
Sidekiq.logger.error ex
|
23
|
-
Sidekiq.logger.error ex.backtrace.join("\n") unless ex.backtrace.nil?
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/lib/sidekiq/util.rb
DELETED
@@ -1,108 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "forwardable"
|
4
|
-
require "socket"
|
5
|
-
require "securerandom"
|
6
|
-
require "sidekiq/exception_handler"
|
7
|
-
|
8
|
-
module Sidekiq
|
9
|
-
##
|
10
|
-
# This module is part of Sidekiq core and not intended for extensions.
|
11
|
-
#
|
12
|
-
|
13
|
-
class RingBuffer
|
14
|
-
include Enumerable
|
15
|
-
extend Forwardable
|
16
|
-
def_delegators :@buf, :[], :each, :size
|
17
|
-
|
18
|
-
def initialize(size, default = 0)
|
19
|
-
@size = size
|
20
|
-
@buf = Array.new(size, default)
|
21
|
-
@index = 0
|
22
|
-
end
|
23
|
-
|
24
|
-
def <<(element)
|
25
|
-
@buf[@index % @size] = element
|
26
|
-
@index += 1
|
27
|
-
element
|
28
|
-
end
|
29
|
-
|
30
|
-
def buffer
|
31
|
-
@buf
|
32
|
-
end
|
33
|
-
|
34
|
-
def reset(default = 0)
|
35
|
-
@buf.fill(default)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
module Util
|
40
|
-
include ExceptionHandler
|
41
|
-
|
42
|
-
# hack for quicker development / testing environment #2774
|
43
|
-
PAUSE_TIME = $stdout.tty? ? 0.1 : 0.5
|
44
|
-
|
45
|
-
# Wait for the orblock to be true or the deadline passed.
|
46
|
-
def wait_for(deadline, &condblock)
|
47
|
-
remaining = deadline - ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
|
48
|
-
while remaining > PAUSE_TIME
|
49
|
-
return if condblock.call
|
50
|
-
sleep PAUSE_TIME
|
51
|
-
remaining = deadline - ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def watchdog(last_words)
|
56
|
-
yield
|
57
|
-
rescue Exception => ex
|
58
|
-
handle_exception(ex, {context: last_words})
|
59
|
-
raise ex
|
60
|
-
end
|
61
|
-
|
62
|
-
def safe_thread(name, &block)
|
63
|
-
Thread.new do
|
64
|
-
Thread.current.name = name
|
65
|
-
watchdog(name, &block)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def logger
|
70
|
-
Sidekiq.logger
|
71
|
-
end
|
72
|
-
|
73
|
-
def redis(&block)
|
74
|
-
Sidekiq.redis(&block)
|
75
|
-
end
|
76
|
-
|
77
|
-
def tid
|
78
|
-
Thread.current["sidekiq_tid"] ||= (Thread.current.object_id ^ ::Process.pid).to_s(36)
|
79
|
-
end
|
80
|
-
|
81
|
-
def hostname
|
82
|
-
ENV["DYNO"] || Socket.gethostname
|
83
|
-
end
|
84
|
-
|
85
|
-
def process_nonce
|
86
|
-
@@process_nonce ||= SecureRandom.hex(6)
|
87
|
-
end
|
88
|
-
|
89
|
-
def identity
|
90
|
-
@@identity ||= "#{hostname}:#{::Process.pid}:#{process_nonce}"
|
91
|
-
end
|
92
|
-
|
93
|
-
def fire_event(event, options = {})
|
94
|
-
reverse = options[:reverse]
|
95
|
-
reraise = options[:reraise]
|
96
|
-
|
97
|
-
arr = Sidekiq.options[:lifecycle_events][event]
|
98
|
-
arr.reverse! if reverse
|
99
|
-
arr.each do |block|
|
100
|
-
block.call
|
101
|
-
rescue => ex
|
102
|
-
handle_exception(ex, {context: "Exception during Sidekiq lifecycle event.", event: event})
|
103
|
-
raise ex if reraise
|
104
|
-
end
|
105
|
-
arr.clear
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|