sidekiq 6.5.12 → 7.3.10
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 +348 -20
- data/README.md +43 -35
- data/bin/multi_queue_bench +271 -0
- data/bin/sidekiq +3 -8
- data/bin/sidekiqload +213 -118
- data/bin/sidekiqmon +3 -0
- data/lib/active_job/queue_adapters/sidekiq_adapter.rb +75 -0
- data/lib/generators/sidekiq/job_generator.rb +2 -0
- data/lib/sidekiq/api.rb +243 -162
- data/lib/sidekiq/capsule.rb +132 -0
- data/lib/sidekiq/cli.rb +60 -75
- data/lib/sidekiq/client.rb +87 -38
- data/lib/sidekiq/component.rb +26 -1
- data/lib/sidekiq/config.rb +311 -0
- data/lib/sidekiq/deploy.rb +64 -0
- data/lib/sidekiq/embedded.rb +63 -0
- data/lib/sidekiq/fetch.rb +12 -14
- data/lib/sidekiq/iterable_job.rb +55 -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 +294 -0
- data/lib/sidekiq/job.rb +382 -10
- data/lib/sidekiq/job_logger.rb +8 -7
- data/lib/sidekiq/job_retry.rb +42 -19
- data/lib/sidekiq/job_util.rb +53 -15
- data/lib/sidekiq/launcher.rb +71 -65
- data/lib/sidekiq/logger.rb +2 -27
- data/lib/sidekiq/manager.rb +9 -11
- data/lib/sidekiq/metrics/query.rb +9 -4
- data/lib/sidekiq/metrics/shared.rb +21 -9
- data/lib/sidekiq/metrics/tracking.rb +40 -26
- data/lib/sidekiq/middleware/chain.rb +19 -18
- data/lib/sidekiq/middleware/current_attributes.rb +85 -20
- data/lib/sidekiq/middleware/i18n.rb +2 -0
- data/lib/sidekiq/middleware/modules.rb +2 -0
- data/lib/sidekiq/monitor.rb +18 -4
- data/lib/sidekiq/paginator.rb +8 -2
- data/lib/sidekiq/processor.rb +62 -57
- data/lib/sidekiq/rails.rb +27 -10
- data/lib/sidekiq/redis_client_adapter.rb +31 -71
- data/lib/sidekiq/redis_connection.rb +54 -114
- data/lib/sidekiq/ring_buffer.rb +3 -0
- data/lib/sidekiq/scheduled.rb +22 -23
- data/lib/sidekiq/systemd.rb +2 -0
- data/lib/sidekiq/testing.rb +37 -46
- data/lib/sidekiq/transaction_aware_client.rb +23 -9
- data/lib/sidekiq/version.rb +6 -1
- data/lib/sidekiq/web/action.rb +29 -7
- data/lib/sidekiq/web/application.rb +84 -30
- data/lib/sidekiq/web/csrf_protection.rb +10 -7
- data/lib/sidekiq/web/helpers.rb +110 -49
- data/lib/sidekiq/web/router.rb +5 -2
- data/lib/sidekiq/web.rb +70 -17
- data/lib/sidekiq/worker_compatibility_alias.rb +13 -0
- data/lib/sidekiq.rb +78 -274
- data/sidekiq.gemspec +13 -10
- data/web/assets/javascripts/application.js +44 -0
- data/web/assets/javascripts/base-charts.js +106 -0
- data/web/assets/javascripts/dashboard-charts.js +194 -0
- data/web/assets/javascripts/dashboard.js +17 -233
- data/web/assets/javascripts/metrics.js +151 -115
- data/web/assets/stylesheets/application-dark.css +4 -0
- data/web/assets/stylesheets/application-rtl.css +10 -89
- data/web/assets/stylesheets/application.css +56 -296
- data/web/locales/ar.yml +70 -70
- data/web/locales/cs.yml +62 -62
- data/web/locales/da.yml +60 -53
- data/web/locales/de.yml +65 -65
- data/web/locales/el.yml +2 -7
- data/web/locales/en.yml +81 -71
- data/web/locales/es.yml +68 -68
- data/web/locales/fa.yml +65 -65
- data/web/locales/fr.yml +80 -67
- data/web/locales/gd.yml +98 -0
- data/web/locales/he.yml +65 -64
- data/web/locales/hi.yml +59 -59
- data/web/locales/it.yml +85 -54
- data/web/locales/ja.yml +67 -70
- data/web/locales/ko.yml +52 -52
- data/web/locales/lt.yml +66 -66
- data/web/locales/nb.yml +61 -61
- data/web/locales/nl.yml +52 -52
- data/web/locales/pl.yml +45 -45
- data/web/locales/pt-br.yml +78 -69
- data/web/locales/pt.yml +51 -51
- data/web/locales/ru.yml +67 -66
- data/web/locales/sv.yml +53 -53
- data/web/locales/ta.yml +60 -60
- data/web/locales/tr.yml +100 -0
- data/web/locales/uk.yml +85 -61
- data/web/locales/ur.yml +64 -64
- data/web/locales/vi.yml +67 -67
- data/web/locales/zh-cn.yml +20 -19
- data/web/locales/zh-tw.yml +10 -2
- data/web/views/_footer.erb +16 -2
- data/web/views/_job_info.erb +18 -2
- data/web/views/_metrics_period_select.erb +12 -0
- data/web/views/_paging.erb +2 -0
- data/web/views/_poll_link.erb +1 -1
- data/web/views/_summary.erb +7 -7
- data/web/views/busy.erb +46 -35
- data/web/views/dashboard.erb +32 -8
- data/web/views/filtering.erb +6 -0
- data/web/views/layout.erb +6 -6
- data/web/views/metrics.erb +47 -26
- data/web/views/metrics_for_job.erb +43 -71
- data/web/views/morgue.erb +7 -11
- data/web/views/queue.erb +11 -15
- data/web/views/queues.erb +9 -3
- data/web/views/retries.erb +5 -9
- data/web/views/scheduled.erb +12 -13
- metadata +81 -38
- data/lib/sidekiq/delay.rb +0 -43
- data/lib/sidekiq/extensions/action_mailer.rb +0 -48
- data/lib/sidekiq/extensions/active_record.rb +0 -43
- data/lib/sidekiq/extensions/class_methods.rb +0 -43
- data/lib/sidekiq/extensions/generic_proxy.rb +0 -33
- data/lib/sidekiq/metrics/deploy.rb +0 -47
- data/lib/sidekiq/worker.rb +0 -370
- data/web/assets/javascripts/graph.js +0 -16
- /data/{LICENSE → LICENSE.txt} +0 -0
metadata
CHANGED
|
@@ -1,72 +1,105 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sidekiq
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 7.3.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mike Perham
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: redis
|
|
13
|
+
name: redis-client
|
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
|
16
15
|
requirements:
|
|
17
|
-
- - "<"
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '5'
|
|
20
16
|
- - ">="
|
|
21
17
|
- !ruby/object:Gem::Version
|
|
22
|
-
version:
|
|
18
|
+
version: 0.23.0
|
|
19
|
+
- - "<"
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '1'
|
|
23
22
|
type: :runtime
|
|
24
23
|
prerelease: false
|
|
25
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
25
|
requirements:
|
|
27
|
-
- - "<"
|
|
28
|
-
- !ruby/object:Gem::Version
|
|
29
|
-
version: '5'
|
|
30
26
|
- - ">="
|
|
31
27
|
- !ruby/object:Gem::Version
|
|
32
|
-
version:
|
|
28
|
+
version: 0.23.0
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '1'
|
|
33
32
|
- !ruby/object:Gem::Dependency
|
|
34
33
|
name: connection_pool
|
|
35
34
|
requirement: !ruby/object:Gem::Requirement
|
|
36
35
|
requirements:
|
|
36
|
+
- - ">="
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: 2.3.0
|
|
39
|
+
- - "<"
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '3'
|
|
42
|
+
type: :runtime
|
|
43
|
+
prerelease: false
|
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - ">="
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: 2.3.0
|
|
37
49
|
- - "<"
|
|
38
50
|
- !ruby/object:Gem::Version
|
|
39
51
|
version: '3'
|
|
52
|
+
- !ruby/object:Gem::Dependency
|
|
53
|
+
name: rack
|
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
|
55
|
+
requirements:
|
|
40
56
|
- - ">="
|
|
41
57
|
- !ruby/object:Gem::Version
|
|
42
|
-
version: 2.2.
|
|
58
|
+
version: 2.2.4
|
|
59
|
+
- - "<"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '3.3'
|
|
43
62
|
type: :runtime
|
|
44
63
|
prerelease: false
|
|
45
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
65
|
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: 2.2.4
|
|
47
69
|
- - "<"
|
|
48
70
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: '3'
|
|
71
|
+
version: '3.3'
|
|
72
|
+
- !ruby/object:Gem::Dependency
|
|
73
|
+
name: logger
|
|
74
|
+
requirement: !ruby/object:Gem::Requirement
|
|
75
|
+
requirements:
|
|
76
|
+
- - ">="
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: '0'
|
|
79
|
+
type: :runtime
|
|
80
|
+
prerelease: false
|
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
82
|
+
requirements:
|
|
50
83
|
- - ">="
|
|
51
84
|
- !ruby/object:Gem::Version
|
|
52
|
-
version:
|
|
85
|
+
version: '0'
|
|
53
86
|
- !ruby/object:Gem::Dependency
|
|
54
|
-
name:
|
|
87
|
+
name: base64
|
|
55
88
|
requirement: !ruby/object:Gem::Requirement
|
|
56
89
|
requirements:
|
|
57
|
-
- - "
|
|
90
|
+
- - ">="
|
|
58
91
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: '
|
|
92
|
+
version: '0'
|
|
60
93
|
type: :runtime
|
|
61
94
|
prerelease: false
|
|
62
95
|
version_requirements: !ruby/object:Gem::Requirement
|
|
63
96
|
requirements:
|
|
64
|
-
- - "
|
|
97
|
+
- - ">="
|
|
65
98
|
- !ruby/object:Gem::Version
|
|
66
|
-
version: '
|
|
99
|
+
version: '0'
|
|
67
100
|
description: Simple, efficient background processing for Ruby.
|
|
68
101
|
email:
|
|
69
|
-
-
|
|
102
|
+
- info@contribsys.com
|
|
70
103
|
executables:
|
|
71
104
|
- sidekiq
|
|
72
105
|
- sidekiqmon
|
|
@@ -74,34 +107,40 @@ extensions: []
|
|
|
74
107
|
extra_rdoc_files: []
|
|
75
108
|
files:
|
|
76
109
|
- Changes.md
|
|
77
|
-
- LICENSE
|
|
110
|
+
- LICENSE.txt
|
|
78
111
|
- README.md
|
|
112
|
+
- bin/multi_queue_bench
|
|
79
113
|
- bin/sidekiq
|
|
80
114
|
- bin/sidekiqload
|
|
81
115
|
- bin/sidekiqmon
|
|
116
|
+
- lib/active_job/queue_adapters/sidekiq_adapter.rb
|
|
82
117
|
- lib/generators/sidekiq/job_generator.rb
|
|
83
118
|
- lib/generators/sidekiq/templates/job.rb.erb
|
|
84
119
|
- lib/generators/sidekiq/templates/job_spec.rb.erb
|
|
85
120
|
- lib/generators/sidekiq/templates/job_test.rb.erb
|
|
86
121
|
- lib/sidekiq.rb
|
|
87
122
|
- lib/sidekiq/api.rb
|
|
123
|
+
- lib/sidekiq/capsule.rb
|
|
88
124
|
- lib/sidekiq/cli.rb
|
|
89
125
|
- lib/sidekiq/client.rb
|
|
90
126
|
- lib/sidekiq/component.rb
|
|
91
|
-
- lib/sidekiq/
|
|
92
|
-
- lib/sidekiq/
|
|
93
|
-
- lib/sidekiq/
|
|
94
|
-
- lib/sidekiq/extensions/class_methods.rb
|
|
95
|
-
- lib/sidekiq/extensions/generic_proxy.rb
|
|
127
|
+
- lib/sidekiq/config.rb
|
|
128
|
+
- lib/sidekiq/deploy.rb
|
|
129
|
+
- lib/sidekiq/embedded.rb
|
|
96
130
|
- lib/sidekiq/fetch.rb
|
|
131
|
+
- lib/sidekiq/iterable_job.rb
|
|
97
132
|
- lib/sidekiq/job.rb
|
|
133
|
+
- lib/sidekiq/job/interrupt_handler.rb
|
|
134
|
+
- lib/sidekiq/job/iterable.rb
|
|
135
|
+
- lib/sidekiq/job/iterable/active_record_enumerator.rb
|
|
136
|
+
- lib/sidekiq/job/iterable/csv_enumerator.rb
|
|
137
|
+
- lib/sidekiq/job/iterable/enumerators.rb
|
|
98
138
|
- lib/sidekiq/job_logger.rb
|
|
99
139
|
- lib/sidekiq/job_retry.rb
|
|
100
140
|
- lib/sidekiq/job_util.rb
|
|
101
141
|
- lib/sidekiq/launcher.rb
|
|
102
142
|
- lib/sidekiq/logger.rb
|
|
103
143
|
- lib/sidekiq/manager.rb
|
|
104
|
-
- lib/sidekiq/metrics/deploy.rb
|
|
105
144
|
- lib/sidekiq/metrics/query.rb
|
|
106
145
|
- lib/sidekiq/metrics/shared.rb
|
|
107
146
|
- lib/sidekiq/metrics/tracking.rb
|
|
@@ -129,17 +168,18 @@ files:
|
|
|
129
168
|
- lib/sidekiq/web/csrf_protection.rb
|
|
130
169
|
- lib/sidekiq/web/helpers.rb
|
|
131
170
|
- lib/sidekiq/web/router.rb
|
|
132
|
-
- lib/sidekiq/
|
|
171
|
+
- lib/sidekiq/worker_compatibility_alias.rb
|
|
133
172
|
- sidekiq.gemspec
|
|
134
173
|
- web/assets/images/apple-touch-icon.png
|
|
135
174
|
- web/assets/images/favicon.ico
|
|
136
175
|
- web/assets/images/logo.png
|
|
137
176
|
- web/assets/images/status.png
|
|
138
177
|
- web/assets/javascripts/application.js
|
|
178
|
+
- web/assets/javascripts/base-charts.js
|
|
139
179
|
- web/assets/javascripts/chart.min.js
|
|
140
180
|
- web/assets/javascripts/chartjs-plugin-annotation.min.js
|
|
181
|
+
- web/assets/javascripts/dashboard-charts.js
|
|
141
182
|
- web/assets/javascripts/dashboard.js
|
|
142
|
-
- web/assets/javascripts/graph.js
|
|
143
183
|
- web/assets/javascripts/metrics.js
|
|
144
184
|
- web/assets/stylesheets/application-dark.css
|
|
145
185
|
- web/assets/stylesheets/application-rtl.css
|
|
@@ -155,6 +195,7 @@ files:
|
|
|
155
195
|
- web/locales/es.yml
|
|
156
196
|
- web/locales/fa.yml
|
|
157
197
|
- web/locales/fr.yml
|
|
198
|
+
- web/locales/gd.yml
|
|
158
199
|
- web/locales/he.yml
|
|
159
200
|
- web/locales/hi.yml
|
|
160
201
|
- web/locales/it.yml
|
|
@@ -169,6 +210,7 @@ files:
|
|
|
169
210
|
- web/locales/ru.yml
|
|
170
211
|
- web/locales/sv.yml
|
|
171
212
|
- web/locales/ta.yml
|
|
213
|
+
- web/locales/tr.yml
|
|
172
214
|
- web/locales/uk.yml
|
|
173
215
|
- web/locales/ur.yml
|
|
174
216
|
- web/locales/vi.yml
|
|
@@ -176,6 +218,7 @@ files:
|
|
|
176
218
|
- web/locales/zh-tw.yml
|
|
177
219
|
- web/views/_footer.erb
|
|
178
220
|
- web/views/_job_info.erb
|
|
221
|
+
- web/views/_metrics_period_select.erb
|
|
179
222
|
- web/views/_nav.erb
|
|
180
223
|
- web/views/_paging.erb
|
|
181
224
|
- web/views/_poll_link.erb
|
|
@@ -184,6 +227,7 @@ files:
|
|
|
184
227
|
- web/views/busy.erb
|
|
185
228
|
- web/views/dashboard.erb
|
|
186
229
|
- web/views/dead.erb
|
|
230
|
+
- web/views/filtering.erb
|
|
187
231
|
- web/views/layout.erb
|
|
188
232
|
- web/views/metrics.erb
|
|
189
233
|
- web/views/metrics_for_job.erb
|
|
@@ -199,11 +243,11 @@ licenses:
|
|
|
199
243
|
- LGPL-3.0
|
|
200
244
|
metadata:
|
|
201
245
|
homepage_uri: https://sidekiq.org
|
|
202
|
-
bug_tracker_uri: https://github.com/
|
|
203
|
-
documentation_uri: https://github.com/
|
|
204
|
-
changelog_uri: https://github.com/
|
|
205
|
-
source_code_uri: https://github.com/
|
|
206
|
-
|
|
246
|
+
bug_tracker_uri: https://github.com/sidekiq/sidekiq/issues
|
|
247
|
+
documentation_uri: https://github.com/sidekiq/sidekiq/wiki
|
|
248
|
+
changelog_uri: https://github.com/sidekiq/sidekiq/blob/main/Changes.md
|
|
249
|
+
source_code_uri: https://github.com/sidekiq/sidekiq
|
|
250
|
+
rubygems_mfa_required: 'true'
|
|
207
251
|
rdoc_options: []
|
|
208
252
|
require_paths:
|
|
209
253
|
- lib
|
|
@@ -211,15 +255,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
211
255
|
requirements:
|
|
212
256
|
- - ">="
|
|
213
257
|
- !ruby/object:Gem::Version
|
|
214
|
-
version: 2.
|
|
258
|
+
version: 2.7.0
|
|
215
259
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
216
260
|
requirements:
|
|
217
261
|
- - ">="
|
|
218
262
|
- !ruby/object:Gem::Version
|
|
219
263
|
version: '0'
|
|
220
264
|
requirements: []
|
|
221
|
-
rubygems_version: 3.
|
|
222
|
-
signing_key:
|
|
265
|
+
rubygems_version: 3.6.9
|
|
223
266
|
specification_version: 4
|
|
224
267
|
summary: Simple, efficient background processing for Ruby
|
|
225
268
|
test_files: []
|
data/lib/sidekiq/delay.rb
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Sidekiq # :nodoc:
|
|
4
|
-
module Extensions
|
|
5
|
-
def self.enable_delay!
|
|
6
|
-
warn "Sidekiq's Delayed Extensions will be removed in Sidekiq 7.0", uplevel: 1
|
|
7
|
-
|
|
8
|
-
if defined?(::ActiveSupport)
|
|
9
|
-
require "sidekiq/extensions/active_record"
|
|
10
|
-
require "sidekiq/extensions/action_mailer"
|
|
11
|
-
|
|
12
|
-
# Need to patch Psych so it can autoload classes whose names are serialized
|
|
13
|
-
# in the delayed YAML.
|
|
14
|
-
Psych::Visitors::ToRuby.prepend(Sidekiq::Extensions::PsychAutoload)
|
|
15
|
-
|
|
16
|
-
ActiveSupport.on_load(:active_record) do
|
|
17
|
-
include Sidekiq::Extensions::ActiveRecord
|
|
18
|
-
end
|
|
19
|
-
ActiveSupport.on_load(:action_mailer) do
|
|
20
|
-
extend Sidekiq::Extensions::ActionMailer
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
require "sidekiq/extensions/class_methods"
|
|
25
|
-
Module.__send__(:include, Sidekiq::Extensions::Klass)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
module PsychAutoload
|
|
29
|
-
def resolve_class(klass_name)
|
|
30
|
-
return nil if !klass_name || klass_name.empty?
|
|
31
|
-
# constantize
|
|
32
|
-
names = klass_name.split("::")
|
|
33
|
-
names.shift if names.empty? || names.first.empty?
|
|
34
|
-
|
|
35
|
-
names.inject(Object) do |constant, name|
|
|
36
|
-
constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
|
|
37
|
-
end
|
|
38
|
-
rescue NameError
|
|
39
|
-
super
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "sidekiq/extensions/generic_proxy"
|
|
4
|
-
|
|
5
|
-
module Sidekiq
|
|
6
|
-
module Extensions
|
|
7
|
-
##
|
|
8
|
-
# Adds +delay+, +delay_for+ and +delay_until+ methods to ActionMailer to offload arbitrary email
|
|
9
|
-
# delivery to Sidekiq.
|
|
10
|
-
#
|
|
11
|
-
# @example
|
|
12
|
-
# UserMailer.delay.send_welcome_email(new_user)
|
|
13
|
-
# UserMailer.delay_for(5.days).send_welcome_email(new_user)
|
|
14
|
-
# UserMailer.delay_until(5.days.from_now).send_welcome_email(new_user)
|
|
15
|
-
class DelayedMailer
|
|
16
|
-
include Sidekiq::Worker
|
|
17
|
-
|
|
18
|
-
def perform(yml)
|
|
19
|
-
(target, method_name, args) = YAML.load(yml)
|
|
20
|
-
msg = target.public_send(method_name, *args)
|
|
21
|
-
# The email method can return nil, which causes ActionMailer to return
|
|
22
|
-
# an undeliverable empty message.
|
|
23
|
-
if msg
|
|
24
|
-
msg.deliver_now
|
|
25
|
-
else
|
|
26
|
-
raise "#{target.name}##{method_name} returned an undeliverable mail object"
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
module ActionMailer
|
|
32
|
-
def sidekiq_delay(options = {})
|
|
33
|
-
Proxy.new(DelayedMailer, self, options)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def sidekiq_delay_for(interval, options = {})
|
|
37
|
-
Proxy.new(DelayedMailer, self, options.merge("at" => Time.now.to_f + interval.to_f))
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def sidekiq_delay_until(timestamp, options = {})
|
|
41
|
-
Proxy.new(DelayedMailer, self, options.merge("at" => timestamp.to_f))
|
|
42
|
-
end
|
|
43
|
-
alias_method :delay, :sidekiq_delay
|
|
44
|
-
alias_method :delay_for, :sidekiq_delay_for
|
|
45
|
-
alias_method :delay_until, :sidekiq_delay_until
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "sidekiq/extensions/generic_proxy"
|
|
4
|
-
|
|
5
|
-
module Sidekiq
|
|
6
|
-
module Extensions
|
|
7
|
-
##
|
|
8
|
-
# Adds +delay+, +delay_for+ and +delay_until+ methods to ActiveRecord to offload instance method
|
|
9
|
-
# execution to Sidekiq.
|
|
10
|
-
#
|
|
11
|
-
# @example
|
|
12
|
-
# User.recent_signups.each { |user| user.delay.mark_as_awesome }
|
|
13
|
-
#
|
|
14
|
-
# Please note, this is not recommended as this will serialize the entire
|
|
15
|
-
# object to Redis. Your Sidekiq jobs should pass IDs, not entire instances.
|
|
16
|
-
# This is here for backwards compatibility with Delayed::Job only.
|
|
17
|
-
class DelayedModel
|
|
18
|
-
include Sidekiq::Worker
|
|
19
|
-
|
|
20
|
-
def perform(yml)
|
|
21
|
-
(target, method_name, args) = YAML.load(yml)
|
|
22
|
-
target.__send__(method_name, *args)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
module ActiveRecord
|
|
27
|
-
def sidekiq_delay(options = {})
|
|
28
|
-
Proxy.new(DelayedModel, self, options)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def sidekiq_delay_for(interval, options = {})
|
|
32
|
-
Proxy.new(DelayedModel, self, options.merge("at" => Time.now.to_f + interval.to_f))
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def sidekiq_delay_until(timestamp, options = {})
|
|
36
|
-
Proxy.new(DelayedModel, self, options.merge("at" => timestamp.to_f))
|
|
37
|
-
end
|
|
38
|
-
alias_method :delay, :sidekiq_delay
|
|
39
|
-
alias_method :delay_for, :sidekiq_delay_for
|
|
40
|
-
alias_method :delay_until, :sidekiq_delay_until
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "sidekiq/extensions/generic_proxy"
|
|
4
|
-
|
|
5
|
-
module Sidekiq
|
|
6
|
-
module Extensions
|
|
7
|
-
##
|
|
8
|
-
# Adds `delay`, `delay_for` and `delay_until` methods to all Classes to offload class method
|
|
9
|
-
# execution to Sidekiq.
|
|
10
|
-
#
|
|
11
|
-
# @example
|
|
12
|
-
# User.delay.delete_inactive
|
|
13
|
-
# Wikipedia.delay.download_changes_for(Date.today)
|
|
14
|
-
#
|
|
15
|
-
class DelayedClass
|
|
16
|
-
include Sidekiq::Worker
|
|
17
|
-
|
|
18
|
-
def perform(yml)
|
|
19
|
-
(target, method_name, args) = YAML.load(yml)
|
|
20
|
-
target.__send__(method_name, *args)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
module Klass
|
|
25
|
-
def sidekiq_delay(options = {})
|
|
26
|
-
Proxy.new(DelayedClass, self, options)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def sidekiq_delay_for(interval, options = {})
|
|
30
|
-
Proxy.new(DelayedClass, self, options.merge("at" => Time.now.to_f + interval.to_f))
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def sidekiq_delay_until(timestamp, options = {})
|
|
34
|
-
Proxy.new(DelayedClass, self, options.merge("at" => timestamp.to_f))
|
|
35
|
-
end
|
|
36
|
-
alias_method :delay, :sidekiq_delay
|
|
37
|
-
alias_method :delay_for, :sidekiq_delay_for
|
|
38
|
-
alias_method :delay_until, :sidekiq_delay_until
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
Module.__send__(:include, Sidekiq::Extensions::Klass) unless defined?(::Rails)
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "yaml"
|
|
4
|
-
|
|
5
|
-
module Sidekiq
|
|
6
|
-
module Extensions
|
|
7
|
-
SIZE_LIMIT = 8_192
|
|
8
|
-
|
|
9
|
-
class Proxy < BasicObject
|
|
10
|
-
def initialize(performable, target, options = {})
|
|
11
|
-
@performable = performable
|
|
12
|
-
@target = target
|
|
13
|
-
@opts = options.transform_keys(&:to_s)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def method_missing(name, *args)
|
|
17
|
-
# Sidekiq has a limitation in that its message must be JSON.
|
|
18
|
-
# JSON can't round trip real Ruby objects so we use YAML to
|
|
19
|
-
# serialize the objects to a String. The YAML will be converted
|
|
20
|
-
# to JSON and then deserialized on the other side back into a
|
|
21
|
-
# Ruby object.
|
|
22
|
-
obj = [@target, name, args]
|
|
23
|
-
marshalled = ::YAML.dump(obj)
|
|
24
|
-
if marshalled.size > SIZE_LIMIT
|
|
25
|
-
::Sidekiq.logger.warn { "#{@target}.#{name} job argument is #{marshalled.bytesize} bytes, you should refactor it to reduce the size" }
|
|
26
|
-
end
|
|
27
|
-
@performable.client_push({"class" => @performable,
|
|
28
|
-
"args" => [marshalled],
|
|
29
|
-
"display_class" => "#{@target}.#{name}"}.merge(@opts))
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
require "sidekiq"
|
|
2
|
-
require "time"
|
|
3
|
-
|
|
4
|
-
# This file is designed to be required within the user's
|
|
5
|
-
# deployment script; it should need a bare minimum of dependencies.
|
|
6
|
-
#
|
|
7
|
-
# require "sidekiq/metrics/deploy"
|
|
8
|
-
# gitdesc = `git log -1 --format="%h %s"`.strip
|
|
9
|
-
# d = Sidekiq::Metrics::Deploy.new
|
|
10
|
-
# d.mark(label: gitdesc)
|
|
11
|
-
#
|
|
12
|
-
# Note that you cannot mark more than once per minute. This is a feature, not a bug.
|
|
13
|
-
module Sidekiq
|
|
14
|
-
module Metrics
|
|
15
|
-
class Deploy
|
|
16
|
-
MARK_TTL = 90 * 24 * 60 * 60 # 90 days
|
|
17
|
-
|
|
18
|
-
def initialize(pool = Sidekiq.redis_pool)
|
|
19
|
-
@pool = pool
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def mark(at: Time.now, label: "")
|
|
23
|
-
# we need to round the timestamp so that we gracefully
|
|
24
|
-
# handle an excepted common error in marking deploys:
|
|
25
|
-
# having every process mark its deploy, leading
|
|
26
|
-
# to N marks for each deploy. Instead we round the time
|
|
27
|
-
# to the minute so that multple marks within that minute
|
|
28
|
-
# will all naturally rollup into one mark per minute.
|
|
29
|
-
whence = at.utc
|
|
30
|
-
floor = Time.utc(whence.year, whence.month, whence.mday, whence.hour, whence.min, 0)
|
|
31
|
-
datecode = floor.strftime("%Y%m%d")
|
|
32
|
-
key = "#{datecode}-marks"
|
|
33
|
-
@pool.with do |c|
|
|
34
|
-
c.pipelined do |pipe|
|
|
35
|
-
pipe.hsetnx(key, floor.iso8601, label)
|
|
36
|
-
pipe.expire(key, MARK_TTL)
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def fetch(date = Time.now.utc.to_date)
|
|
42
|
-
datecode = date.strftime("%Y%m%d")
|
|
43
|
-
@pool.with { |c| c.hgetall("#{datecode}-marks") }
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|