sidekiq 5.2.9 → 6.4.0
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 +311 -1
- data/LICENSE +3 -3
- data/README.md +21 -37
- data/bin/sidekiq +26 -2
- data/bin/sidekiqload +32 -24
- 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 +313 -249
- data/lib/sidekiq/cli.rb +155 -181
- data/lib/sidekiq/client.rb +42 -60
- data/lib/sidekiq/delay.rb +7 -6
- data/lib/sidekiq/exception_handler.rb +10 -12
- data/lib/sidekiq/extensions/action_mailer.rb +15 -24
- data/lib/sidekiq/extensions/active_record.rb +15 -12
- data/lib/sidekiq/extensions/class_methods.rb +16 -13
- data/lib/sidekiq/extensions/generic_proxy.rb +8 -6
- data/lib/sidekiq/fetch.rb +39 -31
- data/lib/sidekiq/job.rb +13 -0
- data/lib/sidekiq/job_logger.rb +45 -7
- data/lib/sidekiq/job_retry.rb +70 -71
- data/lib/sidekiq/job_util.rb +65 -0
- data/lib/sidekiq/launcher.rb +150 -60
- data/lib/sidekiq/logger.rb +166 -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 +18 -14
- 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 +249 -105
- data/lib/sidekiq.rb +76 -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 +43 -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,16 @@ 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
|
+
if retryable && ex.message =~ /READONLY|NOREPLICAS|UNBLOCKED/
|
107
|
+
conn.disconnect!
|
108
|
+
retryable = false
|
109
|
+
retry
|
110
|
+
end
|
102
111
|
raise
|
103
112
|
end
|
104
113
|
end
|
@@ -106,19 +115,17 @@ module Sidekiq
|
|
106
115
|
|
107
116
|
def self.redis_info
|
108
117
|
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
|
118
|
+
# admin commands can't go through redis-namespace starting
|
119
|
+
# in redis-namespace 2.0
|
120
|
+
if conn.respond_to?(:namespace)
|
121
|
+
conn.redis.info
|
122
|
+
else
|
123
|
+
conn.info
|
121
124
|
end
|
125
|
+
rescue Redis::CommandError => ex
|
126
|
+
# 2850 return fake version when INFO command has (probably) been renamed
|
127
|
+
raise unless /unknown command/.match?(ex.message)
|
128
|
+
FAKE_INFO
|
122
129
|
end
|
123
130
|
end
|
124
131
|
|
@@ -152,18 +159,13 @@ module Sidekiq
|
|
152
159
|
|
153
160
|
def self.default_worker_options=(hash)
|
154
161
|
# stringify
|
155
|
-
@default_worker_options = default_worker_options.merge(
|
162
|
+
@default_worker_options = default_worker_options.merge(hash.transform_keys(&:to_s))
|
156
163
|
end
|
164
|
+
|
157
165
|
def self.default_worker_options
|
158
166
|
defined?(@default_worker_options) ? @default_worker_options : DEFAULT_WORKER_OPTIONS
|
159
167
|
end
|
160
168
|
|
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
169
|
##
|
168
170
|
# Death handlers are called when all retries for a job have been exhausted and
|
169
171
|
# the job dies. It's the notification to your application
|
@@ -180,15 +182,41 @@ module Sidekiq
|
|
180
182
|
def self.load_json(string)
|
181
183
|
JSON.parse(string)
|
182
184
|
end
|
185
|
+
|
183
186
|
def self.dump_json(object)
|
184
187
|
JSON.generate(object)
|
185
188
|
end
|
186
189
|
|
190
|
+
def self.log_formatter
|
191
|
+
@log_formatter ||= if ENV["DYNO"]
|
192
|
+
Sidekiq::Logger::Formatters::WithoutTimestamp.new
|
193
|
+
else
|
194
|
+
Sidekiq::Logger::Formatters::Pretty.new
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def self.log_formatter=(log_formatter)
|
199
|
+
@log_formatter = log_formatter
|
200
|
+
logger.formatter = log_formatter
|
201
|
+
end
|
202
|
+
|
187
203
|
def self.logger
|
188
|
-
Sidekiq::
|
204
|
+
@logger ||= Sidekiq::Logger.new($stdout, level: Logger::INFO)
|
205
|
+
end
|
206
|
+
|
207
|
+
def self.logger=(logger)
|
208
|
+
if logger.nil?
|
209
|
+
self.logger.level = Logger::FATAL
|
210
|
+
return self.logger
|
211
|
+
end
|
212
|
+
|
213
|
+
logger.extend(Sidekiq::LoggingUtils)
|
214
|
+
|
215
|
+
@logger = logger
|
189
216
|
end
|
190
|
-
|
191
|
-
|
217
|
+
|
218
|
+
def self.pro?
|
219
|
+
defined?(Sidekiq::Pro)
|
192
220
|
end
|
193
221
|
|
194
222
|
# How frequently Redis should be checked by a random Sidekiq process for
|
@@ -197,7 +225,7 @@ module Sidekiq
|
|
197
225
|
#
|
198
226
|
# See sidekiq/scheduled.rb for an in-depth explanation of this value
|
199
227
|
def self.average_scheduled_poll_interval=(interval)
|
200
|
-
|
228
|
+
options[:average_scheduled_poll_interval] = interval
|
201
229
|
end
|
202
230
|
|
203
231
|
# Register a proc to handle any error which occurs within the Sidekiq process.
|
@@ -208,7 +236,7 @@ module Sidekiq
|
|
208
236
|
#
|
209
237
|
# The default error handler logs errors to Sidekiq.logger.
|
210
238
|
def self.error_handlers
|
211
|
-
|
239
|
+
options[:error_handlers]
|
212
240
|
end
|
213
241
|
|
214
242
|
# Register a block to run at a point in the Sidekiq lifecycle.
|
@@ -225,6 +253,10 @@ module Sidekiq
|
|
225
253
|
options[:lifecycle_events][event] << block
|
226
254
|
end
|
227
255
|
|
256
|
+
def self.strict_args!(mode = :raise)
|
257
|
+
options[:on_complex_arguments] = mode
|
258
|
+
end
|
259
|
+
|
228
260
|
# We are shutting down Sidekiq but what about workers that
|
229
261
|
# are working on some long job? This error is
|
230
262
|
# raised in workers that have not finished within the hard
|
@@ -234,4 +266,4 @@ module Sidekiq
|
|
234
266
|
class Shutdown < Interrupt; end
|
235
267
|
end
|
236
268
|
|
237
|
-
require
|
269
|
+
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
|