sidekiq_alive 2.0.2 → 2.1.0
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/.tool-versions +1 -0
- data/Gemfile.lock +5 -15
- data/README.md +32 -12
- data/docker-compose.yml +6 -0
- data/lib/sidekiq_alive.rb +2 -1
- data/lib/sidekiq_alive/config.rb +8 -2
- data/lib/sidekiq_alive/server.rb +38 -15
- data/lib/sidekiq_alive/version.rb +1 -1
- data/lib/sidekiq_alive/worker.rb +7 -1
- data/sidekiq_alive.gemspec +1 -2
- metadata +7 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6a2151aa5146a6a40096e4513702809296876a902a7def0d24d59bad6f110da
|
4
|
+
data.tar.gz: b99cd52eb4e5b694b6ca23d9b141d59b1ce362f914b74c63ea42b741dd4d7206
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e82159d26a9e62445880b525619c11e6fe18d3f18378c72147de816d302efd7b3911aad3ff53c30fdd66982fa58ea4be7ff32ab3abd98c9f83f43127442c2db1
|
7
|
+
data.tar.gz: d5911f55bbd93e93baee10a8f28466eab44ca21980b7922ab05cb697d0d5fc2bdc4a09a70336d6f4f61614ba85a148b1c576eeba3f455078f4a935cec649f1f8
|
data/.tool-versions
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby 2.7.4
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
sidekiq_alive (2.0.
|
4
|
+
sidekiq_alive (2.0.6)
|
5
5
|
sidekiq
|
6
|
-
sinatra
|
7
6
|
|
8
7
|
GEM
|
9
8
|
remote: https://rubygems.org/
|
@@ -13,17 +12,15 @@ GEM
|
|
13
12
|
diff-lcs (1.3)
|
14
13
|
method_source (0.9.2)
|
15
14
|
mock_redis (0.19.0)
|
16
|
-
mustermann (1.1.1)
|
17
|
-
ruby2_keywords (~> 0.0.1)
|
18
15
|
pry (0.12.2)
|
19
16
|
coderay (~> 1.1.0)
|
20
17
|
method_source (~> 0.9.0)
|
21
|
-
rack (2.
|
18
|
+
rack (2.2.3)
|
22
19
|
rack-protection (2.0.5)
|
23
20
|
rack
|
24
21
|
rack-test (1.1.0)
|
25
22
|
rack (>= 1.0, < 3)
|
26
|
-
rake (
|
23
|
+
rake (13.0.3)
|
27
24
|
redis (4.1.0)
|
28
25
|
rspec (3.8.0)
|
29
26
|
rspec-core (~> 3.8.0)
|
@@ -41,18 +38,11 @@ GEM
|
|
41
38
|
rspec-core (~> 3.0, >= 3.0.0)
|
42
39
|
sidekiq (>= 2.4.0)
|
43
40
|
rspec-support (3.8.0)
|
44
|
-
ruby2_keywords (0.0.2)
|
45
41
|
sidekiq (5.2.5)
|
46
42
|
connection_pool (~> 2.2, >= 2.2.2)
|
47
43
|
rack (>= 1.5.0)
|
48
44
|
rack-protection (>= 1.5.0)
|
49
45
|
redis (>= 3.3.5, < 5)
|
50
|
-
sinatra (2.0.5)
|
51
|
-
mustermann (~> 1.0)
|
52
|
-
rack (~> 2.0)
|
53
|
-
rack-protection (= 2.0.5)
|
54
|
-
tilt (~> 2.0)
|
55
|
-
tilt (2.0.10)
|
56
46
|
|
57
47
|
PLATFORMS
|
58
48
|
ruby
|
@@ -62,10 +52,10 @@ DEPENDENCIES
|
|
62
52
|
mock_redis
|
63
53
|
pry
|
64
54
|
rack-test
|
65
|
-
rake (~>
|
55
|
+
rake (~> 13.0)
|
66
56
|
rspec (~> 3.0)
|
67
57
|
rspec-sidekiq (~> 3.0)
|
68
58
|
sidekiq_alive!
|
69
59
|
|
70
60
|
BUNDLED WITH
|
71
|
-
|
61
|
+
2.2.22
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
SidekiqAlive offers a solution to add liveness probe for a Sidekiq instance deployed in Kubernetes.
|
8
8
|
This library can be used to check sidekiq health outside kubernetes.
|
9
9
|
|
10
|
-
|
10
|
+
**How?**
|
11
11
|
|
12
12
|
A http server is started and on each requests validates that a liveness key is stored in Redis. If it is there means is working.
|
13
13
|
|
@@ -52,7 +52,6 @@ Or install it yourself as:
|
|
52
52
|
|
53
53
|
$ gem install sidekiq_alive
|
54
54
|
|
55
|
-
|
56
55
|
## Usage
|
57
56
|
|
58
57
|
SidekiqAlive will start when running `sidekiq` command.
|
@@ -65,11 +64,10 @@ bundle exec sidekiq
|
|
65
64
|
|
66
65
|
```
|
67
66
|
curl localhost:7433
|
68
|
-
#=> Alive!
|
67
|
+
#=> Alive!
|
69
68
|
```
|
70
69
|
|
71
|
-
|
72
|
-
__how to disable?__
|
70
|
+
**how to disable?**
|
73
71
|
You can disabled by setting `ENV` variable `DISABLE_SIDEKIQ_ALIVE`
|
74
72
|
example:
|
75
73
|
|
@@ -115,7 +113,7 @@ spec:
|
|
115
113
|
preStop:
|
116
114
|
exec:
|
117
115
|
# SIGTERM triggers a quick exit; gracefully terminate instead
|
118
|
-
command: [
|
116
|
+
command: ['bundle', 'exec', 'sidekiqctl', 'quiet']
|
119
117
|
terminationGracePeriodSeconds: 60 # put your longest Job time here plus security time.
|
120
118
|
```
|
121
119
|
|
@@ -172,7 +170,7 @@ spec:
|
|
172
170
|
preStop:
|
173
171
|
exec:
|
174
172
|
# SIGTERM triggers a quick exit; gracefully terminate instead
|
175
|
-
command: [
|
173
|
+
command: ['kube/sidekiq_quiet']
|
176
174
|
terminationGracePeriodSeconds: 60 # put your longest Job time here plus security time.
|
177
175
|
```
|
178
176
|
|
@@ -196,12 +194,34 @@ curl localhost:7433
|
|
196
194
|
|
197
195
|
```ruby
|
198
196
|
SidekiqAlive.setup do |config|
|
197
|
+
# ==> Server host
|
198
|
+
# Host to bind the server.
|
199
|
+
# Can also be set with the environment variable SIDEKIQ_ALIVE_HOST.
|
200
|
+
# default: 0.0.0.0
|
201
|
+
#
|
202
|
+
# config.host = 0.0.0.0
|
203
|
+
|
199
204
|
# ==> Server port
|
200
|
-
# Port to bind the server
|
205
|
+
# Port to bind the server.
|
206
|
+
# Can also be set with the environment variable SIDEKIQ_ALIVE_PORT.
|
201
207
|
# default: 7433
|
202
208
|
#
|
203
209
|
# config.port = 7433
|
204
210
|
|
211
|
+
# ==> Server path
|
212
|
+
# HTTP path to respond to.
|
213
|
+
# Can also be set with the environment variable SIDEKIQ_ALIVE_PATH.
|
214
|
+
# default: '/'
|
215
|
+
#
|
216
|
+
# config.path = '/'
|
217
|
+
|
218
|
+
# ==> Custom Liveness Probe
|
219
|
+
# Extra check to decide if restart the pod or not for example connection to DB.
|
220
|
+
# `false`, `nil` or `raise` will not write the liveness probe
|
221
|
+
# default: proc { true }
|
222
|
+
#
|
223
|
+
# config.custom_liveness_probe = proc { db_running? }
|
224
|
+
|
205
225
|
# ==> Liveness key
|
206
226
|
# Key to be stored in Redis as probe of liveness
|
207
227
|
# default: "SIDEKIQ::LIVENESS_PROBE_TIMESTAMP"
|
@@ -233,11 +253,11 @@ SidekiqAlive.setup do |config|
|
|
233
253
|
# config.queue_prefix = :other
|
234
254
|
|
235
255
|
# ==> Rack server
|
236
|
-
# Web server used to
|
237
|
-
#
|
256
|
+
# Web server used to serve an HTTP response.
|
257
|
+
# Can also be set with the environment variable SIDEKIQ_ALIVE_SERVER.
|
258
|
+
# default: 'webrick'
|
238
259
|
#
|
239
|
-
#
|
240
|
-
|
260
|
+
# config.server = 'puma'
|
241
261
|
end
|
242
262
|
```
|
243
263
|
|
data/docker-compose.yml
ADDED
data/lib/sidekiq_alive.rb
CHANGED
@@ -9,7 +9,7 @@ module SidekiqAlive
|
|
9
9
|
SidekiqAlive::Worker.sidekiq_options queue: current_queue
|
10
10
|
Sidekiq.configure_server do |sq_config|
|
11
11
|
|
12
|
-
sq_config.options[:queues]
|
12
|
+
sq_config.options[:queues].unshift(current_queue)
|
13
13
|
|
14
14
|
sq_config.on(:startup) do
|
15
15
|
SidekiqAlive.tap do |sa|
|
@@ -27,6 +27,7 @@ module SidekiqAlive
|
|
27
27
|
sq_config.on(:quiet) do
|
28
28
|
SidekiqAlive.unregister_current_instance
|
29
29
|
end
|
30
|
+
|
30
31
|
sq_config.on(:shutdown) do
|
31
32
|
Process.kill('TERM', @server_pid) unless @server_pid.nil?
|
32
33
|
Process.wait(@server_pid) unless @server_pid.nil?
|
data/lib/sidekiq_alive/config.rb
CHANGED
@@ -4,26 +4,32 @@ module SidekiqAlive
|
|
4
4
|
class Config
|
5
5
|
include Singleton
|
6
6
|
|
7
|
-
attr_accessor :
|
7
|
+
attr_accessor :host,
|
8
|
+
:port,
|
9
|
+
:path,
|
8
10
|
:liveness_key,
|
9
11
|
:time_to_live,
|
10
12
|
:callback,
|
11
13
|
:registered_instance_key,
|
12
14
|
:queue_prefix,
|
13
|
-
:server
|
15
|
+
:server,
|
16
|
+
:custom_liveness_probe
|
14
17
|
|
15
18
|
def initialize
|
16
19
|
set_defaults
|
17
20
|
end
|
18
21
|
|
19
22
|
def set_defaults
|
23
|
+
@host = ENV['SIDEKIQ_ALIVE_HOST'] || '0.0.0.0'
|
20
24
|
@port = ENV['SIDEKIQ_ALIVE_PORT'] || 7433
|
25
|
+
@path = ENV['SIDEKIQ_ALIVE_PATH'] || '/'
|
21
26
|
@liveness_key = 'SIDEKIQ::LIVENESS_PROBE_TIMESTAMP'
|
22
27
|
@time_to_live = 10 * 60
|
23
28
|
@callback = proc {}
|
24
29
|
@registered_instance_key = 'SIDEKIQ_REGISTERED_INSTANCE'
|
25
30
|
@queue_prefix = :sidekiq_alive
|
26
31
|
@server = ENV['SIDEKIQ_ALIVE_SERVER'] || 'webrick'
|
32
|
+
@custom_liveness_probe = proc { true }
|
27
33
|
end
|
28
34
|
|
29
35
|
def registration_ttl
|
data/lib/sidekiq_alive/server.rb
CHANGED
@@ -1,21 +1,44 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'rack'
|
4
|
+
|
4
5
|
module SidekiqAlive
|
5
|
-
class Server
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
SidekiqAlive.
|
17
|
-
|
18
|
-
|
6
|
+
class Server
|
7
|
+
class << self
|
8
|
+
def run!
|
9
|
+
handler = Rack::Handler.get(server)
|
10
|
+
|
11
|
+
Signal.trap('TERM') { handler.shutdown }
|
12
|
+
|
13
|
+
handler.run(self, Port: port, Host: '0.0.0.0', AccessLog: [])
|
14
|
+
end
|
15
|
+
|
16
|
+
def host
|
17
|
+
SidekiqAlive.config.host
|
18
|
+
end
|
19
|
+
|
20
|
+
def port
|
21
|
+
SidekiqAlive.config.port
|
22
|
+
end
|
23
|
+
|
24
|
+
def path
|
25
|
+
SidekiqAlive.config.path
|
26
|
+
end
|
27
|
+
|
28
|
+
def server
|
29
|
+
SidekiqAlive.config.server
|
30
|
+
end
|
31
|
+
|
32
|
+
def call(env)
|
33
|
+
if Rack::Request.new(env).path != path
|
34
|
+
[404, {}, ['Not found']]
|
35
|
+
elsif SidekiqAlive.alive?
|
36
|
+
[200, {}, ['Alive!']]
|
37
|
+
else
|
38
|
+
response = "Can't find the alive key"
|
39
|
+
SidekiqAlive.logger.error(response)
|
40
|
+
[404, {}, [response]]
|
41
|
+
end
|
19
42
|
end
|
20
43
|
end
|
21
44
|
end
|
data/lib/sidekiq_alive/worker.rb
CHANGED
@@ -1,11 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SidekiqAlive
|
2
4
|
class Worker
|
3
5
|
include Sidekiq::Worker
|
4
6
|
sidekiq_options retry: false
|
5
7
|
|
6
8
|
def perform(_hostname = SidekiqAlive.hostname)
|
9
|
+
# Checks if custom liveness probe passes should fail or return false
|
10
|
+
return unless config.custom_liveness_probe.call
|
11
|
+
|
12
|
+
# Writes the liveness in Redis
|
7
13
|
write_living_probe
|
8
|
-
#
|
14
|
+
# schedules next living probe
|
9
15
|
self.class.perform_in(config.time_to_live / 2, current_hostname)
|
10
16
|
end
|
11
17
|
|
data/sidekiq_alive.gemspec
CHANGED
@@ -32,9 +32,8 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
33
33
|
spec.add_development_dependency 'mock_redis'
|
34
34
|
spec.add_development_dependency 'rack-test'
|
35
|
-
spec.add_development_dependency 'rake', '~>
|
35
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
36
36
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
37
37
|
spec.add_development_dependency 'rspec-sidekiq', '~> 3.0'
|
38
38
|
spec.add_dependency 'sidekiq'
|
39
|
-
spec.add_dependency 'sinatra'
|
40
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq_alive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artur Pañach
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '13.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '13.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,20 +108,6 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: sinatra
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
111
|
description: |-
|
126
112
|
SidekiqAlive offers a solution to add liveness probe of a Sidekiq instance.
|
127
113
|
|
@@ -141,6 +127,7 @@ extra_rdoc_files: []
|
|
141
127
|
files:
|
142
128
|
- ".gitignore"
|
143
129
|
- ".rspec"
|
130
|
+
- ".tool-versions"
|
144
131
|
- ".travis.yml"
|
145
132
|
- CODE_OF_CONDUCT.md
|
146
133
|
- Gemfile
|
@@ -150,6 +137,7 @@ files:
|
|
150
137
|
- Rakefile
|
151
138
|
- bin/console
|
152
139
|
- bin/setup
|
140
|
+
- docker-compose.yml
|
153
141
|
- lib/sidekiq_alive.rb
|
154
142
|
- lib/sidekiq_alive/config.rb
|
155
143
|
- lib/sidekiq_alive/server.rb
|
@@ -175,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
163
|
- !ruby/object:Gem::Version
|
176
164
|
version: '0'
|
177
165
|
requirements: []
|
178
|
-
rubygems_version: 3.
|
166
|
+
rubygems_version: 3.1.6
|
179
167
|
signing_key:
|
180
168
|
specification_version: 4
|
181
169
|
summary: Liveness probe for sidekiq on Kubernetes deployments.
|