sidekiq_alive 2.0.0 → 2.0.5

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: 364bf320e50acf4acacc6b092ddc878e094762a048f03b8496b03dca50c79c67
4
- data.tar.gz: a19db126856fbb3629994f2d0aec3fd839462c204a62abe03e0833f140fb16f5
3
+ metadata.gz: e6d5a90f1ac023c49440e1e24d53e05bd3fe1f5362822e125a8989981e51846e
4
+ data.tar.gz: dd90cc1b6d7b1fc6273426e32f950d68a71eaa7d63b42b32d914450f35eec09a
5
5
  SHA512:
6
- metadata.gz: c23f150276af1a182dc6dd7eef752125f12c65de9479ca9877294e0344dd02c9b49cd4174ebbb593996ab8937d538ef5a9b446eed19d5667b6462335d97e5e3a
7
- data.tar.gz: 251ddc155702aa38adcd7368f5dd7e55c9fc40558a2e90fcd05d8641e78faa40337060deef492c23e602884250c6e66dfed1a77c46e058149658975e1e858543
6
+ metadata.gz: 533ef08f31e90ac4743577c561f3994c2b2e7eb9945cadcc4dc70dda3e2b339d8d8e6ab2d270b82a65dc884812b8d30ce1de49e50648af1a4136eafa77ee9dd3
7
+ data.tar.gz: 702c96b61ecaa7595b44ff9bd3dcfa29d58e99623a5fcd5534b94221dd92e96b06e0e81f217c826f7d8ee9e75bee55ef063d93ff855381efa5ead8af96a01cc4
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.5)
5
5
  sidekiq
6
- sinatra
7
6
 
8
7
  GEM
9
8
  remote: https://rubygems.org/
@@ -13,7 +12,6 @@ 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)
@@ -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
@@ -11,7 +11,7 @@ __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
 
14
- A Sidekiq worker is the responsable to storing this key. If Sidekiq stops processing workers
14
+ A Sidekiq worker is the responsible to storing this key. If Sidekiq stops processing workers
15
15
  this key gets expired by Redis an consequently the http server will return a 500 error.
16
16
 
17
17
  This worker is responsible to requeue itself for the next liveness probe.
@@ -65,7 +65,7 @@ bundle exec sidekiq
65
65
 
66
66
  ```
67
67
  curl localhost:7433
68
- #=> Alive!
68
+ #=> Alive!
69
69
  ```
70
70
 
71
71
 
@@ -83,6 +83,8 @@ Set `livenessProbe` in your Kubernetes deployment
83
83
 
84
84
  example with recommended setup:
85
85
 
86
+ #### Sidekiq < 6
87
+
86
88
  ```yaml
87
89
  spec:
88
90
  containers:
@@ -117,6 +119,63 @@ spec:
117
119
  terminationGracePeriodSeconds: 60 # put your longest Job time here plus security time.
118
120
  ```
119
121
 
122
+ #### Sidekiq >= 6
123
+
124
+ Create file:
125
+
126
+ _kube/sidekiq_quiet_
127
+
128
+ ```bash
129
+ #!/bin/bash
130
+
131
+ # Find Pid
132
+ SIDEKIQ_PID=$(ps aux | grep sidekiq | grep busy | awk '{ print $2 }')
133
+ # Send TSTP signal
134
+ kill -SIGTSTP $SIDEKIQ_PID
135
+ ```
136
+
137
+ Make it executable:
138
+
139
+ ```
140
+ $ chmod +x kube/sidekiq_quiet
141
+ ```
142
+
143
+ Execute it in your deployment preStop:
144
+
145
+ ```yaml
146
+ spec:
147
+ containers:
148
+ - name: my_app
149
+ image: my_app:latest
150
+ env:
151
+ - name: RAILS_ENV
152
+ value: production
153
+ command:
154
+ - bundle
155
+ - exec
156
+ - sidekiq
157
+ ports:
158
+ - containerPort: 7433
159
+ livenessProbe:
160
+ httpGet:
161
+ path: /
162
+ port: 7433
163
+ initialDelaySeconds: 80 # app specific. Time your sidekiq takes to start processing.
164
+ timeoutSeconds: 5 # can be much less
165
+ readinessProbe:
166
+ httpGet:
167
+ path: /
168
+ port: 7433
169
+ initialDelaySeconds: 80 # app specific
170
+ timeoutSeconds: 5 # can be much less
171
+ lifecycle:
172
+ preStop:
173
+ exec:
174
+ # SIGTERM triggers a quick exit; gracefully terminate instead
175
+ command: ["kube/sidekiq_quiet"]
176
+ terminationGracePeriodSeconds: 60 # put your longest Job time here plus security time.
177
+ ```
178
+
120
179
  ### Outside kubernetes
121
180
 
122
181
  It's just up to you how you want to use it.
@@ -137,12 +196,27 @@ curl localhost:7433
137
196
 
138
197
  ```ruby
139
198
  SidekiqAlive.setup do |config|
199
+ # ==> Server host
200
+ # Host to bind the server.
201
+ # Can also be set with the environment variable SIDEKIQ_ALIVE_HOST.
202
+ # default: 0.0.0.0
203
+ #
204
+ # config.host = 0.0.0.0
205
+
140
206
  # ==> Server port
141
- # Port to bind the server
207
+ # Port to bind the server.
208
+ # Can also be set with the environment variable SIDEKIQ_ALIVE_PORT.
142
209
  # default: 7433
143
210
  #
144
211
  # config.port = 7433
145
212
 
213
+ # ==> Server path
214
+ # HTTP path to respond to.
215
+ # Can also be set with the environment variable SIDEKIQ_ALIVE_PATH.
216
+ # default: '/'
217
+ #
218
+ # config.path = '/'
219
+
146
220
  # ==> Liveness key
147
221
  # Key to be stored in Redis as probe of liveness
148
222
  # default: "SIDEKIQ::LIVENESS_PROBE_TIMESTAMP"
@@ -168,11 +242,17 @@ SidekiqAlive.setup do |config|
168
242
  # ==> Queue Prefix
169
243
  # SidekiqAlive will run in a independent queue for each instance/replica
170
244
  # This queue name will be generated with: "#{queue_prefix}-#{hostname}.
171
- # You can customize the prefix here.
245
+ # You can customize the prefix here.
172
246
  # default: :sidekiq_alive
173
247
  #
174
248
  # config.queue_prefix = :other
175
249
 
250
+ # ==> Rack server
251
+ # Web server used to serve an HTTP response.
252
+ # Can also be set with the environment variable SIDEKIQ_ALIVE_SERVER.
253
+ # default: 'webrick'
254
+ #
255
+ # config.server = 'puma'
176
256
  end
177
257
  ```
178
258
 
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,37 @@
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
11
16
 
12
17
  def initialize
13
18
  set_defaults
14
19
  end
15
20
 
16
21
  def set_defaults
22
+ @host = ENV['SIDEKIQ_ALIVE_HOST'] || '0.0.0.0'
17
23
  @port = ENV['SIDEKIQ_ALIVE_PORT'] || 7433
24
+ @path = ENV['SIDEKIQ_ALIVE_PATH'] || '/'
18
25
  @liveness_key = 'SIDEKIQ::LIVENESS_PROBE_TIMESTAMP'
19
26
  @time_to_live = 10 * 60
20
27
  @callback = proc {}
21
28
  @registered_instance_key = 'SIDEKIQ_REGISTERED_INSTANCE'
22
29
  @queue_prefix = :sidekiq_alive
30
+ @server = ENV['SIDEKIQ_ALIVE_SERVER'] || 'webrick'
23
31
  end
24
32
 
25
33
  def registration_ttl
26
- @registration_ttl ? @registration_ttl : time_to_live + 60
34
+ @registration_ttl || time_to_live + 60
27
35
  end
28
36
  end
29
37
  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.0'.freeze
4
+ VERSION = '2.0.5'
3
5
  end
@@ -3,7 +3,7 @@ module SidekiqAlive
3
3
  include Sidekiq::Worker
4
4
  sidekiq_options retry: false
5
5
 
6
- def perform(hostname = SidekiqAlive.hostname)
6
+ def perform(_hostname = SidekiqAlive.hostname)
7
7
  write_living_probe
8
8
  # schedule next living probe
9
9
  self.class.perform_in(config.time_to_live / 2, current_hostname)
@@ -21,7 +21,11 @@ module SidekiqAlive
21
21
  # Increment ttl for current registered instance
22
22
  SidekiqAlive.register_current_instance
23
23
  # after callbacks
24
- config.callback.call() rescue nil
24
+ begin
25
+ config.callback.call
26
+ rescue StandardError
27
+ nil
28
+ end
25
29
  end
26
30
 
27
31
  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.0
4
+ version: 2.0.5
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: 2019-09-22 00:00:00.000000000 Z
11
+ date: 2021-03-29 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.