sidekiq_alive 0.1.0 → 0.1.1

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