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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88b19f6100070c1ec21dcb21c0ffeed162339684ca9151d5f1fc96bc0a08d4c7
4
- data.tar.gz: 368c75147329255b31de98b83a3ccfa635ff7bb51624777875fc2c00751b0102
3
+ metadata.gz: c6a2151aa5146a6a40096e4513702809296876a902a7def0d24d59bad6f110da
4
+ data.tar.gz: b99cd52eb4e5b694b6ca23d9b141d59b1ce362f914b74c63ea42b741dd4d7206
5
5
  SHA512:
6
- metadata.gz: b5aaf5daef764005e61d19b21e30ba9fb811b017ee767e9fb51e832b4186f3f107f6b7001907457bed6a2230f368f3b11b396ee95032d81e5a65b799627af404
7
- data.tar.gz: 9b3fd7ca0f1218f88f517f78d11221c7e92c71c6776a53a77aacb3567c9a63f343d4473d4a453a116271807e7d249ea99ee81f2763fc44ac792f59502eb36bd4
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.2)
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.0.6)
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 (10.5.0)
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 (~> 10.0)
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
- 1.17.3
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
- __How?__
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: ["bundle", "exec", "sidekiqctl", "quiet"]
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: ["kube/sidekiq_quiet"]
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 run Sinatra
237
- # default: webrick
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
- # config.server = 'puma'
240
-
260
+ # config.server = 'puma'
241
261
  end
242
262
  ```
243
263
 
@@ -0,0 +1,6 @@
1
+ version: '3.6'
2
+ services:
3
+ redis:
4
+ image: redis
5
+ ports:
6
+ - 6379:6379
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] << current_queue
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?
@@ -4,26 +4,32 @@ module SidekiqAlive
4
4
  class Config
5
5
  include Singleton
6
6
 
7
- attr_accessor :port,
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
@@ -1,21 +1,44 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'sinatra/base'
3
+ require 'rack'
4
+
4
5
  module SidekiqAlive
5
- class Server < Sinatra::Base
6
- set :bind, '0.0.0.0'
7
- set :port, -> { SidekiqAlive.config.port }
8
- set :server, -> { SidekiqAlive.config.server }
9
-
10
- get '/' do
11
- if SidekiqAlive.alive?
12
- status 200
13
- body 'Alive!'
14
- else
15
- response = "Can't find the alive key"
16
- SidekiqAlive.logger.error(response)
17
- status 404
18
- body response
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SidekiqAlive
4
- VERSION = '2.0.2'
4
+ VERSION = '2.1.0'
5
5
  end
@@ -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
- # schedule next living probe
14
+ # schedules next living probe
9
15
  self.class.perform_in(config.time_to_live / 2, current_hostname)
10
16
  end
11
17
 
@@ -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', '~> 10.0'
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.2
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: 2020-06-16 00:00:00.000000000 Z
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: '10.0'
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: '10.0'
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.0.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.