sidekiq_alive 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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.