sidekiq 4.1.4 → 6.5.6
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 +666 -0
- data/LICENSE +3 -3
- data/README.md +27 -35
- data/bin/sidekiq +27 -3
- data/bin/sidekiqload +78 -84
- 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/job_spec.rb.erb +6 -0
- data/lib/generators/sidekiq/templates/job_test.rb.erb +8 -0
- data/lib/sidekiq/api.rb +583 -288
- data/lib/sidekiq/cli.rb +255 -218
- data/lib/sidekiq/client.rb +86 -83
- data/lib/sidekiq/component.rb +65 -0
- data/lib/sidekiq/delay.rb +43 -0
- 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 +13 -5
- data/lib/sidekiq/fetch.rb +50 -40
- data/lib/sidekiq/job.rb +13 -0
- data/lib/sidekiq/job_logger.rb +51 -0
- data/lib/sidekiq/job_retry.rb +282 -0
- data/lib/sidekiq/job_util.rb +71 -0
- data/lib/sidekiq/launcher.rb +192 -85
- data/lib/sidekiq/logger.rb +156 -0
- data/lib/sidekiq/manager.rb +44 -45
- 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 +102 -46
- data/lib/sidekiq/middleware/current_attributes.rb +63 -0
- data/lib/sidekiq/middleware/i18n.rb +7 -7
- data/lib/sidekiq/middleware/modules.rb +21 -0
- data/lib/sidekiq/monitor.rb +133 -0
- data/lib/sidekiq/paginator.rb +20 -16
- data/lib/sidekiq/processor.rb +178 -78
- data/lib/sidekiq/rails.rb +56 -27
- data/lib/sidekiq/redis_client_adapter.rb +154 -0
- data/lib/sidekiq/redis_connection.rb +123 -47
- data/lib/sidekiq/ring_buffer.rb +29 -0
- data/lib/sidekiq/scheduled.rb +97 -40
- data/lib/sidekiq/sd_notify.rb +149 -0
- data/lib/sidekiq/systemd.rb +24 -0
- data/lib/sidekiq/testing/inline.rb +6 -5
- data/lib/sidekiq/testing.rb +83 -56
- data/lib/sidekiq/transaction_aware_client.rb +45 -0
- data/lib/sidekiq/version.rb +2 -1
- data/lib/sidekiq/web/action.rb +93 -0
- data/lib/sidekiq/web/application.rb +379 -0
- data/lib/sidekiq/web/csrf_protection.rb +180 -0
- data/lib/sidekiq/web/helpers.rb +365 -0
- data/lib/sidekiq/web/router.rb +104 -0
- data/lib/sidekiq/web.rb +108 -213
- data/lib/sidekiq/worker.rb +288 -42
- data/lib/sidekiq.rb +188 -80
- data/sidekiq.gemspec +24 -22
- data/web/assets/images/apple-touch-icon.png +0 -0
- data/web/assets/images/{status-sd8051fd480.png → status.png} +0 -0
- data/web/assets/javascripts/application.js +130 -75
- 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 +70 -91
- data/web/assets/javascripts/graph.js +16 -0
- data/web/assets/javascripts/metrics.js +262 -0
- data/web/assets/stylesheets/application-dark.css +143 -0
- data/web/assets/stylesheets/application-rtl.css +242 -0
- data/web/assets/stylesheets/application.css +390 -145
- data/web/assets/stylesheets/bootstrap-rtl.min.css +9 -0
- data/web/assets/stylesheets/bootstrap.css +4 -8
- data/web/locales/ar.yml +87 -0
- data/web/locales/de.yml +15 -3
- data/web/locales/el.yml +43 -19
- data/web/locales/en.yml +15 -1
- data/web/locales/es.yml +22 -5
- data/web/locales/fa.yml +80 -0
- data/web/locales/fr.yml +10 -3
- data/web/locales/he.yml +79 -0
- data/web/locales/ja.yml +12 -4
- data/web/locales/lt.yml +83 -0
- data/web/locales/pl.yml +4 -4
- data/web/locales/pt-br.yml +27 -9
- 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 +6 -3
- data/web/views/_job_info.erb +4 -3
- data/web/views/_nav.erb +5 -19
- data/web/views/_paging.erb +1 -1
- data/web/views/_poll_link.erb +2 -5
- data/web/views/_summary.erb +7 -7
- data/web/views/busy.erb +64 -26
- data/web/views/dashboard.erb +26 -17
- data/web/views/dead.erb +4 -4
- data/web/views/layout.erb +15 -5
- data/web/views/metrics.erb +69 -0
- data/web/views/metrics_for_job.erb +87 -0
- data/web/views/morgue.erb +21 -14
- data/web/views/queue.erb +28 -14
- data/web/views/queues.erb +15 -5
- data/web/views/retries.erb +24 -15
- data/web/views/retry.erb +5 -5
- data/web/views/scheduled.erb +9 -6
- data/web/views/scheduled_job_info.erb +1 -1
- metadata +73 -256
- data/.github/contributing.md +0 -32
- data/.github/issue_template.md +0 -4
- data/.gitignore +0 -12
- data/.travis.yml +0 -18
- data/3.0-Upgrade.md +0 -70
- data/4.0-Upgrade.md +0 -53
- data/COMM-LICENSE +0 -95
- data/Ent-Changes.md +0 -123
- 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 -559
- data/Rakefile +0 -9
- data/bin/sidekiqctl +0 -99
- data/code_of_conduct.md +0 -50
- data/lib/generators/sidekiq/templates/worker_spec.rb.erb +0 -6
- data/lib/generators/sidekiq/templates/worker_test.rb.erb +0 -8
- data/lib/generators/sidekiq/worker_generator.rb +0 -49
- data/lib/sidekiq/core_ext.rb +0 -106
- data/lib/sidekiq/exception_handler.rb +0 -31
- 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/lib/sidekiq/util.rb +0 -62
- data/lib/sidekiq/web_helpers.rb +0 -255
- 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 -406
- 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 -85
- 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 -201
- 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 -50
- 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 -614
- data/test/test_web_helpers.rb +0 -54
- data/web/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
- data/web/assets/images/bootstrap/glyphicons-halflings.png +0 -0
- data/web/assets/images/status/active.png +0 -0
- data/web/assets/images/status/idle.png +0 -0
- data/web/assets/javascripts/locales/README.md +0 -27
- data/web/assets/javascripts/locales/jquery.timeago.ar.js +0 -96
- data/web/assets/javascripts/locales/jquery.timeago.bg.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.bs.js +0 -49
- data/web/assets/javascripts/locales/jquery.timeago.ca.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.cs.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.cy.js +0 -20
- data/web/assets/javascripts/locales/jquery.timeago.da.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.de.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.el.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.en-short.js +0 -20
- data/web/assets/javascripts/locales/jquery.timeago.en.js +0 -20
- data/web/assets/javascripts/locales/jquery.timeago.es.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.et.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.fa.js +0 -22
- data/web/assets/javascripts/locales/jquery.timeago.fi.js +0 -28
- data/web/assets/javascripts/locales/jquery.timeago.fr-short.js +0 -16
- data/web/assets/javascripts/locales/jquery.timeago.fr.js +0 -17
- data/web/assets/javascripts/locales/jquery.timeago.he.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.hr.js +0 -49
- data/web/assets/javascripts/locales/jquery.timeago.hu.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.hy.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.id.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.it.js +0 -16
- data/web/assets/javascripts/locales/jquery.timeago.ja.js +0 -19
- data/web/assets/javascripts/locales/jquery.timeago.ko.js +0 -17
- data/web/assets/javascripts/locales/jquery.timeago.lt.js +0 -20
- data/web/assets/javascripts/locales/jquery.timeago.mk.js +0 -20
- data/web/assets/javascripts/locales/jquery.timeago.nb.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.nl.js +0 -20
- data/web/assets/javascripts/locales/jquery.timeago.pl.js +0 -31
- data/web/assets/javascripts/locales/jquery.timeago.pt-br.js +0 -16
- data/web/assets/javascripts/locales/jquery.timeago.pt.js +0 -16
- data/web/assets/javascripts/locales/jquery.timeago.ro.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.rs.js +0 -49
- data/web/assets/javascripts/locales/jquery.timeago.ru.js +0 -34
- data/web/assets/javascripts/locales/jquery.timeago.sk.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.sl.js +0 -44
- data/web/assets/javascripts/locales/jquery.timeago.sv.js +0 -18
- data/web/assets/javascripts/locales/jquery.timeago.th.js +0 -20
- data/web/assets/javascripts/locales/jquery.timeago.tr.js +0 -16
- data/web/assets/javascripts/locales/jquery.timeago.uk.js +0 -34
- data/web/assets/javascripts/locales/jquery.timeago.uz.js +0 -19
- data/web/assets/javascripts/locales/jquery.timeago.zh-cn.js +0 -20
- data/web/assets/javascripts/locales/jquery.timeago.zh-tw.js +0 -20
- data/web/views/_poll_js.erb +0 -5
data/lib/sidekiq.rb
CHANGED
@@ -1,41 +1,47 @@
|
|
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/transaction_aware_client"
|
9
|
+
require "sidekiq/worker"
|
10
|
+
require "sidekiq/job"
|
11
|
+
require "sidekiq/redis_connection"
|
12
|
+
require "sidekiq/delay"
|
13
|
+
|
14
|
+
require "json"
|
12
15
|
|
13
16
|
module Sidekiq
|
14
|
-
NAME =
|
15
|
-
LICENSE =
|
17
|
+
NAME = "Sidekiq"
|
18
|
+
LICENSE = "See LICENSE and the LGPL-3.0 for licensing details."
|
16
19
|
|
17
20
|
DEFAULTS = {
|
18
21
|
queues: [],
|
19
22
|
labels: [],
|
20
|
-
concurrency:
|
21
|
-
require:
|
23
|
+
concurrency: 10,
|
24
|
+
require: ".",
|
25
|
+
strict: true,
|
22
26
|
environment: nil,
|
23
|
-
timeout:
|
27
|
+
timeout: 25,
|
24
28
|
poll_interval_average: nil,
|
25
|
-
average_scheduled_poll_interval:
|
29
|
+
average_scheduled_poll_interval: 5,
|
30
|
+
on_complex_arguments: :warn,
|
26
31
|
error_handlers: [],
|
32
|
+
death_handlers: [],
|
27
33
|
lifecycle_events: {
|
28
34
|
startup: [],
|
29
35
|
quiet: [],
|
30
36
|
shutdown: [],
|
37
|
+
# triggers when we fire the first heartbeat on startup OR repairing a network partition
|
38
|
+
heartbeat: [],
|
39
|
+
# triggers on EVERY heartbeat call, every 10 seconds
|
40
|
+
beat: []
|
31
41
|
},
|
32
42
|
dead_max_jobs: 10_000,
|
33
|
-
dead_timeout_in_seconds: 180 * 24 * 60 * 60 # 6 months
|
34
|
-
|
35
|
-
|
36
|
-
DEFAULT_WORKER_OPTIONS = {
|
37
|
-
'retry' => true,
|
38
|
-
'queue' => 'default'
|
43
|
+
dead_timeout_in_seconds: 180 * 24 * 60 * 60, # 6 months
|
44
|
+
reloader: proc { |&block| block.call }
|
39
45
|
}
|
40
46
|
|
41
47
|
FAKE_INFO = {
|
@@ -44,24 +50,90 @@ module Sidekiq
|
|
44
50
|
"connected_clients" => "9999",
|
45
51
|
"used_memory_human" => "9P",
|
46
52
|
"used_memory_peak_human" => "9P"
|
47
|
-
}
|
53
|
+
}
|
48
54
|
|
49
55
|
def self.❨╯°□°❩╯︵┻━┻
|
50
56
|
puts "Calm down, yo."
|
51
57
|
end
|
52
58
|
|
59
|
+
# config.concurrency = 5
|
60
|
+
def self.concurrency=(val)
|
61
|
+
self[:concurrency] = Integer(val)
|
62
|
+
end
|
63
|
+
|
64
|
+
# config.queues = %w( high default low ) # strict
|
65
|
+
# config.queues = %w( high,3 default,2 low,1 ) # weighted
|
66
|
+
# config.queues = %w( feature1,1 feature2,1 feature3,1 ) # random
|
67
|
+
#
|
68
|
+
# With weighted priority, queue will be checked first (weight / total) of the time.
|
69
|
+
# high will be checked first (3/6) or 50% of the time.
|
70
|
+
# I'd recommend setting weights between 1-10. Weights in the hundreds or thousands
|
71
|
+
# are ridiculous and unnecessarily expensive. You can get random queue ordering
|
72
|
+
# by explicitly setting all weights to 1.
|
73
|
+
def self.queues=(val)
|
74
|
+
self[:queues] = Array(val).each_with_object([]) do |qstr, memo|
|
75
|
+
name, weight = qstr.split(",")
|
76
|
+
self[:strict] = false if weight.to_i > 0
|
77
|
+
[weight.to_i, 1].max.times do
|
78
|
+
memo << name
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
### Private APIs
|
84
|
+
def self.default_error_handler(ex, ctx)
|
85
|
+
logger.warn(dump_json(ctx)) unless ctx.empty?
|
86
|
+
logger.warn("#{ex.class.name}: #{ex.message}")
|
87
|
+
logger.warn(ex.backtrace.join("\n")) unless ex.backtrace.nil?
|
88
|
+
end
|
89
|
+
|
90
|
+
# DEFAULT_ERROR_HANDLER is a constant that allows the default error handler to
|
91
|
+
# be referenced. It must be defined here, after the default_error_handler
|
92
|
+
# method is defined.
|
93
|
+
DEFAULT_ERROR_HANDLER = method(:default_error_handler)
|
94
|
+
|
95
|
+
@config = DEFAULTS.dup
|
53
96
|
def self.options
|
54
|
-
|
97
|
+
logger.warn "`config.options[:key] = value` is deprecated, use `config[:key] = value`: #{caller(1..2)}"
|
98
|
+
@config
|
55
99
|
end
|
100
|
+
|
56
101
|
def self.options=(opts)
|
57
|
-
|
102
|
+
logger.warn "config.options = hash` is deprecated, use `config.merge!(hash)`: #{caller(1..2)}"
|
103
|
+
@config = opts
|
58
104
|
end
|
59
105
|
|
106
|
+
def self.[](key)
|
107
|
+
@config[key]
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.[]=(key, val)
|
111
|
+
@config[key] = val
|
112
|
+
end
|
113
|
+
|
114
|
+
def self.merge!(hash)
|
115
|
+
@config.merge!(hash)
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.fetch(*args, &block)
|
119
|
+
@config.fetch(*args, &block)
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.handle_exception(ex, ctx = {})
|
123
|
+
self[:error_handlers].each do |handler|
|
124
|
+
handler.call(ex, ctx)
|
125
|
+
rescue => ex
|
126
|
+
logger.error "!!! ERROR HANDLER THREW AN ERROR !!!"
|
127
|
+
logger.error ex
|
128
|
+
logger.error ex.backtrace.join("\n") unless ex.backtrace.nil?
|
129
|
+
end
|
130
|
+
end
|
131
|
+
###
|
132
|
+
|
60
133
|
##
|
61
134
|
# Configuration for Sidekiq server, use like:
|
62
135
|
#
|
63
136
|
# Sidekiq.configure_server do |config|
|
64
|
-
# config.redis = { :namespace => 'myapp', :size => 25, :url => 'redis://myhost:8877/0' }
|
65
137
|
# config.server_middleware do |chain|
|
66
138
|
# chain.add MyServerHook
|
67
139
|
# end
|
@@ -74,7 +146,7 @@ module Sidekiq
|
|
74
146
|
# Configuration for Sidekiq client, use like:
|
75
147
|
#
|
76
148
|
# Sidekiq.configure_client do |config|
|
77
|
-
# config.redis = { :
|
149
|
+
# config.redis = { size: 1, url: 'redis://myhost:8877/0' }
|
78
150
|
# end
|
79
151
|
def self.configure_client
|
80
152
|
yield self unless server?
|
@@ -90,10 +162,17 @@ module Sidekiq
|
|
90
162
|
retryable = true
|
91
163
|
begin
|
92
164
|
yield conn
|
93
|
-
rescue
|
94
|
-
#2550 Failover can cause the server to become a
|
95
|
-
# to disconnect and reopen the socket to get back to the
|
96
|
-
|
165
|
+
rescue RedisConnection.adapter::BaseError => ex
|
166
|
+
# 2550 Failover can cause the server to become a replica, need
|
167
|
+
# to disconnect and reopen the socket to get back to the primary.
|
168
|
+
# 4495 Use the same logic if we have a "Not enough replicas" error from the primary
|
169
|
+
# 4985 Use the same logic when a blocking command is force-unblocked
|
170
|
+
# The same retry logic is also used in client.rb
|
171
|
+
if retryable && ex.message =~ /READONLY|NOREPLICAS|UNBLOCKED/
|
172
|
+
conn.disconnect!
|
173
|
+
retryable = false
|
174
|
+
retry
|
175
|
+
end
|
97
176
|
raise
|
98
177
|
end
|
99
178
|
end
|
@@ -101,36 +180,34 @@ module Sidekiq
|
|
101
180
|
|
102
181
|
def self.redis_info
|
103
182
|
redis do |conn|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
conn.info
|
111
|
-
end
|
112
|
-
rescue Redis::CommandError => ex
|
113
|
-
#2850 return fake version when INFO command has (probably) been renamed
|
114
|
-
raise unless ex.message =~ /unknown command/
|
115
|
-
FAKE_INFO
|
183
|
+
# admin commands can't go through redis-namespace starting
|
184
|
+
# in redis-namespace 2.0
|
185
|
+
if conn.respond_to?(:namespace)
|
186
|
+
conn.redis.info
|
187
|
+
else
|
188
|
+
conn.info
|
116
189
|
end
|
190
|
+
rescue RedisConnection.adapter::CommandError => ex
|
191
|
+
# 2850 return fake version when INFO command has (probably) been renamed
|
192
|
+
raise unless /unknown command/.match?(ex.message)
|
193
|
+
FAKE_INFO
|
117
194
|
end
|
118
195
|
end
|
119
196
|
|
120
197
|
def self.redis_pool
|
121
|
-
@redis ||=
|
198
|
+
@redis ||= RedisConnection.create
|
122
199
|
end
|
123
200
|
|
124
201
|
def self.redis=(hash)
|
125
202
|
@redis = if hash.is_a?(ConnectionPool)
|
126
203
|
hash
|
127
204
|
else
|
128
|
-
|
205
|
+
RedisConnection.create(hash)
|
129
206
|
end
|
130
207
|
end
|
131
208
|
|
132
209
|
def self.client_middleware
|
133
|
-
@client_chain ||= Middleware::Chain.new
|
210
|
+
@client_chain ||= Middleware::Chain.new(self)
|
134
211
|
yield @client_chain if block_given?
|
135
212
|
@client_chain
|
136
213
|
end
|
@@ -142,49 +219,80 @@ module Sidekiq
|
|
142
219
|
end
|
143
220
|
|
144
221
|
def self.default_server_middleware
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
m.add Middleware::Server::RetryJobs
|
151
|
-
if defined?(::ActiveRecord::Base)
|
152
|
-
require 'sidekiq/middleware/server/active_record'
|
153
|
-
m.add Sidekiq::Middleware::Server::ActiveRecord
|
154
|
-
end
|
155
|
-
end
|
222
|
+
Middleware::Chain.new(self)
|
223
|
+
end
|
224
|
+
|
225
|
+
def self.default_worker_options=(hash) # deprecated
|
226
|
+
@default_job_options = default_job_options.merge(hash.transform_keys(&:to_s))
|
156
227
|
end
|
157
228
|
|
158
|
-
def self.
|
159
|
-
@
|
229
|
+
def self.default_job_options=(hash)
|
230
|
+
@default_job_options = default_job_options.merge(hash.transform_keys(&:to_s))
|
160
231
|
end
|
161
|
-
|
162
|
-
|
232
|
+
|
233
|
+
def self.default_worker_options # deprecated
|
234
|
+
@default_job_options ||= {"retry" => true, "queue" => "default"}
|
235
|
+
end
|
236
|
+
|
237
|
+
def self.default_job_options
|
238
|
+
@default_job_options ||= {"retry" => true, "queue" => "default"}
|
163
239
|
end
|
164
240
|
|
241
|
+
##
|
242
|
+
# Death handlers are called when all retries for a job have been exhausted and
|
243
|
+
# the job dies. It's the notification to your application
|
244
|
+
# that this job will not succeed without manual intervention.
|
245
|
+
#
|
165
246
|
# Sidekiq.configure_server do |config|
|
166
|
-
# config.
|
247
|
+
# config.death_handlers << ->(job, ex) do
|
167
248
|
# end
|
168
249
|
# end
|
169
|
-
def self.
|
170
|
-
|
171
|
-
end
|
172
|
-
def self.default_retries_exhausted
|
173
|
-
@default_retries_exhausted
|
250
|
+
def self.death_handlers
|
251
|
+
self[:death_handlers]
|
174
252
|
end
|
175
253
|
|
176
254
|
def self.load_json(string)
|
177
255
|
JSON.parse(string)
|
178
256
|
end
|
257
|
+
|
179
258
|
def self.dump_json(object)
|
180
259
|
JSON.generate(object)
|
181
260
|
end
|
182
261
|
|
262
|
+
def self.log_formatter
|
263
|
+
@log_formatter ||= if ENV["DYNO"]
|
264
|
+
Sidekiq::Logger::Formatters::WithoutTimestamp.new
|
265
|
+
else
|
266
|
+
Sidekiq::Logger::Formatters::Pretty.new
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
def self.log_formatter=(log_formatter)
|
271
|
+
@log_formatter = log_formatter
|
272
|
+
logger.formatter = log_formatter
|
273
|
+
end
|
274
|
+
|
183
275
|
def self.logger
|
184
|
-
Sidekiq::
|
276
|
+
@logger ||= Sidekiq::Logger.new($stdout, level: :info)
|
277
|
+
end
|
278
|
+
|
279
|
+
def self.logger=(logger)
|
280
|
+
if logger.nil?
|
281
|
+
self.logger.level = Logger::FATAL
|
282
|
+
return self.logger
|
283
|
+
end
|
284
|
+
|
285
|
+
logger.extend(Sidekiq::LoggingUtils)
|
286
|
+
|
287
|
+
@logger = logger
|
288
|
+
end
|
289
|
+
|
290
|
+
def self.pro?
|
291
|
+
defined?(Sidekiq::Pro)
|
185
292
|
end
|
186
|
-
|
187
|
-
|
293
|
+
|
294
|
+
def self.ent?
|
295
|
+
defined?(Sidekiq::Enterprise)
|
188
296
|
end
|
189
297
|
|
190
298
|
# How frequently Redis should be checked by a random Sidekiq process for
|
@@ -193,7 +301,7 @@ module Sidekiq
|
|
193
301
|
#
|
194
302
|
# See sidekiq/scheduled.rb for an in-depth explanation of this value
|
195
303
|
def self.average_scheduled_poll_interval=(interval)
|
196
|
-
self
|
304
|
+
self[:average_scheduled_poll_interval] = interval
|
197
305
|
end
|
198
306
|
|
199
307
|
# Register a proc to handle any error which occurs within the Sidekiq process.
|
@@ -204,7 +312,7 @@ module Sidekiq
|
|
204
312
|
#
|
205
313
|
# The default error handler logs errors to Sidekiq.logger.
|
206
314
|
def self.error_handlers
|
207
|
-
self
|
315
|
+
self[:error_handlers]
|
208
316
|
end
|
209
317
|
|
210
318
|
# Register a block to run at a point in the Sidekiq lifecycle.
|
@@ -217,21 +325,21 @@ module Sidekiq
|
|
217
325
|
# end
|
218
326
|
def self.on(event, &block)
|
219
327
|
raise ArgumentError, "Symbols only please: #{event}" unless event.is_a?(Symbol)
|
220
|
-
raise ArgumentError, "Invalid event name: #{event}" unless
|
221
|
-
|
328
|
+
raise ArgumentError, "Invalid event name: #{event}" unless self[:lifecycle_events].key?(event)
|
329
|
+
self[:lifecycle_events][event] << block
|
222
330
|
end
|
223
331
|
|
224
|
-
|
332
|
+
def self.strict_args!(mode = :raise)
|
333
|
+
self[:on_complex_arguments] = mode
|
334
|
+
end
|
335
|
+
|
336
|
+
# We are shutting down Sidekiq but what about threads that
|
225
337
|
# are working on some long job? This error is
|
226
|
-
# raised in
|
338
|
+
# raised in jobs that have not finished within the hard
|
227
339
|
# timeout limit. This is needed to rollback db transactions,
|
228
340
|
# otherwise Ruby's Thread#kill will commit. See #377.
|
229
|
-
# DO NOT RESCUE THIS ERROR IN YOUR
|
341
|
+
# DO NOT RESCUE THIS ERROR IN YOUR JOBS
|
230
342
|
class Shutdown < Interrupt; end
|
231
|
-
|
232
343
|
end
|
233
344
|
|
234
|
-
require
|
235
|
-
require 'sidekiq/extensions/action_mailer'
|
236
|
-
require 'sidekiq/extensions/active_record'
|
237
|
-
require 'sidekiq/rails' if defined?(::Rails::Engine)
|
345
|
+
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/main/Changes.md",
|
22
|
+
"source_code_uri" => "https://github.com/mperham/sidekiq"
|
23
|
+
}
|
24
|
+
|
25
|
+
gem.add_dependency "redis", "<5", ">= 4.5.0"
|
26
|
+
gem.add_dependency "connection_pool", ">= 2.2.5"
|
27
|
+
gem.add_dependency "rack", "~> 2.0"
|
26
28
|
end
|
Binary file
|
File without changes
|