sidekiq_alive 2.3.0 → 2.4.0

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: 562294aa960a1c1cd11b0a020b0f7cce26f09ee4c2faeb7044e21fd9bf3be8c5
4
- data.tar.gz: c31918f4c756cc551a3dcab2ea0d2c781c394e23e463c0a2c72ae68bfb52cd16
3
+ metadata.gz: 203a0459203c7e31aa2a223c7a6a2eea009f109697843b83eacd73577606487b
4
+ data.tar.gz: b85f281d7fc890744c303a51c46bdd846c3101e0acd44f3557a3549a00f25807
5
5
  SHA512:
6
- metadata.gz: 595baafc8b0499bb8f900cdaf3eac250d623ba3b51d65b4510d311b2913b1e0560fc967c63dbeaf9145cab43527a5d133b7af6127492103e0caf8538b61ed55e
7
- data.tar.gz: 05deade6b05eb839fb0c6d1c0d08768b2141cc24c61cdd2edc1aa453338b12bc7b5bce3a8d19692968a7f85939541519fb6c70eb759273c1b2fe5afffce8b413
6
+ metadata.gz: e2ab4467ab2b6041c4858fd96b91e5172751b4f86af6d6f4846d8e1f86f158a0a3279153e5972e24636d46983f5811191ea83ed4993e18886fda99ff206bec26
7
+ data.tar.gz: 2fe20f2e4895506137ba6e4ec6afe3c544eab32eef4a9a31690db808f459e452012ed3646d69c24dec869a2519facc6d9909326af915fe723126b8e212960f5a
data/README.md CHANGED
@@ -247,12 +247,10 @@ SidekiqAlive.setup do |config|
247
247
  # config.callback = proc { Net::HTTP.get("https://status.com/ping") }
248
248
 
249
249
  # ==> Shutdown callback
250
- # When sidekiq process is shutting down, you can perform some action, like cleaning up created queue
250
+ # When sidekiq process is shutting down, you can perform some arbitrary action.
251
251
  # default: proc {}
252
252
  #
253
- # config.shutdown_callback = proc do
254
- # Sidekiq::Queue.all.find { |q| q.name == "#{config.queue_prefix}-#{SidekiqAlive.hostname}" }&.clear
255
- # end
253
+ # config.shutdown_callback = proc { puts "Sidekiq is shutting down" }
256
254
 
257
255
  # ==> Queue Prefix
258
256
  # SidekiqAlive will run in a independent queue for each instance/replica
@@ -262,12 +260,32 @@ SidekiqAlive.setup do |config|
262
260
  #
263
261
  # config.queue_prefix = :other
264
262
 
263
+ # ==> Concurrency
264
+ # The maximum number of Redis connections requested for the SidekiqAlive pool.
265
+ # Can also be set with the environment variable SIDEKIQ_ALIVE_CONCURRENCY.
266
+ # NOTE: only effects Sidekiq 7 or greater.
267
+ # default: 2
268
+ #
269
+ # config.concurrency = 3
270
+
265
271
  # ==> Rack server
266
- # Web server used to serve an HTTP response.
272
+ # Web server used to serve an HTTP response. By default simple GServer based http server is used.
273
+ # To use specific server, rack gem version > 2 is required. For rack version >= 3, rackup gem is required.
267
274
  # Can also be set with the environment variable SIDEKIQ_ALIVE_SERVER.
268
- # default: 'webrick'
275
+ # default: nil
269
276
  #
270
277
  # config.server = 'puma'
278
+
279
+ # ==> Quiet mode timeout in seconds
280
+ # When sidekiq is shutting down, the Sidekiq process stops pulling jobs from the queue. This includes alive key update job. In case of
281
+ # long running jobs, alive key can expire before the job is finished. To avoid this, web server is set in to quiet mode
282
+ # and is returning 200 OK for healthcheck requests. To avoid infinite quiet mode in case sidekiq process is stuck in shutdown,
283
+ # timeout can be set. After timeout is reached, web server resumes normal operations and will return unhealthy status in case
284
+ # alive key is expired or purged from redis.
285
+ # default: 180
286
+ #
287
+ # config.quiet_timeout = 300
288
+
271
289
  end
272
290
  ```
273
291
 
@@ -12,10 +12,12 @@ module SidekiqAlive
12
12
  :callback,
13
13
  :registered_instance_key,
14
14
  :queue_prefix,
15
- :server,
16
15
  :custom_liveness_probe,
17
16
  :logger,
18
- :shutdown_callback
17
+ :shutdown_callback,
18
+ :concurrency,
19
+ :server,
20
+ :quiet_timeout
19
21
 
20
22
  def initialize
21
23
  set_defaults
@@ -30,9 +32,11 @@ module SidekiqAlive
30
32
  @callback = proc {}
31
33
  @registered_instance_key = "SIDEKIQ_REGISTERED_INSTANCE"
32
34
  @queue_prefix = :"sidekiq-alive"
33
- @server = ENV.fetch("SIDEKIQ_ALIVE_SERVER", "webrick")
34
35
  @custom_liveness_probe = proc { true }
35
36
  @shutdown_callback = proc {}
37
+ @concurrency = Integer(ENV.fetch("SIDEKIQ_ALIVE_CONCURRENCY", 2), exception: false) || 2
38
+ @server = ENV.fetch("SIDEKIQ_ALIVE_SERVER", nil)
39
+ @quiet_timeout = Integer(ENV.fetch("SIDEKIQ_ALIVE_QUIET_TIMEOUT", 180), exception: false) || 180
36
40
  end
37
41
 
38
42
  def registration_ttl
@@ -17,11 +17,37 @@ module SidekiqAlive
17
17
  current_sidekiq_version < Gem::Version.new("6")
18
18
  end
19
19
 
20
+ def use_rack?
21
+ return @use_rack if defined?(@use_rack)
22
+
23
+ require "rack"
24
+ @use_rack = current_rack_version < Gem::Version.new("3")
25
+ rescue LoadError
26
+ # currently this won't happen because rack is a dependency of sidekiq
27
+ @use_rack = false
28
+ end
29
+
30
+ def use_rackup?
31
+ return @use_rackup if defined?(@use_rackup)
32
+
33
+ require "rackup"
34
+ @use_rackup = current_rack_version >= Gem::Version.new("3")
35
+ rescue LoadError
36
+ if current_rack_version >= Gem::Version.new("3")
37
+ SidekiqAlive.logger.warn("rackup gem required with rack >= 3, defaulting to default server")
38
+ end
39
+ @use_rackup = false
40
+ end
41
+
20
42
  private
21
43
 
22
44
  def current_sidekiq_version
23
45
  Gem.loaded_specs["sidekiq"].version
24
46
  end
47
+
48
+ def current_rack_version
49
+ Gem.loaded_specs["rack"].version
50
+ end
25
51
  end
26
52
  end
27
53
  end
@@ -7,10 +7,10 @@ module SidekiqAlive
7
7
  # Wrapper for `redis-client` gem used by `sidekiq` > 7
8
8
  # https://github.com/redis-rb/redis-client
9
9
  class RedisClientGem < Base
10
- def initialize
11
- super
10
+ def initialize(capsule = nil)
11
+ super()
12
12
 
13
- @capsule = Sidekiq.default_configuration.capsules[CAPSULE_NAME]
13
+ @capsule = Sidekiq.default_configuration.capsules[capsule || CAPSULE_NAME]
14
14
  end
15
15
 
16
16
  def set(key, time:, ex:)
@@ -3,8 +3,8 @@
3
3
  module SidekiqAlive
4
4
  module Redis
5
5
  class << self
6
- def adapter
7
- Helpers.sidekiq_7 ? Redis::RedisClientGem.new : Redis::RedisGem.new
6
+ def adapter(capsule = nil)
7
+ Helpers.sidekiq_7 ? Redis::RedisClientGem.new(capsule) : Redis::RedisGem.new
8
8
  end
9
9
  end
10
10
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SidekiqAlive
4
+ module Server
5
+ module Base
6
+ SHUTDOWN_SIGNAL = "TERM"
7
+ QUIET_SIGNAL = "USR1"
8
+
9
+ # set web server to quiet mode
10
+ def quiet!
11
+ logger.info("[SidekiqAlive] Setting web server to quiet mode")
12
+ Process.kill(QUIET_SIGNAL, @server_pid) unless @server_pid.nil?
13
+ end
14
+
15
+ private
16
+
17
+ def configure_shutdown
18
+ Kernel.at_exit do
19
+ next if @server_pid.nil?
20
+
21
+ logger.info("Shutting down SidekiqAlive web server")
22
+ Process.kill(SHUTDOWN_SIGNAL, @server_pid)
23
+ Process.wait(@server_pid)
24
+ end
25
+ end
26
+
27
+ def configure_shutdown_signal(&block)
28
+ Signal.trap(SHUTDOWN_SIGNAL, &block)
29
+ end
30
+
31
+ def configure_quiet_signal(&block)
32
+ Signal.trap(QUIET_SIGNAL, &block)
33
+ end
34
+
35
+ def host
36
+ SidekiqAlive.config.host
37
+ end
38
+
39
+ def port
40
+ SidekiqAlive.config.port.to_i
41
+ end
42
+
43
+ def path
44
+ SidekiqAlive.config.path
45
+ end
46
+
47
+ def logger
48
+ SidekiqAlive.logger
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "http_server"
4
+ require_relative "base"
5
+
6
+ module SidekiqAlive
7
+ module Server
8
+ class Default < HttpServer
9
+ extend Base
10
+
11
+ class << self
12
+ def run!
13
+ logger.info("[SidekiqAlive] Starting default healthcheck server on #{host}:#{port}")
14
+ @server_pid = ::Process.fork do
15
+ @server = new(port, host, path)
16
+ # stop is wrapped in a thread because gserver calls synchrnonize which raises an error when in trap context
17
+ configure_shutdown_signal { Thread.new { @server.stop } }
18
+ configure_quiet_signal { @server.quiet! }
19
+
20
+ @server.start
21
+ @server.join
22
+ end
23
+ configure_shutdown
24
+ logger.info("[SidekiqAlive] Web server started in subprocess with pid #{@server_pid}")
25
+
26
+ self
27
+ end
28
+ end
29
+
30
+ def initialize(port, host, path, logger = SidekiqAlive.logger)
31
+ super(self, port, host, logger)
32
+
33
+ @path = path
34
+ end
35
+
36
+ def request_handler(req, res)
37
+ if req.path != path
38
+ res.status = 404
39
+ res.body = "Not found"
40
+ return logger.warn("[SidekiqAlive] Path '#{req.path}' not found")
41
+ end
42
+
43
+ if quiet?
44
+ res.status = 200
45
+ res.body = "Server is shutting down"
46
+ return logger.debug("[SidekiqAlive] Server in quiet mode, skipping alive key lookup!")
47
+ end
48
+
49
+ if SidekiqAlive.alive?
50
+ res.status = 200
51
+ res.body = "Alive!"
52
+ return logger.debug("[SidekiqAlive] Found alive key!")
53
+ end
54
+
55
+ response = "Can't find the alive key"
56
+ res.status = 404
57
+ res.body = response
58
+ logger.error("[SidekiqAlive] #{response}")
59
+ rescue StandardError => e
60
+ response = "Internal Server Error"
61
+ res.status = 500
62
+ res.body = response
63
+ logger.error("[SidekiqAlive] #{response} looking for alive key. Error: #{e.message}")
64
+ end
65
+
66
+ def quiet!
67
+ @quiet = Time.now
68
+ end
69
+
70
+ private
71
+
72
+ attr_reader :path
73
+
74
+ def quiet?
75
+ @quiet && (@quiet - Time.now) < SidekiqAlive.config.quiet_timeout
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "gserver"
4
+
5
+ module SidekiqAlive
6
+ module Server
7
+ # Simple HTTP server implementation
8
+ #
9
+ class HttpServer < GServer
10
+ # Request class for HTTP server
11
+ #
12
+ class Request
13
+ attr_reader :data, :header, :method, :path, :proto
14
+
15
+ def initialize(data, method = nil, path = nil, proto = nil)
16
+ @header = {}
17
+ @data = data
18
+ @method = method
19
+ @path = path
20
+ @proto = proto
21
+ end
22
+
23
+ def content_length
24
+ len = @header["Content-Length"]
25
+ return if len.nil?
26
+
27
+ len.to_i
28
+ end
29
+ end
30
+
31
+ # Response class for HTTP server
32
+ #
33
+ class Response
34
+ attr_reader :header
35
+ attr_accessor :body, :status, :status_message
36
+
37
+ def initialize(status = 200)
38
+ @status = status
39
+ @status_message = nil
40
+ @header = {}
41
+ end
42
+ end
43
+
44
+ def initialize(handle_obj, port, host, logger = Logger.new($stdout))
45
+ @handler = handle_obj
46
+ @logger = logger
47
+
48
+ super(port, host, 1, nil, logger.debug?, logger.debug?)
49
+ end
50
+
51
+ private
52
+
53
+ attr_reader :handler, :logger
54
+
55
+ CRLF = "\r\n"
56
+ HTTP_PROTO = "HTTP/1.1"
57
+ SERVER_NAME = "SidekiqAlive/#{SidekiqAlive::VERSION} (Ruby/#{RUBY_VERSION})"
58
+
59
+ # Default header for the server name
60
+ DEFAULT_HEADER = {
61
+ "Server" => SERVER_NAME,
62
+ }
63
+
64
+ # Mapping of status codes and error messages
65
+ STATUS_CODE_MAPPING = {
66
+ 200 => "OK",
67
+ 400 => "Bad Request",
68
+ 403 => "Forbidden",
69
+ 404 => "Not Found",
70
+ 405 => "Method Not Allowed",
71
+ 411 => "Length Required",
72
+ 500 => "Internal Server Error",
73
+ }
74
+
75
+ def serve(io)
76
+ # parse first line
77
+ if io.gets =~ /^(\S+)\s+(\S+)\s+(\S+)/
78
+ request = Request.new(io, ::Regexp.last_match(1), ::Regexp.last_match(2), ::Regexp.last_match(3))
79
+ else
80
+ io << http_resp(status_code: 400)
81
+ return
82
+ end
83
+
84
+ # parse HTTP headers
85
+ while (line = io.gets) !~ /^(\n|\r)/
86
+ if line =~ /^([\w-]+):\s*(.*)$/
87
+ request.header[::Regexp.last_match(1)] = ::Regexp.last_match(2).strip
88
+ end
89
+ end
90
+
91
+ io.binmode
92
+ response = Response.new
93
+
94
+ # execute request handler
95
+ handler.request_handler(request, response)
96
+
97
+ http_response = http_resp(
98
+ status_code: response.status,
99
+ status_message: response.status_message,
100
+ header: response.header,
101
+ body: response.body,
102
+ )
103
+
104
+ # write response back to the client
105
+ io << http_response
106
+ rescue StandardError
107
+ io << http_resp(status_code: 500)
108
+ end
109
+
110
+ def http_header(header = nil)
111
+ new_header = DEFAULT_HEADER.dup
112
+ new_header.merge(header) unless header.nil?
113
+
114
+ new_header["Connection"] = "Keep-Alive"
115
+ new_header["Date"] = http_date(Time.now)
116
+
117
+ new_header
118
+ end
119
+
120
+ def http_resp(status_code:, status_message: nil, header: nil, body: nil)
121
+ status_message ||= STATUS_CODE_MAPPING[status_code]
122
+ status_line = "#{HTTP_PROTO} #{status_code} #{status_message}".rstrip + CRLF
123
+
124
+ resp_header = http_header(header)
125
+ resp_header["Content-Length"] = body.bytesize.to_s unless body.nil?
126
+ header_lines = resp_header.map { |k, v| "#{k}: #{v}#{CRLF}" }.join
127
+
128
+ [status_line, header_lines, CRLF, body].compact.join
129
+ end
130
+
131
+ def http_date(a_time)
132
+ a_time.gmtime.strftime("%a, %d %b %Y %H:%M:%S GMT")
133
+ end
134
+
135
+ def log(msg)
136
+ logger.debug(msg)
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module SidekiqAlive
6
+ module Server
7
+ class Rack
8
+ extend Base
9
+
10
+ class << self
11
+ def run!
12
+ logger.info("[SidekiqAlive] Starting healthcheck '#{server}' server")
13
+ @server_pid = ::Process.fork do
14
+ @handler = handler
15
+ configure_shutdown_signal { @handler.shutdown }
16
+ configure_quiet_signal { @quiet = Time.now }
17
+
18
+ @handler.run(self, Port: port, Host: host, AccessLog: [], Logger: logger)
19
+ end
20
+ configure_shutdown
21
+
22
+ self
23
+ end
24
+
25
+ def call(env)
26
+ req = ::Rack::Request.new(env)
27
+
28
+ if req.path != path
29
+ logger.warn("[SidekiqAlive] Path '#{req.path}' not found")
30
+ return [404, {}, ["Not found"]]
31
+ end
32
+
33
+ if quiet?
34
+ logger.debug("[SidekiqAlive] [SidekiqAlive] Server in quiet mode, skipping alive key lookup!")
35
+ return [200, {}, ["Server is shutting down"]]
36
+ end
37
+
38
+ if SidekiqAlive.alive?
39
+ logger.debug("[SidekiqAlive] Found alive key!")
40
+ return [200, {}, ["Alive!"]]
41
+ end
42
+
43
+ response = "Can't find the alive key"
44
+ logger.error("[SidekiqAlive] #{response}")
45
+ [404, {}, [response]]
46
+ rescue StandardError => e
47
+ logger.error("[SidekiqAlive] #{response} looking for alive key. Error: #{e.message}")
48
+ [500, {}, ["Internal Server Error"]]
49
+ end
50
+
51
+ private
52
+
53
+ def quiet?
54
+ @quiet && (@quiet - Time.now) < SidekiqAlive.config.quiet_timeout
55
+ end
56
+
57
+ def handler
58
+ Helpers.use_rackup? ? ::Rackup::Handler.get(server) : ::Rack::Handler.get(server)
59
+ end
60
+
61
+ def server
62
+ SidekiqAlive.config.server
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,45 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rack"
4
-
5
3
  module SidekiqAlive
6
- class Server
4
+ module Server
7
5
  class << self
8
6
  def run!
9
- handler = Rack::Handler.get(server)
10
-
11
- Signal.trap("TERM") { handler.shutdown }
12
-
13
- handler.run(self, Port: port, Host: host, AccessLog: [], Logger: SidekiqAlive.logger)
7
+ server.run!
14
8
  end
15
9
 
16
- def host
17
- SidekiqAlive.config.host
18
- end
10
+ private
19
11
 
20
- def port
21
- SidekiqAlive.config.port
12
+ def server
13
+ use_rack? ? Rack : Default
22
14
  end
23
15
 
24
- def path
25
- SidekiqAlive.config.path
26
- end
16
+ def use_rack?
17
+ return false unless SidekiqAlive.config.server
27
18
 
28
- def server
29
- SidekiqAlive.config.server
19
+ Helpers.use_rackup? || Helpers.use_rack?
30
20
  end
31
21
 
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
22
+ def logger
23
+ SidekiqAlive.logger
42
24
  end
43
25
  end
44
26
  end
45
27
  end
28
+
29
+ require_relative "server/default"
30
+ require_relative "server/rack"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SidekiqAlive
4
- VERSION = "2.3.0"
4
+ VERSION = "2.4.0"
5
5
  end
data/lib/sidekiq_alive.rb CHANGED
@@ -20,35 +20,35 @@ module SidekiqAlive
20
20
 
21
21
  if Helpers.sidekiq_7
22
22
  sq_config.capsule(CAPSULE_NAME) do |cap|
23
- cap.concurrency = 2
23
+ cap.concurrency = config.concurrency
24
24
  cap.queues = [current_queue]
25
25
  end
26
26
  else
27
27
  (sq_config.respond_to?(:[]) ? sq_config[:queues] : sq_config.options[:queues]).unshift(current_queue)
28
28
  end
29
29
 
30
- logger.info(startup_info)
31
-
30
+ logger.info("[SidekiqAlive] #{startup_info}")
32
31
  register_current_instance
33
-
34
32
  store_alive_key
35
33
  # Passing the hostname argument it's only for debugging enqueued jobs
36
34
  SidekiqAlive::Worker.perform_async(hostname)
37
- @server_pid = fork { SidekiqAlive::Server.run! }
35
+ @server = SidekiqAlive::Server.run!
38
36
 
39
- logger.info(successful_startup_text)
37
+ logger.info("[SidekiqAlive] #{successful_startup_text}")
40
38
  end
41
39
 
42
40
  sq_config.on(:quiet) do
43
- unregister_current_instance
44
- config.shutdown_callback.call
41
+ logger.info("[SidekiqAlive] #{shutdown_info}")
42
+ purge_pending_jobs
43
+ # set web server to quiet mode
44
+ @server&.quiet!
45
45
  end
46
46
 
47
47
  sq_config.on(:shutdown) do
48
- Process.kill("TERM", @server_pid) unless @server_pid.nil?
49
- Process.wait(@server_pid) unless @server_pid.nil?
50
-
51
- unregister_current_instance
48
+ remove_queue
49
+ # make sure correct redis connection pool is used
50
+ # sidekiq will terminate non internal capsules
51
+ Redis.adapter("internal").zrem(HOSTNAME_REGISTRY, current_instance_register_key)
52
52
  config.shutdown_callback.call
53
53
  end
54
54
  end
@@ -62,13 +62,6 @@ module SidekiqAlive
62
62
  register_instance(current_instance_register_key)
63
63
  end
64
64
 
65
- def unregister_current_instance
66
- # Delete any pending jobs for this instance
67
- logger.info(shutdown_info)
68
- purge_pending_jobs
69
- redis.zrem(HOSTNAME_REGISTRY, current_instance_register_key)
70
- end
71
-
72
65
  def registered_instances
73
66
  # before we return we make sure we expire old keys
74
67
  expire_old_keys
@@ -82,9 +75,14 @@ module SidekiqAlive
82
75
  else
83
76
  schedule_set.scan('"class":"SidekiqAlive::Worker"').select { |job| job.queue == current_queue }
84
77
  end
85
- logger.info("[SidekiqAlive] Purging #{jobs.count} pending for #{hostname}")
86
- jobs.each(&:delete)
87
78
 
79
+ unless jobs.empty?
80
+ logger.info("[SidekiqAlive] Purging #{jobs.count} pending jobs for #{hostname}")
81
+ jobs.each(&:delete)
82
+ end
83
+ end
84
+
85
+ def remove_queue
88
86
  logger.info("[SidekiqAlive] Removing queue #{current_queue}")
89
87
  Sidekiq::Queue.new(current_queue).clear
90
88
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq_alive
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrejs Cunskis
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-09-07 00:00:00.000000000 Z
12
+ date: 2024-02-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -39,20 +39,6 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '1.6'
42
- - !ruby/object:Gem::Dependency
43
- name: rack-test
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - "~>"
47
- - !ruby/object:Gem::Version
48
- version: 2.1.0
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - "~>"
54
- - !ruby/object:Gem::Version
55
- version: 2.1.0
56
42
  - !ruby/object:Gem::Dependency
57
43
  name: rake
58
44
  requirement: !ruby/object:Gem::Requirement
@@ -115,28 +101,28 @@ dependencies:
115
101
  requirements:
116
102
  - - "~>"
117
103
  - !ruby/object:Gem::Version
118
- version: 0.49.0
104
+ version: 0.50.0
119
105
  type: :development
120
106
  prerelease: false
121
107
  version_requirements: !ruby/object:Gem::Requirement
122
108
  requirements:
123
109
  - - "~>"
124
110
  - !ruby/object:Gem::Version
125
- version: 0.49.0
111
+ version: 0.50.0
126
112
  - !ruby/object:Gem::Dependency
127
- name: rack
113
+ name: gserver
128
114
  requirement: !ruby/object:Gem::Requirement
129
115
  requirements:
130
- - - "<"
116
+ - - "~>"
131
117
  - !ruby/object:Gem::Version
132
- version: '3'
118
+ version: 0.0.1
133
119
  type: :runtime
134
120
  prerelease: false
135
121
  version_requirements: !ruby/object:Gem::Requirement
136
122
  requirements:
137
- - - "<"
123
+ - - "~>"
138
124
  - !ruby/object:Gem::Version
139
- version: '3'
125
+ version: 0.0.1
140
126
  - !ruby/object:Gem::Dependency
141
127
  name: sidekiq
142
128
  requirement: !ruby/object:Gem::Requirement
@@ -157,26 +143,6 @@ dependencies:
157
143
  - - "<"
158
144
  - !ruby/object:Gem::Version
159
145
  version: '8'
160
- - !ruby/object:Gem::Dependency
161
- name: webrick
162
- requirement: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '1'
167
- - - "<"
168
- - !ruby/object:Gem::Version
169
- version: '2'
170
- type: :runtime
171
- prerelease: false
172
- version_requirements: !ruby/object:Gem::Requirement
173
- requirements:
174
- - - ">="
175
- - !ruby/object:Gem::Version
176
- version: '1'
177
- - - "<"
178
- - !ruby/object:Gem::Version
179
- version: '2'
180
146
  description: |
181
147
  SidekiqAlive offers a solution to add liveness probe of a Sidekiq instance.
182
148
 
@@ -204,6 +170,10 @@ files:
204
170
  - lib/sidekiq_alive/redis/redis_client_gem.rb
205
171
  - lib/sidekiq_alive/redis/redis_gem.rb
206
172
  - lib/sidekiq_alive/server.rb
173
+ - lib/sidekiq_alive/server/base.rb
174
+ - lib/sidekiq_alive/server/default.rb
175
+ - lib/sidekiq_alive/server/http_server.rb
176
+ - lib/sidekiq_alive/server/rack.rb
207
177
  - lib/sidekiq_alive/version.rb
208
178
  - lib/sidekiq_alive/worker.rb
209
179
  homepage: https://github.com/arturictus/sidekiq_alive
@@ -213,7 +183,7 @@ metadata:
213
183
  homepage_uri: https://github.com/arturictus/sidekiq_alive
214
184
  source_code_uri: https://github.com/arturictus/sidekiq_alive
215
185
  changelog_uri: https://github.com/arturictus/sidekiq_alive/releases
216
- documentation_uri: https://github.com/arturictus/sidekiq_alive/blob/v2.3.0/README.md
186
+ documentation_uri: https://github.com/arturictus/sidekiq_alive/blob/v2.4.0/README.md
217
187
  bug_tracker_uri: https://github.com/arturictus/sidekiq_alive/issues
218
188
  post_install_message:
219
189
  rdoc_options: []