sidekiq 5.2.9 → 6.4.1
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 +318 -1
- data/LICENSE +3 -3
- data/README.md +23 -34
- data/bin/sidekiq +27 -3
- data/bin/sidekiqload +67 -61
- data/bin/sidekiqmon +8 -0
- data/lib/generators/sidekiq/job_generator.rb +57 -0
- data/lib/generators/sidekiq/templates/{worker.rb.erb → job.rb.erb} +2 -2
- data/lib/generators/sidekiq/templates/{worker_spec.rb.erb → job_spec.rb.erb} +1 -1
- data/lib/generators/sidekiq/templates/{worker_test.rb.erb → job_test.rb.erb} +1 -1
- data/lib/sidekiq/api.rb +335 -267
- data/lib/sidekiq/cli.rb +164 -182
- data/lib/sidekiq/client.rb +58 -61
- data/lib/sidekiq/delay.rb +7 -6
- data/lib/sidekiq/exception_handler.rb +10 -12
- data/lib/sidekiq/extensions/action_mailer.rb +13 -22
- data/lib/sidekiq/extensions/active_record.rb +13 -10
- data/lib/sidekiq/extensions/class_methods.rb +14 -11
- data/lib/sidekiq/extensions/generic_proxy.rb +6 -4
- data/lib/sidekiq/fetch.rb +40 -32
- data/lib/sidekiq/job.rb +13 -0
- data/lib/sidekiq/job_logger.rb +33 -7
- data/lib/sidekiq/job_retry.rb +70 -71
- data/lib/sidekiq/job_util.rb +65 -0
- data/lib/sidekiq/launcher.rb +161 -71
- data/lib/sidekiq/logger.rb +170 -0
- data/lib/sidekiq/manager.rb +17 -21
- data/lib/sidekiq/middleware/chain.rb +20 -8
- data/lib/sidekiq/middleware/current_attributes.rb +57 -0
- data/lib/sidekiq/middleware/i18n.rb +5 -7
- data/lib/sidekiq/monitor.rb +133 -0
- data/lib/sidekiq/paginator.rb +20 -16
- data/lib/sidekiq/processor.rb +71 -70
- data/lib/sidekiq/rails.rb +40 -37
- data/lib/sidekiq/redis_connection.rb +48 -48
- data/lib/sidekiq/scheduled.rb +62 -28
- data/lib/sidekiq/sd_notify.rb +149 -0
- data/lib/sidekiq/systemd.rb +24 -0
- data/lib/sidekiq/testing/inline.rb +2 -1
- data/lib/sidekiq/testing.rb +36 -27
- data/lib/sidekiq/util.rb +57 -15
- data/lib/sidekiq/version.rb +2 -1
- data/lib/sidekiq/web/action.rb +15 -11
- data/lib/sidekiq/web/application.rb +88 -75
- data/lib/sidekiq/web/csrf_protection.rb +180 -0
- data/lib/sidekiq/web/helpers.rb +109 -92
- data/lib/sidekiq/web/router.rb +23 -19
- data/lib/sidekiq/web.rb +61 -105
- data/lib/sidekiq/worker.rb +247 -105
- data/lib/sidekiq.rb +77 -44
- data/sidekiq.gemspec +23 -16
- data/web/assets/images/apple-touch-icon.png +0 -0
- data/web/assets/javascripts/application.js +83 -64
- data/web/assets/javascripts/dashboard.js +54 -73
- data/web/assets/stylesheets/application-dark.css +143 -0
- data/web/assets/stylesheets/application-rtl.css +0 -4
- data/web/assets/stylesheets/application.css +45 -232
- data/web/locales/ar.yml +8 -2
- data/web/locales/de.yml +14 -2
- data/web/locales/en.yml +6 -1
- data/web/locales/es.yml +18 -2
- data/web/locales/fr.yml +10 -3
- data/web/locales/ja.yml +7 -1
- data/web/locales/lt.yml +83 -0
- data/web/locales/pl.yml +4 -4
- data/web/locales/ru.yml +4 -0
- data/web/locales/vi.yml +83 -0
- data/web/views/_footer.erb +1 -1
- data/web/views/_job_info.erb +3 -2
- data/web/views/_poll_link.erb +2 -5
- data/web/views/_summary.erb +7 -7
- data/web/views/busy.erb +54 -20
- data/web/views/dashboard.erb +22 -14
- data/web/views/dead.erb +3 -3
- data/web/views/layout.erb +3 -1
- data/web/views/morgue.erb +9 -6
- data/web/views/queue.erb +19 -10
- data/web/views/queues.erb +10 -2
- data/web/views/retries.erb +11 -8
- data/web/views/retry.erb +3 -3
- data/web/views/scheduled.erb +5 -2
- metadata +34 -64
- data/.circleci/config.yml +0 -61
- data/.github/contributing.md +0 -32
- data/.github/issue_template.md +0 -11
- data/.gitignore +0 -15
- data/.travis.yml +0 -11
- data/3.0-Upgrade.md +0 -70
- data/4.0-Upgrade.md +0 -53
- data/5.0-Upgrade.md +0 -56
- data/COMM-LICENSE +0 -97
- data/Ent-Changes.md +0 -238
- data/Gemfile +0 -23
- data/Pro-2.0-Upgrade.md +0 -138
- data/Pro-3.0-Upgrade.md +0 -44
- data/Pro-4.0-Upgrade.md +0 -35
- data/Pro-Changes.md +0 -759
- data/Rakefile +0 -9
- data/bin/sidekiqctl +0 -20
- data/code_of_conduct.md +0 -50
- data/lib/generators/sidekiq/worker_generator.rb +0 -49
- data/lib/sidekiq/core_ext.rb +0 -1
- data/lib/sidekiq/ctl.rb +0 -221
- data/lib/sidekiq/logging.rb +0 -122
- data/lib/sidekiq/middleware/server/active_record.rb +0 -23
data/lib/sidekiq.rb
CHANGED
@@ -1,45 +1,48 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
fail "Sidekiq #{Sidekiq::VERSION} does not support Ruby versions below 2.
|
3
|
+
require "sidekiq/version"
|
4
|
+
fail "Sidekiq #{Sidekiq::VERSION} does not support Ruby versions below 2.5.0." if RUBY_PLATFORM != "java" && Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.5.0")
|
5
5
|
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
6
|
+
require "sidekiq/logger"
|
7
|
+
require "sidekiq/client"
|
8
|
+
require "sidekiq/worker"
|
9
|
+
require "sidekiq/job"
|
10
|
+
require "sidekiq/redis_connection"
|
11
|
+
require "sidekiq/delay"
|
11
12
|
|
12
|
-
require
|
13
|
+
require "json"
|
13
14
|
|
14
15
|
module Sidekiq
|
15
|
-
NAME =
|
16
|
-
LICENSE =
|
16
|
+
NAME = "Sidekiq"
|
17
|
+
LICENSE = "See LICENSE and the LGPL-3.0 for licensing details."
|
17
18
|
|
18
19
|
DEFAULTS = {
|
19
20
|
queues: [],
|
20
21
|
labels: [],
|
21
22
|
concurrency: 10,
|
22
|
-
require:
|
23
|
+
require: ".",
|
24
|
+
strict: true,
|
23
25
|
environment: nil,
|
24
|
-
timeout:
|
26
|
+
timeout: 25,
|
25
27
|
poll_interval_average: nil,
|
26
28
|
average_scheduled_poll_interval: 5,
|
29
|
+
on_complex_arguments: :warn,
|
27
30
|
error_handlers: [],
|
28
31
|
death_handlers: [],
|
29
32
|
lifecycle_events: {
|
30
33
|
startup: [],
|
31
34
|
quiet: [],
|
32
35
|
shutdown: [],
|
33
|
-
heartbeat: []
|
36
|
+
heartbeat: []
|
34
37
|
},
|
35
38
|
dead_max_jobs: 10_000,
|
36
39
|
dead_timeout_in_seconds: 180 * 24 * 60 * 60, # 6 months
|
37
|
-
reloader: proc { |&block| block.call }
|
40
|
+
reloader: proc { |&block| block.call }
|
38
41
|
}
|
39
42
|
|
40
43
|
DEFAULT_WORKER_OPTIONS = {
|
41
|
-
|
42
|
-
|
44
|
+
"retry" => true,
|
45
|
+
"queue" => "default"
|
43
46
|
}
|
44
47
|
|
45
48
|
FAKE_INFO = {
|
@@ -95,10 +98,17 @@ module Sidekiq
|
|
95
98
|
retryable = true
|
96
99
|
begin
|
97
100
|
yield conn
|
98
|
-
rescue Redis::
|
99
|
-
#2550 Failover can cause the server to become a replica, need
|
101
|
+
rescue Redis::BaseError => ex
|
102
|
+
# 2550 Failover can cause the server to become a replica, need
|
100
103
|
# to disconnect and reopen the socket to get back to the primary.
|
101
|
-
|
104
|
+
# 4495 Use the same logic if we have a "Not enough replicas" error from the primary
|
105
|
+
# 4985 Use the same logic when a blocking command is force-unblocked
|
106
|
+
# The same retry logic is also used in client.rb
|
107
|
+
if retryable && ex.message =~ /READONLY|NOREPLICAS|UNBLOCKED/
|
108
|
+
conn.disconnect!
|
109
|
+
retryable = false
|
110
|
+
retry
|
111
|
+
end
|
102
112
|
raise
|
103
113
|
end
|
104
114
|
end
|
@@ -106,19 +116,17 @@ module Sidekiq
|
|
106
116
|
|
107
117
|
def self.redis_info
|
108
118
|
redis do |conn|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
conn.info
|
116
|
-
end
|
117
|
-
rescue Redis::CommandError => ex
|
118
|
-
#2850 return fake version when INFO command has (probably) been renamed
|
119
|
-
raise unless ex.message =~ /unknown command/
|
120
|
-
FAKE_INFO
|
119
|
+
# admin commands can't go through redis-namespace starting
|
120
|
+
# in redis-namespace 2.0
|
121
|
+
if conn.respond_to?(:namespace)
|
122
|
+
conn.redis.info
|
123
|
+
else
|
124
|
+
conn.info
|
121
125
|
end
|
126
|
+
rescue Redis::CommandError => ex
|
127
|
+
# 2850 return fake version when INFO command has (probably) been renamed
|
128
|
+
raise unless /unknown command/.match?(ex.message)
|
129
|
+
FAKE_INFO
|
122
130
|
end
|
123
131
|
end
|
124
132
|
|
@@ -152,18 +160,13 @@ module Sidekiq
|
|
152
160
|
|
153
161
|
def self.default_worker_options=(hash)
|
154
162
|
# stringify
|
155
|
-
@default_worker_options = default_worker_options.merge(
|
163
|
+
@default_worker_options = default_worker_options.merge(hash.transform_keys(&:to_s))
|
156
164
|
end
|
165
|
+
|
157
166
|
def self.default_worker_options
|
158
167
|
defined?(@default_worker_options) ? @default_worker_options : DEFAULT_WORKER_OPTIONS
|
159
168
|
end
|
160
169
|
|
161
|
-
def self.default_retries_exhausted=(prok)
|
162
|
-
logger.info { "default_retries_exhausted is deprecated, please use `config.death_handlers << -> {|job, ex| }`" }
|
163
|
-
return nil unless prok
|
164
|
-
death_handlers << prok
|
165
|
-
end
|
166
|
-
|
167
170
|
##
|
168
171
|
# Death handlers are called when all retries for a job have been exhausted and
|
169
172
|
# the job dies. It's the notification to your application
|
@@ -180,15 +183,41 @@ module Sidekiq
|
|
180
183
|
def self.load_json(string)
|
181
184
|
JSON.parse(string)
|
182
185
|
end
|
186
|
+
|
183
187
|
def self.dump_json(object)
|
184
188
|
JSON.generate(object)
|
185
189
|
end
|
186
190
|
|
191
|
+
def self.log_formatter
|
192
|
+
@log_formatter ||= if ENV["DYNO"]
|
193
|
+
Sidekiq::Logger::Formatters::WithoutTimestamp.new
|
194
|
+
else
|
195
|
+
Sidekiq::Logger::Formatters::Pretty.new
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
def self.log_formatter=(log_formatter)
|
200
|
+
@log_formatter = log_formatter
|
201
|
+
logger.formatter = log_formatter
|
202
|
+
end
|
203
|
+
|
187
204
|
def self.logger
|
188
|
-
Sidekiq::
|
205
|
+
@logger ||= Sidekiq::Logger.new($stdout, level: Logger::INFO)
|
206
|
+
end
|
207
|
+
|
208
|
+
def self.logger=(logger)
|
209
|
+
if logger.nil?
|
210
|
+
self.logger.level = Logger::FATAL
|
211
|
+
return self.logger
|
212
|
+
end
|
213
|
+
|
214
|
+
logger.extend(Sidekiq::LoggingUtils)
|
215
|
+
|
216
|
+
@logger = logger
|
189
217
|
end
|
190
|
-
|
191
|
-
|
218
|
+
|
219
|
+
def self.pro?
|
220
|
+
defined?(Sidekiq::Pro)
|
192
221
|
end
|
193
222
|
|
194
223
|
# How frequently Redis should be checked by a random Sidekiq process for
|
@@ -197,7 +226,7 @@ module Sidekiq
|
|
197
226
|
#
|
198
227
|
# See sidekiq/scheduled.rb for an in-depth explanation of this value
|
199
228
|
def self.average_scheduled_poll_interval=(interval)
|
200
|
-
|
229
|
+
options[:average_scheduled_poll_interval] = interval
|
201
230
|
end
|
202
231
|
|
203
232
|
# Register a proc to handle any error which occurs within the Sidekiq process.
|
@@ -208,7 +237,7 @@ module Sidekiq
|
|
208
237
|
#
|
209
238
|
# The default error handler logs errors to Sidekiq.logger.
|
210
239
|
def self.error_handlers
|
211
|
-
|
240
|
+
options[:error_handlers]
|
212
241
|
end
|
213
242
|
|
214
243
|
# Register a block to run at a point in the Sidekiq lifecycle.
|
@@ -225,6 +254,10 @@ module Sidekiq
|
|
225
254
|
options[:lifecycle_events][event] << block
|
226
255
|
end
|
227
256
|
|
257
|
+
def self.strict_args!(mode = :raise)
|
258
|
+
options[:on_complex_arguments] = mode
|
259
|
+
end
|
260
|
+
|
228
261
|
# We are shutting down Sidekiq but what about workers that
|
229
262
|
# are working on some long job? This error is
|
230
263
|
# raised in workers that have not finished within the hard
|
@@ -234,4 +267,4 @@ module Sidekiq
|
|
234
267
|
class Shutdown < Interrupt; end
|
235
268
|
end
|
236
269
|
|
237
|
-
require
|
270
|
+
require "sidekiq/rails" if defined?(::Rails::Engine)
|
data/sidekiq.gemspec
CHANGED
@@ -1,21 +1,28 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "lib/sidekiq/version"
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
|
-
gem.authors
|
5
|
-
gem.email
|
6
|
-
gem.summary
|
7
|
-
gem.description
|
8
|
-
gem.homepage
|
9
|
-
gem.license
|
4
|
+
gem.authors = ["Mike Perham"]
|
5
|
+
gem.email = ["mperham@gmail.com"]
|
6
|
+
gem.summary = "Simple, efficient background processing for Ruby"
|
7
|
+
gem.description = "Simple, efficient background processing for Ruby."
|
8
|
+
gem.homepage = "https://sidekiq.org"
|
9
|
+
gem.license = "LGPL-3.0"
|
10
10
|
|
11
|
-
gem.executables
|
12
|
-
gem.files
|
13
|
-
gem.name
|
14
|
-
gem.version
|
15
|
-
gem.required_ruby_version = ">= 2.
|
11
|
+
gem.executables = ["sidekiq", "sidekiqmon"]
|
12
|
+
gem.files = ["sidekiq.gemspec", "README.md", "Changes.md", "LICENSE"] + `git ls-files | grep -E '^(bin|lib|web)'`.split("\n")
|
13
|
+
gem.name = "sidekiq"
|
14
|
+
gem.version = Sidekiq::VERSION
|
15
|
+
gem.required_ruby_version = ">= 2.5.0"
|
16
16
|
|
17
|
-
gem.
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
gem.metadata = {
|
18
|
+
"homepage_uri" => "https://sidekiq.org",
|
19
|
+
"bug_tracker_uri" => "https://github.com/mperham/sidekiq/issues",
|
20
|
+
"documentation_uri" => "https://github.com/mperham/sidekiq/wiki",
|
21
|
+
"changelog_uri" => "https://github.com/mperham/sidekiq/blob/main/Changes.md",
|
22
|
+
"source_code_uri" => "https://github.com/mperham/sidekiq"
|
23
|
+
}
|
24
|
+
|
25
|
+
gem.add_dependency "redis", ">= 4.2.0"
|
26
|
+
gem.add_dependency "connection_pool", ">= 2.2.2"
|
27
|
+
gem.add_dependency "rack", "~> 2.0"
|
21
28
|
end
|
Binary file
|