sidekiq_alive 2.0.1 → 2.0.6

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: 42f950238fc2224907b8c32fe4219f1ad5d3f3a083e68e0230ce98ede04753a9
4
- data.tar.gz: e8d383349ac91b93c86a0f459d59fe963b9e318157c2fe3c7648f5e88cc1c394
3
+ metadata.gz: cf72b576226b373f7e661aae05d54ec27fcb3e5f612036ab86bd89a18d23b289
4
+ data.tar.gz: f3148f40e24f04bf743b3f097a12045554109a2a8af965e7d84ef9344f7b4c23
5
5
  SHA512:
6
- metadata.gz: 71ce02b4cbdc408a6ab9db14200d78bf2750f130a2d5c1bf877c80854f4b03cfd87e7eda9c3874f6f1ae13950f2d7df61c49a587f7a20c6ca8f1e28bd581ac30
7
- data.tar.gz: 981d3bccb5c3fc813614c85b4656708af80c7bb392b7454379d740444a2cb8c0ac0c00bf2d5d2e12a8bd67e68d19236d2eaa39970b79719598f32b79d01ffc76
6
+ metadata.gz: 56b9231da7d95a74a0a0067ca06a91b921502af01b0da62975dfd4b89dcbc2a9694ce3bf6925dac2cc3f9ba1c5453e1627c4a44432a65f5b2fb17a66ee5ef8af
7
+ data.tar.gz: 9c116fef8bfbfe1db518408b38b2abc3701faf39e21273073e9ca86d295e0c827fa843153fd8e6d9be6d52740203261351292e6f19e3cb6da25b0f639c379d26
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in sidekiq_alive.gemspec
6
6
  gemspec
data/Gemfile.lock CHANGED
@@ -1,9 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sidekiq_alive (2.0.0)
4
+ sidekiq_alive (2.0.6)
5
5
  sidekiq
6
- sinatra
7
6
 
8
7
  GEM
9
8
  remote: https://rubygems.org/
@@ -13,11 +12,10 @@ GEM
13
12
  diff-lcs (1.3)
14
13
  method_source (0.9.2)
15
14
  mock_redis (0.19.0)
16
- mustermann (1.0.3)
17
15
  pry (0.12.2)
18
16
  coderay (~> 1.1.0)
19
17
  method_source (~> 0.9.0)
20
- rack (2.0.6)
18
+ rack (2.2.3)
21
19
  rack-protection (2.0.5)
22
20
  rack
23
21
  rack-test (1.1.0)
@@ -45,12 +43,6 @@ GEM
45
43
  rack (>= 1.5.0)
46
44
  rack-protection (>= 1.5.0)
47
45
  redis (>= 3.3.5, < 5)
48
- sinatra (2.0.5)
49
- mustermann (~> 1.0)
50
- rack (~> 2.0)
51
- rack-protection (= 2.0.5)
52
- tilt (~> 2.0)
53
- tilt (2.0.9)
54
46
 
55
47
  PLATFORMS
56
48
  ruby
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
 
@@ -123,7 +121,7 @@ spec:
123
121
 
124
122
  Create file:
125
123
 
126
- __kube/sidekiq_quiet__
124
+ _kube/sidekiq_quiet_
127
125
 
128
126
  ```bash
129
127
  #!/bin/bash
@@ -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"
@@ -227,11 +247,17 @@ SidekiqAlive.setup do |config|
227
247
  # ==> Queue Prefix
228
248
  # SidekiqAlive will run in a independent queue for each instance/replica
229
249
  # This queue name will be generated with: "#{queue_prefix}-#{hostname}.
230
- # You can customize the prefix here.
250
+ # You can customize the prefix here.
231
251
  # default: :sidekiq_alive
232
252
  #
233
253
  # config.queue_prefix = :other
234
254
 
255
+ # ==> Rack server
256
+ # Web server used to serve an HTTP response.
257
+ # Can also be set with the environment variable SIDEKIQ_ALIVE_SERVER.
258
+ # default: 'webrick'
259
+ #
260
+ # config.server = 'puma'
235
261
  end
236
262
  ```
237
263
 
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "sidekiq_alive"
3
+ require 'bundler/setup'
4
+ require 'sidekiq_alive'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "sidekiq_alive"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start(__FILE__)
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?
@@ -1,29 +1,39 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SidekiqAlive
2
4
  class Config
3
5
  include Singleton
4
6
 
5
- attr_accessor :port,
7
+ attr_accessor :host,
8
+ :port,
9
+ :path,
6
10
  :liveness_key,
7
11
  :time_to_live,
8
12
  :callback,
9
13
  :registered_instance_key,
10
- :queue_prefix
14
+ :queue_prefix,
15
+ :server,
16
+ :custom_liveness_probe
11
17
 
12
18
  def initialize
13
19
  set_defaults
14
20
  end
15
21
 
16
22
  def set_defaults
23
+ @host = ENV['SIDEKIQ_ALIVE_HOST'] || '0.0.0.0'
17
24
  @port = ENV['SIDEKIQ_ALIVE_PORT'] || 7433
25
+ @path = ENV['SIDEKIQ_ALIVE_PATH'] || '/'
18
26
  @liveness_key = 'SIDEKIQ::LIVENESS_PROBE_TIMESTAMP'
19
27
  @time_to_live = 10 * 60
20
28
  @callback = proc {}
21
29
  @registered_instance_key = 'SIDEKIQ_REGISTERED_INSTANCE'
22
30
  @queue_prefix = :sidekiq_alive
31
+ @server = ENV['SIDEKIQ_ALIVE_SERVER'] || 'webrick'
32
+ @custom_liveness_probe = proc { true }
23
33
  end
24
34
 
25
35
  def registration_ttl
26
- @registration_ttl ? @registration_ttl : time_to_live + 60
36
+ @registration_ttl || time_to_live + 60
27
37
  end
28
38
  end
29
39
  end
@@ -1,18 +1,44 @@
1
- require 'sinatra/base'
1
+ # frozen_string_literal: true
2
+
3
+ require 'rack'
4
+
2
5
  module SidekiqAlive
3
- class Server < Sinatra::Base
4
- set :bind, '0.0.0.0'
5
- set :port, -> { SidekiqAlive.config.port }
6
-
7
- get '/' do
8
- if SidekiqAlive.alive?
9
- status 200
10
- body 'Alive!'
11
- else
12
- response = "Can't find the alive key"
13
- SidekiqAlive.logger.error(response)
14
- status 404
15
- 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: host)
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
16
42
  end
17
43
  end
18
44
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SidekiqAlive
2
- VERSION = '2.0.1'.freeze
4
+ VERSION = '2.0.6'
3
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
- def perform(hostname = SidekiqAlive.hostname)
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
 
@@ -21,7 +27,11 @@ module SidekiqAlive
21
27
  # Increment ttl for current registered instance
22
28
  SidekiqAlive.register_current_instance
23
29
  # after callbacks
24
- config.callback.call() rescue nil
30
+ begin
31
+ config.callback.call
32
+ rescue StandardError
33
+ nil
34
+ end
25
35
  end
26
36
 
27
37
  def current_hostname
@@ -1,16 +1,15 @@
1
-
2
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "sidekiq_alive/version"
3
+ require 'sidekiq_alive/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "sidekiq_alive"
6
+ spec.name = 'sidekiq_alive'
8
7
  spec.version = SidekiqAlive::VERSION
9
- spec.authors = ["Artur Pañach"]
10
- spec.email = ["arturictus@gmail.com"]
8
+ spec.authors = ['Artur Pañach']
9
+ spec.email = ['arturictus@gmail.com']
11
10
 
12
- spec.summary = %q{Liveness probe for sidekiq on Kubernetes deployments.}
13
- spec.description = %q{SidekiqAlive offers a solution to add liveness probe of a Sidekiq instance.
11
+ spec.summary = 'Liveness probe for sidekiq on Kubernetes deployments.'
12
+ spec.description = 'SidekiqAlive offers a solution to add liveness probe of a Sidekiq instance.
14
13
 
15
14
  How?
16
15
 
@@ -19,23 +18,22 @@ Gem::Specification.new do |spec|
19
18
  A Sidekiq job is the responsable to storing this key. If Sidekiq stops processing jobs
20
19
  this key gets expired by Redis an consequently the http server will return a 500 error.
21
20
 
22
- This Job is responsible to requeue itself for the next liveness probe.}
23
- spec.homepage = "https://github.com/arturictus/sidekiq_alive"
24
- spec.license = "MIT"
21
+ This Job is responsible to requeue itself for the next liveness probe.'
22
+ spec.homepage = 'https://github.com/arturictus/sidekiq_alive'
23
+ spec.license = 'MIT'
25
24
 
26
25
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
26
  f.match(%r{^(test|spec|features)/})
28
27
  end
29
- spec.bindir = "exe"
28
+ spec.bindir = 'exe'
30
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
- spec.require_paths = ["lib"]
32
-
33
- spec.add_development_dependency "bundler", "~> 1.16"
34
- spec.add_development_dependency "rake", "~> 10.0"
35
- spec.add_development_dependency "rspec", "~> 3.0"
36
- spec.add_development_dependency "rack-test"
37
- spec.add_development_dependency "rspec-sidekiq", "~> 3.0"
38
- spec.add_development_dependency "mock_redis"
39
- spec.add_dependency "sidekiq"
40
- spec.add_dependency "sinatra"
30
+ spec.require_paths = ['lib']
31
+
32
+ spec.add_development_dependency 'bundler', '~> 1.16'
33
+ spec.add_development_dependency 'mock_redis'
34
+ spec.add_development_dependency 'rack-test'
35
+ spec.add_development_dependency 'rake', '~> 10.0'
36
+ spec.add_development_dependency 'rspec', '~> 3.0'
37
+ spec.add_development_dependency 'rspec-sidekiq', '~> 3.0'
38
+ spec.add_dependency 'sidekiq'
41
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.1
4
+ version: 2.0.6
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-01-03 00:00:00.000000000 Z
11
+ date: 2021-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -25,33 +25,19 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.16'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '10.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '10.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
28
+ name: mock_redis
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - "~>"
31
+ - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: '3.0'
33
+ version: '0'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - "~>"
38
+ - - ">="
53
39
  - !ruby/object:Gem::Version
54
- version: '3.0'
40
+ version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rack-test
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,49 +53,49 @@ dependencies:
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: rspec-sidekiq
56
+ name: rake
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '3.0'
61
+ version: '10.0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '3.0'
68
+ version: '10.0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: mock_redis
70
+ name: rspec
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - ">="
73
+ - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '0'
75
+ version: '3.0'
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - ">="
80
+ - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '0'
82
+ version: '3.0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: sidekiq
84
+ name: rspec-sidekiq
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - ">="
87
+ - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :runtime
89
+ version: '3.0'
90
+ type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - ">="
94
+ - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '0'
96
+ version: '3.0'
111
97
  - !ruby/object:Gem::Dependency
112
- name: sinatra
98
+ name: sidekiq
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - ">="
@@ -175,8 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
161
  - !ruby/object:Gem::Version
176
162
  version: '0'
177
163
  requirements: []
178
- rubyforge_project:
179
- rubygems_version: 2.7.6
164
+ rubygems_version: 3.0.3
180
165
  signing_key:
181
166
  specification_version: 4
182
167
  summary: Liveness probe for sidekiq on Kubernetes deployments.