sidekiq 6.5.12 → 7.3.9
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 +340 -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 +11 -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/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 +44 -115
- data/lib/sidekiq/ring_buffer.rb +2 -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 +11 -5
- data/lib/sidekiq/version.rb +6 -1
- data/lib/sidekiq/web/action.rb +29 -7
- data/lib/sidekiq/web/application.rb +82 -28
- 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 +66 -41
- 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,87 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.3.9
|
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: 2025-02-14 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.22.2
|
23
19
|
type: :runtime
|
24
20
|
prerelease: false
|
25
21
|
version_requirements: !ruby/object:Gem::Requirement
|
26
22
|
requirements:
|
27
|
-
- - "<"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '5'
|
30
23
|
- - ">="
|
31
24
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
25
|
+
version: 0.22.2
|
33
26
|
- !ruby/object:Gem::Dependency
|
34
27
|
name: connection_pool
|
35
28
|
requirement: !ruby/object:Gem::Requirement
|
36
29
|
requirements:
|
37
|
-
- - "
|
30
|
+
- - ">="
|
38
31
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
32
|
+
version: 2.3.0
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.3.0
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: rack
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
40
44
|
- - ">="
|
41
45
|
- !ruby/object:Gem::Version
|
42
|
-
version: 2.2.
|
46
|
+
version: 2.2.4
|
43
47
|
type: :runtime
|
44
48
|
prerelease: false
|
45
49
|
version_requirements: !ruby/object:Gem::Requirement
|
46
50
|
requirements:
|
47
|
-
- - "
|
51
|
+
- - ">="
|
48
52
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
53
|
+
version: 2.2.4
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: logger
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
50
58
|
- - ">="
|
51
59
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
60
|
+
version: '0'
|
61
|
+
type: :runtime
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
53
68
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
69
|
+
name: base64
|
55
70
|
requirement: !ruby/object:Gem::Requirement
|
56
71
|
requirements:
|
57
|
-
- - "
|
72
|
+
- - ">="
|
58
73
|
- !ruby/object:Gem::Version
|
59
|
-
version: '
|
74
|
+
version: '0'
|
60
75
|
type: :runtime
|
61
76
|
prerelease: false
|
62
77
|
version_requirements: !ruby/object:Gem::Requirement
|
63
78
|
requirements:
|
64
|
-
- - "
|
79
|
+
- - ">="
|
65
80
|
- !ruby/object:Gem::Version
|
66
|
-
version: '
|
81
|
+
version: '0'
|
67
82
|
description: Simple, efficient background processing for Ruby.
|
68
83
|
email:
|
69
|
-
-
|
84
|
+
- info@contribsys.com
|
70
85
|
executables:
|
71
86
|
- sidekiq
|
72
87
|
- sidekiqmon
|
@@ -74,34 +89,40 @@ extensions: []
|
|
74
89
|
extra_rdoc_files: []
|
75
90
|
files:
|
76
91
|
- Changes.md
|
77
|
-
- LICENSE
|
92
|
+
- LICENSE.txt
|
78
93
|
- README.md
|
94
|
+
- bin/multi_queue_bench
|
79
95
|
- bin/sidekiq
|
80
96
|
- bin/sidekiqload
|
81
97
|
- bin/sidekiqmon
|
98
|
+
- lib/active_job/queue_adapters/sidekiq_adapter.rb
|
82
99
|
- lib/generators/sidekiq/job_generator.rb
|
83
100
|
- lib/generators/sidekiq/templates/job.rb.erb
|
84
101
|
- lib/generators/sidekiq/templates/job_spec.rb.erb
|
85
102
|
- lib/generators/sidekiq/templates/job_test.rb.erb
|
86
103
|
- lib/sidekiq.rb
|
87
104
|
- lib/sidekiq/api.rb
|
105
|
+
- lib/sidekiq/capsule.rb
|
88
106
|
- lib/sidekiq/cli.rb
|
89
107
|
- lib/sidekiq/client.rb
|
90
108
|
- 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
|
109
|
+
- lib/sidekiq/config.rb
|
110
|
+
- lib/sidekiq/deploy.rb
|
111
|
+
- lib/sidekiq/embedded.rb
|
96
112
|
- lib/sidekiq/fetch.rb
|
113
|
+
- lib/sidekiq/iterable_job.rb
|
97
114
|
- lib/sidekiq/job.rb
|
115
|
+
- lib/sidekiq/job/interrupt_handler.rb
|
116
|
+
- lib/sidekiq/job/iterable.rb
|
117
|
+
- lib/sidekiq/job/iterable/active_record_enumerator.rb
|
118
|
+
- lib/sidekiq/job/iterable/csv_enumerator.rb
|
119
|
+
- lib/sidekiq/job/iterable/enumerators.rb
|
98
120
|
- lib/sidekiq/job_logger.rb
|
99
121
|
- lib/sidekiq/job_retry.rb
|
100
122
|
- lib/sidekiq/job_util.rb
|
101
123
|
- lib/sidekiq/launcher.rb
|
102
124
|
- lib/sidekiq/logger.rb
|
103
125
|
- lib/sidekiq/manager.rb
|
104
|
-
- lib/sidekiq/metrics/deploy.rb
|
105
126
|
- lib/sidekiq/metrics/query.rb
|
106
127
|
- lib/sidekiq/metrics/shared.rb
|
107
128
|
- lib/sidekiq/metrics/tracking.rb
|
@@ -129,17 +150,18 @@ files:
|
|
129
150
|
- lib/sidekiq/web/csrf_protection.rb
|
130
151
|
- lib/sidekiq/web/helpers.rb
|
131
152
|
- lib/sidekiq/web/router.rb
|
132
|
-
- lib/sidekiq/
|
153
|
+
- lib/sidekiq/worker_compatibility_alias.rb
|
133
154
|
- sidekiq.gemspec
|
134
155
|
- web/assets/images/apple-touch-icon.png
|
135
156
|
- web/assets/images/favicon.ico
|
136
157
|
- web/assets/images/logo.png
|
137
158
|
- web/assets/images/status.png
|
138
159
|
- web/assets/javascripts/application.js
|
160
|
+
- web/assets/javascripts/base-charts.js
|
139
161
|
- web/assets/javascripts/chart.min.js
|
140
162
|
- web/assets/javascripts/chartjs-plugin-annotation.min.js
|
163
|
+
- web/assets/javascripts/dashboard-charts.js
|
141
164
|
- web/assets/javascripts/dashboard.js
|
142
|
-
- web/assets/javascripts/graph.js
|
143
165
|
- web/assets/javascripts/metrics.js
|
144
166
|
- web/assets/stylesheets/application-dark.css
|
145
167
|
- web/assets/stylesheets/application-rtl.css
|
@@ -155,6 +177,7 @@ files:
|
|
155
177
|
- web/locales/es.yml
|
156
178
|
- web/locales/fa.yml
|
157
179
|
- web/locales/fr.yml
|
180
|
+
- web/locales/gd.yml
|
158
181
|
- web/locales/he.yml
|
159
182
|
- web/locales/hi.yml
|
160
183
|
- web/locales/it.yml
|
@@ -169,6 +192,7 @@ files:
|
|
169
192
|
- web/locales/ru.yml
|
170
193
|
- web/locales/sv.yml
|
171
194
|
- web/locales/ta.yml
|
195
|
+
- web/locales/tr.yml
|
172
196
|
- web/locales/uk.yml
|
173
197
|
- web/locales/ur.yml
|
174
198
|
- web/locales/vi.yml
|
@@ -176,6 +200,7 @@ files:
|
|
176
200
|
- web/locales/zh-tw.yml
|
177
201
|
- web/views/_footer.erb
|
178
202
|
- web/views/_job_info.erb
|
203
|
+
- web/views/_metrics_period_select.erb
|
179
204
|
- web/views/_nav.erb
|
180
205
|
- web/views/_paging.erb
|
181
206
|
- web/views/_poll_link.erb
|
@@ -184,6 +209,7 @@ files:
|
|
184
209
|
- web/views/busy.erb
|
185
210
|
- web/views/dashboard.erb
|
186
211
|
- web/views/dead.erb
|
212
|
+
- web/views/filtering.erb
|
187
213
|
- web/views/layout.erb
|
188
214
|
- web/views/metrics.erb
|
189
215
|
- web/views/metrics_for_job.erb
|
@@ -199,11 +225,11 @@ licenses:
|
|
199
225
|
- LGPL-3.0
|
200
226
|
metadata:
|
201
227
|
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
|
-
|
228
|
+
bug_tracker_uri: https://github.com/sidekiq/sidekiq/issues
|
229
|
+
documentation_uri: https://github.com/sidekiq/sidekiq/wiki
|
230
|
+
changelog_uri: https://github.com/sidekiq/sidekiq/blob/main/Changes.md
|
231
|
+
source_code_uri: https://github.com/sidekiq/sidekiq
|
232
|
+
rubygems_mfa_required: 'true'
|
207
233
|
rdoc_options: []
|
208
234
|
require_paths:
|
209
235
|
- lib
|
@@ -211,15 +237,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
211
237
|
requirements:
|
212
238
|
- - ">="
|
213
239
|
- !ruby/object:Gem::Version
|
214
|
-
version: 2.
|
240
|
+
version: 2.7.0
|
215
241
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
216
242
|
requirements:
|
217
243
|
- - ">="
|
218
244
|
- !ruby/object:Gem::Version
|
219
245
|
version: '0'
|
220
246
|
requirements: []
|
221
|
-
rubygems_version: 3.
|
222
|
-
signing_key:
|
247
|
+
rubygems_version: 3.6.2
|
223
248
|
specification_version: 4
|
224
249
|
summary: Simple, efficient background processing for Ruby
|
225
250
|
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
|