sidekiq_alive 0.1.0 → 0.1.1
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 +4 -4
- data/Gemfile.lock +15 -2
- data/README.md +2 -2
- data/lib/sidekiq_alive.rb +12 -38
- data/lib/sidekiq_alive/config.rb +14 -0
- data/lib/sidekiq_alive/server.rb +24 -37
- data/lib/sidekiq_alive/version.rb +1 -1
- data/lib/sidekiq_alive/worker.rb +6 -2
- data/sidekiq_alive.gemspec +3 -0
- metadata +46 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e7e972b09b3d5ee8de3fe0e32bd23adae47a46d
|
4
|
+
data.tar.gz: 3c7e7ebcfcba7f850e0563f2fc8d2651cf585321
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1470c68f1fecbafa1d5a6e0e53c0767b89c65cd3e8cfec47662df6ed738179f467c0e603efbf56b24a91c0a54764f9aafa775b955b08c51172e48d1affc1ba26
|
7
|
+
data.tar.gz: 4e67168aa2f3de897070748382482df8d1b69f11aa24d482affae8bdb3d02e0a06475f5102e8a683ed79e0b5ad8e6127daed7f0249c71f15edb2d855fd3fab42
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
sidekiq_alive (0.1.
|
4
|
+
sidekiq_alive (0.1.1)
|
5
5
|
sidekiq
|
6
|
+
sinatra
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
@@ -14,6 +15,8 @@ GEM
|
|
14
15
|
rack (1.6.8)
|
15
16
|
rack-protection (1.5.3)
|
16
17
|
rack
|
18
|
+
rack-test (1.0.0)
|
19
|
+
rack (>= 1.0, < 3)
|
17
20
|
rake (10.5.0)
|
18
21
|
redis (3.3.5)
|
19
22
|
rspec (3.7.0)
|
@@ -28,12 +31,20 @@ GEM
|
|
28
31
|
rspec-mocks (3.7.0)
|
29
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
30
33
|
rspec-support (~> 3.7.0)
|
34
|
+
rspec-sidekiq (3.0.3)
|
35
|
+
rspec-core (~> 3.0, >= 3.0.0)
|
36
|
+
sidekiq (>= 2.4.0)
|
31
37
|
rspec-support (3.7.1)
|
32
38
|
sidekiq (4.2.10)
|
33
39
|
concurrent-ruby (~> 1.0)
|
34
40
|
connection_pool (~> 2.2, >= 2.2.0)
|
35
41
|
rack-protection (>= 1.5.0)
|
36
42
|
redis (~> 3.2, >= 3.2.1)
|
43
|
+
sinatra (1.4.8)
|
44
|
+
rack (~> 1.5)
|
45
|
+
rack-protection (~> 1.4)
|
46
|
+
tilt (>= 1.3, < 3)
|
47
|
+
tilt (2.0.8)
|
37
48
|
|
38
49
|
PLATFORMS
|
39
50
|
ruby
|
@@ -41,9 +52,11 @@ PLATFORMS
|
|
41
52
|
DEPENDENCIES
|
42
53
|
bundler (~> 1.16)
|
43
54
|
mock_redis
|
55
|
+
rack-test
|
44
56
|
rake (~> 10.0)
|
45
57
|
rspec (~> 3.0)
|
58
|
+
rspec-sidekiq (~> 3.0)
|
46
59
|
sidekiq_alive!
|
47
60
|
|
48
61
|
BUNDLED WITH
|
49
|
-
1.16.
|
62
|
+
1.16.2
|
data/README.md
CHANGED
@@ -37,7 +37,7 @@ rails example:
|
|
37
37
|
`config/initializers/sidekiq.rb`
|
38
38
|
|
39
39
|
```ruby
|
40
|
-
SidekiqAlive
|
40
|
+
SidekiqAlive.start
|
41
41
|
```
|
42
42
|
|
43
43
|
### Run the job for first time
|
@@ -49,7 +49,7 @@ rails example:
|
|
49
49
|
```
|
50
50
|
$ bundle exec rails console
|
51
51
|
|
52
|
-
#=> SidekiqAlive.
|
52
|
+
#=> SidekiqAlive::Worker.perform_async
|
53
53
|
```
|
54
54
|
|
55
55
|
### Kubernetes setup
|
data/lib/sidekiq_alive.rb
CHANGED
@@ -1,19 +1,22 @@
|
|
1
|
+
require "sidekiq"
|
2
|
+
require "singleton"
|
1
3
|
require "sidekiq_alive/version"
|
2
|
-
require
|
4
|
+
require "sidekiq_alive/config"
|
3
5
|
|
4
6
|
module SidekiqAlive
|
5
7
|
def self.start
|
6
8
|
Sidekiq.configure_server do |config|
|
7
9
|
config.on(:startup) do
|
10
|
+
SidekiqAlive::Worker.perform_async
|
8
11
|
SidekiqAlive::Server.start
|
9
12
|
end
|
10
13
|
end
|
11
14
|
end
|
12
15
|
|
13
16
|
def self.store_alive_key
|
14
|
-
redis.set(liveness_key,
|
17
|
+
redis.set(config.liveness_key,
|
15
18
|
Time.now.to_i,
|
16
|
-
{ ex: time_to_live.to_i })
|
19
|
+
{ ex: config.time_to_live.to_i })
|
17
20
|
end
|
18
21
|
|
19
22
|
def self.redis
|
@@ -21,48 +24,19 @@ module SidekiqAlive
|
|
21
24
|
end
|
22
25
|
|
23
26
|
def self.alive?
|
24
|
-
redis.ttl(liveness_key) == -2 ? false : true
|
27
|
+
redis.ttl(config.liveness_key) == -2 ? false : true
|
25
28
|
end
|
26
29
|
|
27
30
|
# CONFIG ---------------------------------------
|
28
31
|
|
29
32
|
def self.setup
|
30
|
-
yield(
|
33
|
+
yield(config)
|
31
34
|
end
|
32
35
|
|
33
|
-
def self.
|
34
|
-
@
|
36
|
+
def self.config
|
37
|
+
@config ||= SidekiqAlive::Config.instance
|
35
38
|
end
|
36
|
-
|
37
|
-
def self.port
|
38
|
-
@port || 7433
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.liveness_key=(key)
|
42
|
-
@liveness_key = key
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.liveness_key
|
46
|
-
@liveness_key || "SIDEKIQ::LIVENESS_PROBE_TIMESTAMP"
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.time_to_live=(time)
|
50
|
-
@time_to_live = time
|
51
|
-
end
|
52
|
-
|
53
|
-
def self.time_to_live
|
54
|
-
@time_to_live || 10 * 60
|
55
|
-
end
|
56
|
-
|
57
|
-
def self.callback=(block)
|
58
|
-
@after_storing_key = block
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.callback
|
62
|
-
@after_storing_key || proc {} # do nothing
|
63
|
-
end
|
64
|
-
|
65
39
|
end
|
66
40
|
|
67
|
-
require
|
68
|
-
require
|
41
|
+
require "sidekiq_alive/worker"
|
42
|
+
require "sidekiq_alive/server"
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module SidekiqAlive
|
2
|
+
class Config
|
3
|
+
include Singleton
|
4
|
+
|
5
|
+
attr_accessor :port, :liveness_key, :time_to_live, :callback
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@port = 7433
|
9
|
+
@liveness_key = 'SIDEKIQ::LIVENESS_PROBE_TIMESTAMP'
|
10
|
+
@time_to_live = 10 * 60
|
11
|
+
@callback = proc {}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/sidekiq_alive/server.rb
CHANGED
@@ -1,46 +1,33 @@
|
|
1
|
+
require "sinatra/base"
|
2
|
+
require_relative "./config"
|
1
3
|
module SidekiqAlive
|
2
|
-
|
3
|
-
|
4
|
-
require 'socket'
|
5
|
-
Sidekiq::Logging.logger.info "Starting liveness server on #{config.port}"
|
6
|
-
store_alive_key # initial livenessProbe to avoid to kill the instance before it triggers the first liveness
|
4
|
+
class Server < Sinatra::Base
|
5
|
+
set :bind, '0.0.0.0'
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
if config.alive?
|
15
|
-
status = "200 OK"
|
16
|
-
response = "Alive!\n"
|
17
|
-
else
|
18
|
-
status = "500 ERROR"
|
19
|
-
response = "Looks like sidekiq is not working\n"
|
20
|
-
Sidekiq::Logging.logger.error response
|
21
|
-
end
|
22
|
-
socket.print "HTTP/1.1 #{status}\r\n" +
|
23
|
-
"Content-Type: text/plain\r\n" +
|
24
|
-
"Content-Length: #{response.bytesize}\r\n" +
|
25
|
-
"Connection: close\r\n"
|
26
|
-
socket.print "\r\n" # blank line separates the header from the body, as required by the protocol
|
27
|
-
socket.print response
|
28
|
-
socket.close
|
29
|
-
end
|
30
|
-
end
|
7
|
+
class << self
|
8
|
+
def start
|
9
|
+
Sidekiq::Logging.logger.info "Writing SidekiqAlive alive key in redis: #{SidekiqAlive.config.liveness_key}"
|
10
|
+
SidekiqAlive.store_alive_key
|
11
|
+
set :port, SidekiqAlive.config.port
|
12
|
+
Thread.start { run! }
|
31
13
|
end
|
32
|
-
end
|
33
14
|
|
34
|
-
|
35
|
-
|
15
|
+
def quit!
|
16
|
+
super
|
17
|
+
exit
|
18
|
+
end
|
36
19
|
end
|
37
20
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
21
|
+
get '/' do
|
22
|
+
if SidekiqAlive.alive?
|
23
|
+
status 200
|
24
|
+
body "Alive!"
|
25
|
+
else
|
26
|
+
response = "Can't find the alive key"
|
27
|
+
Sidekiq::Logging.logger.error(response)
|
28
|
+
status 404
|
29
|
+
body response
|
30
|
+
end
|
42
31
|
end
|
43
|
-
|
44
|
-
|
45
32
|
end
|
46
33
|
end
|
data/lib/sidekiq_alive/worker.rb
CHANGED
@@ -5,14 +5,18 @@ module SidekiqAlive
|
|
5
5
|
|
6
6
|
def perform
|
7
7
|
write_living_probe
|
8
|
-
self.class.perform_in(
|
8
|
+
self.class.perform_in(config.time_to_live / 2)
|
9
9
|
end
|
10
10
|
|
11
11
|
def write_living_probe
|
12
12
|
# Write liveness probe
|
13
13
|
SidekiqAlive.store_alive_key
|
14
14
|
# after callbacks
|
15
|
-
|
15
|
+
config.callback.call()
|
16
|
+
end
|
17
|
+
|
18
|
+
def config
|
19
|
+
SidekiqAlive.config
|
16
20
|
end
|
17
21
|
end
|
18
22
|
end
|
data/sidekiq_alive.gemspec
CHANGED
@@ -33,6 +33,9 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.add_development_dependency "bundler", "~> 1.16"
|
34
34
|
spec.add_development_dependency "rake", "~> 10.0"
|
35
35
|
spec.add_development_dependency "rspec", "~> 3.0"
|
36
|
+
spec.add_development_dependency "rack-test"
|
37
|
+
spec.add_development_dependency "rspec-sidekiq", "~> 3.0"
|
36
38
|
spec.add_development_dependency "mock_redis"
|
37
39
|
spec.add_dependency "sidekiq"
|
40
|
+
spec.add_dependency "sinatra"
|
38
41
|
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: 0.1.
|
4
|
+
version: 0.1.1
|
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: 2018-
|
11
|
+
date: 2018-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rack-test
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec-sidekiq
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.0'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: mock_redis
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +108,20 @@ dependencies:
|
|
80
108
|
- - ">="
|
81
109
|
- !ruby/object:Gem::Version
|
82
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'
|
83
125
|
description: |-
|
84
126
|
SidekiqAlive offers a solution to add liveness probe of a Sidekiq instance.
|
85
127
|
|
@@ -109,6 +151,7 @@ files:
|
|
109
151
|
- bin/console
|
110
152
|
- bin/setup
|
111
153
|
- lib/sidekiq_alive.rb
|
154
|
+
- lib/sidekiq_alive/config.rb
|
112
155
|
- lib/sidekiq_alive/server.rb
|
113
156
|
- lib/sidekiq_alive/version.rb
|
114
157
|
- lib/sidekiq_alive/worker.rb
|
@@ -133,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
176
|
version: '0'
|
134
177
|
requirements: []
|
135
178
|
rubyforge_project:
|
136
|
-
rubygems_version: 2.5.2
|
179
|
+
rubygems_version: 2.5.2.3
|
137
180
|
signing_key:
|
138
181
|
specification_version: 4
|
139
182
|
summary: Liveness probe for sidekiq on Kubernetes deployments.
|