sidekiq 4.2.4 → 6.2.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 +5 -5
- data/Changes.md +445 -0
- data/LICENSE +1 -1
- data/README.md +21 -34
- data/bin/sidekiq +26 -2
- data/bin/sidekiqload +28 -38
- data/bin/sidekiqmon +8 -0
- data/lib/generators/sidekiq/templates/worker_spec.rb.erb +1 -1
- data/lib/generators/sidekiq/templates/worker_test.rb.erb +2 -2
- data/lib/generators/sidekiq/worker_generator.rb +21 -13
- data/lib/sidekiq/api.rb +347 -213
- data/lib/sidekiq/cli.rb +221 -212
- data/lib/sidekiq/client.rb +75 -52
- data/lib/sidekiq/delay.rb +41 -0
- data/lib/sidekiq/exception_handler.rb +12 -16
- 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 +10 -4
- data/lib/sidekiq/fetch.rb +38 -31
- data/lib/sidekiq/job_logger.rb +63 -0
- data/lib/sidekiq/job_retry.rb +263 -0
- data/lib/sidekiq/launcher.rb +169 -70
- data/lib/sidekiq/logger.rb +166 -0
- data/lib/sidekiq/manager.rb +17 -20
- data/lib/sidekiq/middleware/chain.rb +15 -5
- 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 +161 -70
- data/lib/sidekiq/rails.rb +30 -73
- data/lib/sidekiq/redis_connection.rb +67 -20
- data/lib/sidekiq/scheduled.rb +61 -35
- 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 +54 -26
- data/lib/sidekiq/util.rb +48 -15
- data/lib/sidekiq/version.rb +2 -1
- data/lib/sidekiq/web/action.rb +15 -15
- data/lib/sidekiq/web/application.rb +112 -89
- data/lib/sidekiq/web/csrf_protection.rb +180 -0
- data/lib/sidekiq/web/helpers.rb +153 -73
- data/lib/sidekiq/web/router.rb +27 -19
- data/lib/sidekiq/web.rb +64 -109
- data/lib/sidekiq/worker.rb +164 -41
- data/lib/sidekiq.rb +86 -60
- data/sidekiq.gemspec +24 -22
- data/web/assets/images/apple-touch-icon.png +0 -0
- data/web/assets/javascripts/application.js +25 -27
- data/web/assets/javascripts/dashboard.js +34 -38
- data/web/assets/stylesheets/application-dark.css +160 -0
- data/web/assets/stylesheets/application-rtl.css +246 -0
- data/web/assets/stylesheets/application.css +402 -12
- data/web/assets/stylesheets/bootstrap-rtl.min.css +9 -0
- data/web/assets/stylesheets/bootstrap.css +2 -2
- data/web/locales/ar.yml +81 -0
- data/web/locales/de.yml +14 -2
- data/web/locales/en.yml +4 -0
- data/web/locales/es.yml +4 -3
- data/web/locales/fa.yml +80 -0
- data/web/locales/fr.yml +3 -3
- data/web/locales/he.yml +79 -0
- data/web/locales/ja.yml +9 -4
- data/web/locales/lt.yml +83 -0
- data/web/locales/pl.yml +4 -4
- data/web/locales/ru.yml +4 -0
- data/web/locales/ur.yml +80 -0
- data/web/locales/vi.yml +83 -0
- data/web/views/_footer.erb +5 -2
- data/web/views/_job_info.erb +3 -2
- data/web/views/_nav.erb +4 -18
- data/web/views/_paging.erb +1 -1
- data/web/views/busy.erb +57 -19
- data/web/views/dashboard.erb +3 -3
- data/web/views/dead.erb +2 -2
- data/web/views/layout.erb +13 -2
- data/web/views/morgue.erb +19 -12
- data/web/views/queue.erb +22 -12
- data/web/views/queues.erb +13 -3
- data/web/views/retries.erb +22 -13
- data/web/views/retry.erb +3 -3
- data/web/views/scheduled.erb +7 -4
- metadata +42 -194
- data/.github/contributing.md +0 -32
- data/.github/issue_template.md +0 -4
- data/.gitignore +0 -12
- data/.travis.yml +0 -12
- data/3.0-Upgrade.md +0 -70
- data/4.0-Upgrade.md +0 -53
- data/COMM-LICENSE +0 -95
- data/Ent-Changes.md +0 -146
- data/Gemfile +0 -29
- data/Pro-2.0-Upgrade.md +0 -138
- data/Pro-3.0-Upgrade.md +0 -44
- data/Pro-Changes.md +0 -585
- data/Rakefile +0 -9
- data/bin/sidekiqctl +0 -99
- data/code_of_conduct.md +0 -50
- data/lib/sidekiq/core_ext.rb +0 -106
- data/lib/sidekiq/logging.rb +0 -106
- data/lib/sidekiq/middleware/server/active_record.rb +0 -13
- data/lib/sidekiq/middleware/server/logging.rb +0 -40
- data/lib/sidekiq/middleware/server/retry_jobs.rb +0 -205
- data/test/config.yml +0 -9
- data/test/env_based_config.yml +0 -11
- data/test/fake_env.rb +0 -1
- data/test/fixtures/en.yml +0 -2
- data/test/helper.rb +0 -75
- data/test/test_actors.rb +0 -138
- data/test/test_api.rb +0 -528
- data/test/test_cli.rb +0 -418
- data/test/test_client.rb +0 -266
- data/test/test_exception_handler.rb +0 -56
- data/test/test_extensions.rb +0 -127
- data/test/test_fetch.rb +0 -50
- data/test/test_launcher.rb +0 -95
- data/test/test_logging.rb +0 -35
- data/test/test_manager.rb +0 -50
- data/test/test_middleware.rb +0 -158
- data/test/test_processor.rb +0 -235
- data/test/test_rails.rb +0 -22
- data/test/test_redis_connection.rb +0 -132
- data/test/test_retry.rb +0 -326
- data/test/test_retry_exhausted.rb +0 -149
- data/test/test_scheduled.rb +0 -115
- data/test/test_scheduling.rb +0 -58
- data/test/test_sidekiq.rb +0 -107
- data/test/test_testing.rb +0 -143
- data/test/test_testing_fake.rb +0 -357
- data/test/test_testing_inline.rb +0 -94
- data/test/test_util.rb +0 -13
- data/test/test_web.rb +0 -726
- data/test/test_web_helpers.rb +0 -54
data/lib/sidekiq.rb
CHANGED
@@ -1,43 +1,46 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
# encoding: utf-8
|
3
|
-
require 'sidekiq/version'
|
4
|
-
fail "Sidekiq #{Sidekiq::VERSION} does not support Ruby versions below 2.0.0." if RUBY_PLATFORM != 'java' && RUBY_VERSION < '2.0.0'
|
5
2
|
|
6
|
-
require
|
7
|
-
|
8
|
-
require 'sidekiq/worker'
|
9
|
-
require 'sidekiq/redis_connection'
|
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")
|
10
5
|
|
11
|
-
require
|
6
|
+
require "sidekiq/logger"
|
7
|
+
require "sidekiq/client"
|
8
|
+
require "sidekiq/worker"
|
9
|
+
require "sidekiq/redis_connection"
|
10
|
+
require "sidekiq/delay"
|
11
|
+
|
12
|
+
require "json"
|
12
13
|
|
13
14
|
module Sidekiq
|
14
|
-
NAME =
|
15
|
-
LICENSE =
|
15
|
+
NAME = "Sidekiq"
|
16
|
+
LICENSE = "See LICENSE and the LGPL-3.0 for licensing details."
|
16
17
|
|
17
18
|
DEFAULTS = {
|
18
19
|
queues: [],
|
19
20
|
labels: [],
|
20
|
-
concurrency:
|
21
|
-
require:
|
21
|
+
concurrency: 10,
|
22
|
+
require: ".",
|
23
|
+
strict: true,
|
22
24
|
environment: nil,
|
23
|
-
timeout:
|
25
|
+
timeout: 25,
|
24
26
|
poll_interval_average: nil,
|
25
|
-
average_scheduled_poll_interval:
|
27
|
+
average_scheduled_poll_interval: 5,
|
26
28
|
error_handlers: [],
|
29
|
+
death_handlers: [],
|
27
30
|
lifecycle_events: {
|
28
31
|
startup: [],
|
29
32
|
quiet: [],
|
30
33
|
shutdown: [],
|
31
|
-
heartbeat: []
|
34
|
+
heartbeat: []
|
32
35
|
},
|
33
36
|
dead_max_jobs: 10_000,
|
34
37
|
dead_timeout_in_seconds: 180 * 24 * 60 * 60, # 6 months
|
35
|
-
reloader: proc { |&block| block.call }
|
38
|
+
reloader: proc { |&block| block.call }
|
36
39
|
}
|
37
40
|
|
38
41
|
DEFAULT_WORKER_OPTIONS = {
|
39
|
-
|
40
|
-
|
42
|
+
"retry" => true,
|
43
|
+
"queue" => "default"
|
41
44
|
}
|
42
45
|
|
43
46
|
FAKE_INFO = {
|
@@ -46,7 +49,7 @@ module Sidekiq
|
|
46
49
|
"connected_clients" => "9999",
|
47
50
|
"used_memory_human" => "9P",
|
48
51
|
"used_memory_peak_human" => "9P"
|
49
|
-
}
|
52
|
+
}
|
50
53
|
|
51
54
|
def self.❨╯°□°❩╯︵┻━┻
|
52
55
|
puts "Calm down, yo."
|
@@ -55,6 +58,7 @@ module Sidekiq
|
|
55
58
|
def self.options
|
56
59
|
@options ||= DEFAULTS.dup
|
57
60
|
end
|
61
|
+
|
58
62
|
def self.options=(opts)
|
59
63
|
@options = opts
|
60
64
|
end
|
@@ -92,10 +96,15 @@ module Sidekiq
|
|
92
96
|
retryable = true
|
93
97
|
begin
|
94
98
|
yield conn
|
95
|
-
rescue Redis::
|
96
|
-
#2550 Failover can cause the server to become a
|
97
|
-
# to disconnect and reopen the socket to get back to the
|
98
|
-
|
99
|
+
rescue Redis::BaseError => ex
|
100
|
+
# 2550 Failover can cause the server to become a replica, need
|
101
|
+
# to disconnect and reopen the socket to get back to the primary.
|
102
|
+
# 4495 Use the same logic if we have a "Not enough replicas" error from the primary
|
103
|
+
if retryable && ex.message =~ /READONLY|NOREPLICAS/
|
104
|
+
conn.disconnect!
|
105
|
+
retryable = false
|
106
|
+
retry
|
107
|
+
end
|
99
108
|
raise
|
100
109
|
end
|
101
110
|
end
|
@@ -103,19 +112,17 @@ module Sidekiq
|
|
103
112
|
|
104
113
|
def self.redis_info
|
105
114
|
redis do |conn|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
conn.info
|
113
|
-
end
|
114
|
-
rescue Redis::CommandError => ex
|
115
|
-
#2850 return fake version when INFO command has (probably) been renamed
|
116
|
-
raise unless ex.message =~ /unknown command/
|
117
|
-
FAKE_INFO
|
115
|
+
# admin commands can't go through redis-namespace starting
|
116
|
+
# in redis-namespace 2.0
|
117
|
+
if conn.respond_to?(:namespace)
|
118
|
+
conn.redis.info
|
119
|
+
else
|
120
|
+
conn.info
|
118
121
|
end
|
122
|
+
rescue Redis::CommandError => ex
|
123
|
+
# 2850 return fake version when INFO command has (probably) been renamed
|
124
|
+
raise unless /unknown command/.match?(ex.message)
|
125
|
+
FAKE_INFO
|
119
126
|
end
|
120
127
|
end
|
121
128
|
|
@@ -144,46 +151,69 @@ module Sidekiq
|
|
144
151
|
end
|
145
152
|
|
146
153
|
def self.default_server_middleware
|
147
|
-
|
148
|
-
require 'sidekiq/middleware/server/logging'
|
149
|
-
|
150
|
-
Middleware::Chain.new do |m|
|
151
|
-
m.add Middleware::Server::Logging
|
152
|
-
m.add Middleware::Server::RetryJobs
|
153
|
-
end
|
154
|
+
Middleware::Chain.new
|
154
155
|
end
|
155
156
|
|
156
157
|
def self.default_worker_options=(hash)
|
157
|
-
|
158
|
+
# stringify
|
159
|
+
@default_worker_options = default_worker_options.merge(hash.transform_keys(&:to_s))
|
158
160
|
end
|
161
|
+
|
159
162
|
def self.default_worker_options
|
160
163
|
defined?(@default_worker_options) ? @default_worker_options : DEFAULT_WORKER_OPTIONS
|
161
164
|
end
|
162
165
|
|
166
|
+
##
|
167
|
+
# Death handlers are called when all retries for a job have been exhausted and
|
168
|
+
# the job dies. It's the notification to your application
|
169
|
+
# that this job will not succeed without manual intervention.
|
170
|
+
#
|
163
171
|
# Sidekiq.configure_server do |config|
|
164
|
-
# config.
|
172
|
+
# config.death_handlers << ->(job, ex) do
|
165
173
|
# end
|
166
174
|
# end
|
167
|
-
def self.
|
168
|
-
|
169
|
-
end
|
170
|
-
@default_retries_exhausted = ->(job, ex) { }
|
171
|
-
def self.default_retries_exhausted
|
172
|
-
@default_retries_exhausted
|
175
|
+
def self.death_handlers
|
176
|
+
options[:death_handlers]
|
173
177
|
end
|
174
178
|
|
175
179
|
def self.load_json(string)
|
176
180
|
JSON.parse(string)
|
177
181
|
end
|
182
|
+
|
178
183
|
def self.dump_json(object)
|
179
184
|
JSON.generate(object)
|
180
185
|
end
|
181
186
|
|
187
|
+
def self.log_formatter
|
188
|
+
@log_formatter ||= if ENV["DYNO"]
|
189
|
+
Sidekiq::Logger::Formatters::WithoutTimestamp.new
|
190
|
+
else
|
191
|
+
Sidekiq::Logger::Formatters::Pretty.new
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def self.log_formatter=(log_formatter)
|
196
|
+
@log_formatter = log_formatter
|
197
|
+
logger.formatter = log_formatter
|
198
|
+
end
|
199
|
+
|
182
200
|
def self.logger
|
183
|
-
Sidekiq::
|
201
|
+
@logger ||= Sidekiq::Logger.new($stdout, level: Logger::INFO)
|
184
202
|
end
|
185
|
-
|
186
|
-
|
203
|
+
|
204
|
+
def self.logger=(logger)
|
205
|
+
if logger.nil?
|
206
|
+
self.logger.level = Logger::FATAL
|
207
|
+
return self.logger
|
208
|
+
end
|
209
|
+
|
210
|
+
logger.extend(Sidekiq::LoggingUtils)
|
211
|
+
|
212
|
+
@logger = logger
|
213
|
+
end
|
214
|
+
|
215
|
+
def self.pro?
|
216
|
+
defined?(Sidekiq::Pro)
|
187
217
|
end
|
188
218
|
|
189
219
|
# How frequently Redis should be checked by a random Sidekiq process for
|
@@ -192,7 +222,7 @@ module Sidekiq
|
|
192
222
|
#
|
193
223
|
# See sidekiq/scheduled.rb for an in-depth explanation of this value
|
194
224
|
def self.average_scheduled_poll_interval=(interval)
|
195
|
-
|
225
|
+
options[:average_scheduled_poll_interval] = interval
|
196
226
|
end
|
197
227
|
|
198
228
|
# Register a proc to handle any error which occurs within the Sidekiq process.
|
@@ -203,7 +233,7 @@ module Sidekiq
|
|
203
233
|
#
|
204
234
|
# The default error handler logs errors to Sidekiq.logger.
|
205
235
|
def self.error_handlers
|
206
|
-
|
236
|
+
options[:error_handlers]
|
207
237
|
end
|
208
238
|
|
209
239
|
# Register a block to run at a point in the Sidekiq lifecycle.
|
@@ -227,10 +257,6 @@ module Sidekiq
|
|
227
257
|
# otherwise Ruby's Thread#kill will commit. See #377.
|
228
258
|
# DO NOT RESCUE THIS ERROR IN YOUR WORKERS
|
229
259
|
class Shutdown < Interrupt; end
|
230
|
-
|
231
260
|
end
|
232
261
|
|
233
|
-
require
|
234
|
-
require 'sidekiq/extensions/action_mailer'
|
235
|
-
require 'sidekiq/extensions/active_record'
|
236
|
-
require 'sidekiq/rails' if defined?(::Rails::Engine)
|
262
|
+
require "sidekiq/rails" if defined?(::Rails::Engine)
|
data/sidekiq.gemspec
CHANGED
@@ -1,26 +1,28 @@
|
|
1
|
-
|
2
|
-
require File.expand_path('../lib/sidekiq/version', __FILE__)
|
1
|
+
require_relative "lib/sidekiq/version"
|
3
2
|
|
4
3
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors
|
6
|
-
gem.email
|
7
|
-
gem.summary
|
8
|
-
gem.description
|
9
|
-
gem.homepage
|
10
|
-
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"
|
11
10
|
|
12
|
-
gem.executables
|
13
|
-
gem.files
|
14
|
-
gem.
|
15
|
-
gem.
|
16
|
-
gem.
|
17
|
-
|
18
|
-
gem.
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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
|
+
|
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/master/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"
|
26
28
|
end
|
Binary file
|