sidekiq_alive 2.0.0 → 2.0.5

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: 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.