sidekiq 5.2.7 → 8.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Changes.md +845 -8
- data/LICENSE.txt +9 -0
- data/README.md +54 -54
- data/bin/multi_queue_bench +271 -0
- data/bin/sidekiq +22 -3
- data/bin/sidekiqload +219 -112
- data/bin/sidekiqmon +11 -0
- data/bin/webload +69 -0
- data/lib/active_job/queue_adapters/sidekiq_adapter.rb +120 -0
- data/lib/generators/sidekiq/job_generator.rb +59 -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 +757 -373
- data/lib/sidekiq/capsule.rb +132 -0
- data/lib/sidekiq/cli.rb +210 -233
- data/lib/sidekiq/client.rb +145 -103
- data/lib/sidekiq/component.rb +128 -0
- data/lib/sidekiq/config.rb +315 -0
- data/lib/sidekiq/deploy.rb +64 -0
- data/lib/sidekiq/embedded.rb +64 -0
- data/lib/sidekiq/fetch.rb +49 -42
- data/lib/sidekiq/iterable_job.rb +56 -0
- data/lib/sidekiq/job/interrupt_handler.rb +24 -0
- data/lib/sidekiq/job/iterable/active_record_enumerator.rb +53 -0
- data/lib/sidekiq/job/iterable/csv_enumerator.rb +47 -0
- data/lib/sidekiq/job/iterable/enumerators.rb +135 -0
- data/lib/sidekiq/job/iterable.rb +306 -0
- data/lib/sidekiq/job.rb +385 -0
- data/lib/sidekiq/job_logger.rb +34 -7
- data/lib/sidekiq/job_retry.rb +164 -109
- data/lib/sidekiq/job_util.rb +113 -0
- data/lib/sidekiq/launcher.rb +208 -107
- data/lib/sidekiq/logger.rb +80 -0
- data/lib/sidekiq/manager.rb +42 -46
- data/lib/sidekiq/metrics/query.rb +184 -0
- data/lib/sidekiq/metrics/shared.rb +109 -0
- data/lib/sidekiq/metrics/tracking.rb +150 -0
- data/lib/sidekiq/middleware/chain.rb +113 -56
- data/lib/sidekiq/middleware/current_attributes.rb +119 -0
- data/lib/sidekiq/middleware/i18n.rb +7 -7
- data/lib/sidekiq/middleware/modules.rb +23 -0
- data/lib/sidekiq/monitor.rb +147 -0
- data/lib/sidekiq/paginator.rb +41 -16
- data/lib/sidekiq/processor.rb +146 -127
- data/lib/sidekiq/profiler.rb +72 -0
- data/lib/sidekiq/rails.rb +46 -43
- data/lib/sidekiq/redis_client_adapter.rb +113 -0
- data/lib/sidekiq/redis_connection.rb +79 -108
- data/lib/sidekiq/ring_buffer.rb +31 -0
- data/lib/sidekiq/scheduled.rb +112 -50
- data/lib/sidekiq/sd_notify.rb +149 -0
- data/lib/sidekiq/systemd.rb +26 -0
- data/lib/sidekiq/testing/inline.rb +6 -5
- data/lib/sidekiq/testing.rb +91 -90
- data/lib/sidekiq/transaction_aware_client.rb +51 -0
- data/lib/sidekiq/version.rb +7 -1
- data/lib/sidekiq/web/action.rb +125 -60
- data/lib/sidekiq/web/application.rb +363 -259
- data/lib/sidekiq/web/config.rb +120 -0
- data/lib/sidekiq/web/csrf_protection.rb +183 -0
- data/lib/sidekiq/web/helpers.rb +241 -120
- data/lib/sidekiq/web/router.rb +62 -71
- data/lib/sidekiq/web.rb +69 -161
- data/lib/sidekiq/worker_compatibility_alias.rb +13 -0
- data/lib/sidekiq.rb +94 -182
- data/sidekiq.gemspec +26 -16
- data/web/assets/images/apple-touch-icon.png +0 -0
- data/web/assets/javascripts/application.js +150 -61
- data/web/assets/javascripts/base-charts.js +120 -0
- data/web/assets/javascripts/chart.min.js +13 -0
- data/web/assets/javascripts/chartjs-adapter-date-fns.min.js +7 -0
- data/web/assets/javascripts/chartjs-plugin-annotation.min.js +7 -0
- data/web/assets/javascripts/dashboard-charts.js +194 -0
- data/web/assets/javascripts/dashboard.js +41 -293
- data/web/assets/javascripts/metrics.js +280 -0
- data/web/assets/stylesheets/style.css +766 -0
- data/web/locales/ar.yml +72 -65
- data/web/locales/cs.yml +63 -62
- data/web/locales/da.yml +61 -53
- data/web/locales/de.yml +66 -53
- data/web/locales/el.yml +44 -24
- data/web/locales/en.yml +94 -66
- data/web/locales/es.yml +92 -54
- data/web/locales/fa.yml +66 -65
- data/web/locales/fr.yml +83 -62
- data/web/locales/gd.yml +99 -0
- data/web/locales/he.yml +66 -64
- data/web/locales/hi.yml +60 -59
- data/web/locales/it.yml +93 -54
- data/web/locales/ja.yml +75 -64
- data/web/locales/ko.yml +53 -52
- data/web/locales/lt.yml +84 -0
- data/web/locales/nb.yml +62 -61
- data/web/locales/nl.yml +53 -52
- data/web/locales/pl.yml +46 -45
- data/web/locales/{pt-br.yml → pt-BR.yml} +84 -56
- data/web/locales/pt.yml +52 -51
- data/web/locales/ru.yml +69 -63
- data/web/locales/sv.yml +54 -53
- data/web/locales/ta.yml +61 -60
- data/web/locales/tr.yml +101 -0
- data/web/locales/uk.yml +86 -61
- data/web/locales/ur.yml +65 -64
- data/web/locales/vi.yml +84 -0
- data/web/locales/zh-CN.yml +106 -0
- data/web/locales/{zh-tw.yml → zh-TW.yml} +43 -9
- data/web/views/_footer.erb +31 -19
- data/web/views/_job_info.erb +94 -75
- data/web/views/_metrics_period_select.erb +15 -0
- data/web/views/_nav.erb +14 -21
- data/web/views/_paging.erb +23 -19
- data/web/views/_poll_link.erb +3 -6
- data/web/views/_summary.erb +23 -23
- data/web/views/busy.erb +139 -87
- data/web/views/dashboard.erb +82 -53
- data/web/views/dead.erb +31 -27
- data/web/views/filtering.erb +6 -0
- data/web/views/layout.erb +15 -29
- data/web/views/metrics.erb +84 -0
- data/web/views/metrics_for_job.erb +58 -0
- data/web/views/morgue.erb +60 -70
- data/web/views/profiles.erb +43 -0
- data/web/views/queue.erb +50 -39
- data/web/views/queues.erb +45 -29
- data/web/views/retries.erb +65 -75
- data/web/views/retry.erb +32 -27
- data/web/views/scheduled.erb +58 -52
- data/web/views/scheduled_job_info.erb +1 -1
- metadata +96 -76
- 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/LICENSE +0 -9
- 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/delay.rb +0 -42
- data/lib/sidekiq/exception_handler.rb +0 -29
- data/lib/sidekiq/extensions/action_mailer.rb +0 -57
- data/lib/sidekiq/extensions/active_record.rb +0 -40
- data/lib/sidekiq/extensions/class_methods.rb +0 -40
- data/lib/sidekiq/extensions/generic_proxy.rb +0 -31
- data/lib/sidekiq/logging.rb +0 -122
- data/lib/sidekiq/middleware/server/active_record.rb +0 -23
- data/lib/sidekiq/util.rb +0 -66
- data/lib/sidekiq/worker.rb +0 -220
- data/web/assets/stylesheets/application-rtl.css +0 -246
- data/web/assets/stylesheets/application.css +0 -1144
- data/web/assets/stylesheets/bootstrap-rtl.min.css +0 -9
- data/web/assets/stylesheets/bootstrap.css +0 -5
- data/web/locales/zh-cn.yml +0 -68
- data/web/views/_status.erb +0 -4
data/lib/sidekiq/web/action.rb
CHANGED
@@ -1,89 +1,154 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "erb"
|
4
|
+
|
3
5
|
module Sidekiq
|
4
|
-
class
|
5
|
-
|
6
|
+
class Web
|
7
|
+
##
|
8
|
+
# These instance methods are available to all executing ERB
|
9
|
+
# templates.
|
10
|
+
class Action
|
11
|
+
attr_accessor :env, :block
|
12
|
+
|
13
|
+
def initialize(env, block)
|
14
|
+
@_erb = false
|
15
|
+
@env = env
|
16
|
+
@block = block
|
17
|
+
end
|
6
18
|
|
7
|
-
|
19
|
+
def config
|
20
|
+
env[:web_config]
|
21
|
+
end
|
8
22
|
|
9
|
-
|
10
|
-
|
11
|
-
|
23
|
+
def request
|
24
|
+
@request ||= ::Rack::Request.new(env)
|
25
|
+
end
|
12
26
|
|
13
|
-
|
14
|
-
|
15
|
-
|
27
|
+
def halt(res)
|
28
|
+
throw :halt, [res, {"content-type" => "text/plain"}, [res.to_s]]
|
29
|
+
end
|
16
30
|
|
17
|
-
|
18
|
-
|
19
|
-
|
31
|
+
# external redirect
|
32
|
+
def redirect_to(url)
|
33
|
+
throw :halt, [302, {"location" => url}, []]
|
34
|
+
end
|
20
35
|
|
21
|
-
|
22
|
-
|
23
|
-
|
36
|
+
def header(key, value)
|
37
|
+
env["response_headers"][key] = value.to_s
|
38
|
+
end
|
24
39
|
|
25
|
-
|
26
|
-
|
40
|
+
# internal redirect
|
41
|
+
def redirect(location)
|
42
|
+
throw :halt, [302, {"location" => "#{request.base_url}#{location}"}, []]
|
43
|
+
end
|
27
44
|
|
28
|
-
|
29
|
-
|
45
|
+
def reload_page
|
46
|
+
current_location = request.referer.gsub(request.base_url, "")
|
47
|
+
redirect current_location
|
48
|
+
end
|
30
49
|
|
31
|
-
|
32
|
-
|
50
|
+
# stuff after ? or form input
|
51
|
+
# uses String keys, no Symbols!
|
52
|
+
def url_params(key)
|
53
|
+
warn { "URL parameter `#{key}` should be accessed via String, not Symbol (at #{caller(3..3).first})" } if key.is_a?(Symbol)
|
54
|
+
request.params[key.to_s]
|
55
|
+
end
|
33
56
|
|
34
|
-
|
35
|
-
|
36
|
-
|
57
|
+
# variables embedded in path, `/metrics/:name`
|
58
|
+
# uses Symbol keys, no Strings!
|
59
|
+
def route_params(key)
|
60
|
+
warn { "Route parameter `#{key}` should be accessed via Symbol, not String (at #{caller(3..3).first})" } if key.is_a?(String)
|
61
|
+
env["rack.route_params"][key.to_sym]
|
62
|
+
end
|
37
63
|
|
38
|
-
|
39
|
-
|
40
|
-
|
64
|
+
def params
|
65
|
+
warn { "Direct access to Rack parameters is discouraged, use `url_params` or `route_params` (at #{caller(3..3).first})" }
|
66
|
+
request.params
|
67
|
+
end
|
41
68
|
|
42
|
-
|
43
|
-
|
44
|
-
unless respond_to?(:"_erb_#{content}")
|
45
|
-
src = ERB.new(File.read("#{Web.settings.views}/#{content}.erb")).src
|
46
|
-
WebAction.class_eval("def _erb_#{content}\n#{src}\n end")
|
47
|
-
end
|
69
|
+
def session
|
70
|
+
env["rack.session"]
|
48
71
|
end
|
49
72
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
@_erb = true
|
54
|
-
content = _erb(content, options[:locals])
|
73
|
+
def logger
|
74
|
+
Sidekiq.logger
|
75
|
+
end
|
55
76
|
|
56
|
-
|
77
|
+
# flash { "Some message to show on redirect" }
|
78
|
+
def flash
|
79
|
+
msg = yield
|
80
|
+
logger.info msg
|
81
|
+
session[:flash] = msg
|
57
82
|
end
|
58
|
-
end
|
59
83
|
|
60
|
-
|
61
|
-
|
84
|
+
def flash?
|
85
|
+
session&.[](:flash)
|
86
|
+
end
|
62
87
|
|
63
|
-
|
64
|
-
|
88
|
+
def get_flash
|
89
|
+
@flash ||= session.delete(:flash)
|
90
|
+
end
|
65
91
|
|
66
|
-
|
67
|
-
|
68
|
-
|
92
|
+
def erb(content, options = {})
|
93
|
+
if content.is_a? Symbol
|
94
|
+
unless respond_to?(:"_erb_#{content}")
|
95
|
+
views = options[:views] || Web.views
|
96
|
+
filename = "#{views}/#{content}.erb"
|
97
|
+
src = ERB.new(File.read(filename)).src
|
98
|
+
|
99
|
+
# Need to use lineno less by 1 because erb generates a
|
100
|
+
# comment before the source code.
|
101
|
+
Action.class_eval <<-RUBY, filename, -1 # standard:disable Style/EvalWithLocation
|
102
|
+
def _erb_#{content}
|
103
|
+
#{src}
|
104
|
+
end
|
105
|
+
RUBY
|
106
|
+
end
|
107
|
+
end
|
69
108
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
109
|
+
if @_erb
|
110
|
+
_erb(content, options[:locals])
|
111
|
+
else
|
112
|
+
@_erb = true
|
113
|
+
content = _erb(content, options[:locals])
|
114
|
+
|
115
|
+
_render { content }
|
116
|
+
end
|
117
|
+
end
|
76
118
|
|
77
|
-
|
119
|
+
def render(engine, content, options = {})
|
120
|
+
raise "Only erb templates are supported" if engine != :erb
|
78
121
|
|
79
|
-
|
80
|
-
|
122
|
+
erb(content, options)
|
123
|
+
end
|
124
|
+
|
125
|
+
def json(payload)
|
126
|
+
[200,
|
127
|
+
{"content-type" => "application/json", "cache-control" => "private, no-store"},
|
128
|
+
[Sidekiq.dump_json(payload)]]
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
def warn
|
134
|
+
Sidekiq.logger.warn yield
|
135
|
+
end
|
136
|
+
|
137
|
+
def _erb(file, locals)
|
138
|
+
locals&.each { |k, v| define_singleton_method(k) { v } unless singleton_methods.include? k }
|
81
139
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
140
|
+
if file.is_a?(String)
|
141
|
+
ERB.new(file).result(binding)
|
142
|
+
else
|
143
|
+
send(:"_erb_#{file}")
|
144
|
+
end
|
86
145
|
end
|
146
|
+
|
147
|
+
class_eval <<-RUBY, ::Sidekiq::Web::LAYOUT, -1 # standard:disable Style/EvalWithLocation
|
148
|
+
def _render
|
149
|
+
#{ERB.new(File.read(::Sidekiq::Web::LAYOUT)).src}
|
150
|
+
end
|
151
|
+
RUBY
|
87
152
|
end
|
88
153
|
end
|
89
154
|
end
|