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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a44c1e18d7a26b469ed2eb4a99d6c5d9feeca58
4
- data.tar.gz: 870314a23499da71ff34ad9a5c5fa3124dc16b93
3
+ metadata.gz: 0e7e972b09b3d5ee8de3fe0e32bd23adae47a46d
4
+ data.tar.gz: 3c7e7ebcfcba7f850e0563f2fc8d2651cf585321
5
5
  SHA512:
6
- metadata.gz: a434f4c9fbcb140ca1d070ac7b83aae54531c955b0ce4bfb673f705a4988adb91177bc5a6beb491be0985fcbce88024125869d230f7428727f954ec796b1d915
7
- data.tar.gz: b35a6b390fc8d615d1f6bcd4ef97b07d8bac87968872358a451a806e26dd32dc5df53d3f2afc7308947a29dfd5478a6da4f60440a98e1974a35c8621297e37ad
6
+ metadata.gz: 1470c68f1fecbafa1d5a6e0e53c0767b89c65cd3e8cfec47662df6ed738179f467c0e603efbf56b24a91c0a54764f9aafa775b955b08c51172e48d1affc1ba26
7
+ data.tar.gz: 4e67168aa2f3de897070748382482df8d1b69f11aa24d482affae8bdb3d02e0a06475f5102e8a683ed79e0b5ad8e6127daed7f0249c71f15edb2d855fd3fab42
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sidekiq_alive (0.1.0)
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.1
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..start
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.perform_now
52
+ #=> SidekiqAlive::Worker.perform_async
53
53
  ```
54
54
 
55
55
  ### Kubernetes setup
@@ -1,19 +1,22 @@
1
+ require "sidekiq"
2
+ require "singleton"
1
3
  require "sidekiq_alive/version"
2
- require 'sidekiq'
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(self)
33
+ yield(config)
31
34
  end
32
35
 
33
- def self.port=(port)
34
- @port = port
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 'sidekiq_alive/server'
68
- require 'sidekiq_alive/worker'
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
@@ -1,46 +1,33 @@
1
+ require "sinatra/base"
2
+ require_relative "./config"
1
3
  module SidekiqAlive
2
- module Server
3
- def self.start
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
- # Start Server
9
- Thread.start do
10
- server = TCPServer.new('0.0.0.0', config.port)
11
- loop do
12
- Thread.start(server.accept) do |socket|
13
- request = socket.gets # Read the first line of the request (the Request-Line)
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
- def self.config
35
- SidekiqAlive
15
+ def quit!
16
+ super
17
+ exit
18
+ end
36
19
  end
37
20
 
38
- def self.store_alive_key
39
- Sidekiq::Logging.logger.info "Writing Startup alive key in redis: #{config.liveness_key}"
40
- # TODO run worker unless one already enqueued
41
- config.store_alive_key
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
@@ -1,3 +1,3 @@
1
1
  module SidekiqAlive
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -5,14 +5,18 @@ module SidekiqAlive
5
5
 
6
6
  def perform
7
7
  write_living_probe
8
- self.class.perform_in(SidekiqAlive.time_to_live / 2)
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
- SidekiqAlive.callback.call()
15
+ config.callback.call()
16
+ end
17
+
18
+ def config
19
+ SidekiqAlive.config
16
20
  end
17
21
  end
18
22
  end
@@ -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.0
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-05-08 00:00:00.000000000 Z
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.