sidekiq_alive 1.2.0 → 2.0.4

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: e7b89d09d3a01cd0774ea9a4955a407f3fa397a5799e9d01d65c71e7e448bdca
4
- data.tar.gz: 5241eee33524f7115bc9345aec7803e54c5035cb5071dfd92ac1479bcc40fd7d
3
+ metadata.gz: bbf273df09ffb9644877ecc5966a9c7e94615d491b13a79c8b1dc50a298188cd
4
+ data.tar.gz: f5f6aed93f4504d8ddb2b0b38a24841a93110e09392d08d8e5639458cf505e85
5
5
  SHA512:
6
- metadata.gz: 5bef84e7c6f9ab1f28c3512f2628918676f7df835d1c389defb4e50ad47eca6e13cf82a2b6453cc4b9776ecf7e37a4d84d845b3af510222045e115e0316cae9a
7
- data.tar.gz: ee57bf4f7d780d5b8b45b7775989a30af47d77a2faa0db1877280a69ea374471d0143a5ab4edb004f08e28e12a8c9cc8c59e7a4fa9e972a8162b1ab82f8fa1d7
6
+ metadata.gz: 18a60ff3d82051ca24831b886a7b1a98be6c8121f89d13a25fc2b875357de615afd6620a80e9ed36f99d4b5b48a48eb3172f01548306d7658fcb0f80650d0ec8
7
+ data.tar.gz: 7365d0aadc34ea188ff9a268222e2c7b7d21840f527f5444653fba72f9fdb3cd5184c5268b66590e8d2f8bacac85884c2a7ed7b0423d9920654372066fc37f58
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
@@ -1,9 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sidekiq_alive (1.2.0)
4
+ sidekiq_alive (2.0.4)
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,13 +11,30 @@ __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.
18
18
 
19
19
  Each instance in kubernetes will be checked based on `ENV` variable `HOSTNAME` (kubernetes sets this for each replica/pod).
20
20
 
21
+ On initialization SidekiqAlive will asign to Sidekiq::Worker a queue with the current host and add this queue to the current instance queues to process.
22
+
23
+ example:
24
+
25
+ ```
26
+ hostname: foo
27
+ Worker queue: sidekiq_alive-foo
28
+ instance queues:
29
+ - sidekiq_alive-foo
30
+ *- your queues
31
+
32
+ hostname: bar
33
+ Worker queue: sidekiq_alive-bar
34
+ instance queues:
35
+ - sidekiq_alive-bar
36
+ *- your queues
37
+ ```
21
38
 
22
39
  ## Installation
23
40
 
@@ -35,29 +52,21 @@ Or install it yourself as:
35
52
 
36
53
  $ gem install sidekiq_alive
37
54
 
38
- Run `Sidekiq` with a `sidekiq_alive` queue.
39
-
40
- ```
41
- sidekiq -q sidekiq_alive
42
- ```
43
-
44
- or in your config:
45
55
 
46
- _sidekiq.yml_
47
- ```yaml
48
- queues:
49
- - default
50
- - sidekiq_alive
51
- ```
56
+ ## Usage
52
57
 
53
- __IMPORTANT:__
58
+ SidekiqAlive will start when running `sidekiq` command.
54
59
 
55
- Make sure you run a `quiet` every time before you stop the pods [(issue)](https://github.com/arturictus/sidekiq_alive/issues/10). That's not only important for SidekiqAlive it's important that your workers finish before you stop Sidekiq.
56
- Check [recommended kubernetes setup](#kubernetes-setup)
60
+ Run `Sidekiq`
57
61
 
58
- ## Usage
62
+ ```
63
+ bundle exec sidekiq
64
+ ```
59
65
 
60
- SidekiqAlive will start when running `sidekiq` command.
66
+ ```
67
+ curl localhost:7433
68
+ #=> Alive!
69
+ ```
61
70
 
62
71
 
63
72
  __how to disable?__
@@ -74,6 +83,8 @@ Set `livenessProbe` in your Kubernetes deployment
74
83
 
75
84
  example with recommended setup:
76
85
 
86
+ #### Sidekiq < 6
87
+
77
88
  ```yaml
78
89
  spec:
79
90
  containers:
@@ -108,6 +119,63 @@ spec:
108
119
  terminationGracePeriodSeconds: 60 # put your longest Job time here plus security time.
109
120
  ```
110
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
+
111
179
  ### Outside kubernetes
112
180
 
113
181
  It's just up to you how you want to use it.
@@ -129,11 +197,19 @@ curl localhost:7433
129
197
  ```ruby
130
198
  SidekiqAlive.setup do |config|
131
199
  # ==> Server port
132
- # Port to bind the server
200
+ # Port to bind the server.
201
+ # Can also be set with the environment variable SIDEKIQ_ALIVE_PORT.
133
202
  # default: 7433
134
203
  #
135
204
  # config.port = 7433
136
205
 
206
+ # ==> Server path
207
+ # HTTP path to respond to.
208
+ # Can also be set with the environment variable SIDEKIQ_ALIVE_PATH.
209
+ # default: '/'
210
+ #
211
+ # config.path = '/'
212
+
137
213
  # ==> Liveness key
138
214
  # Key to be stored in Redis as probe of liveness
139
215
  # default: "SIDEKIQ::LIVENESS_PROBE_TIMESTAMP"
@@ -156,28 +232,20 @@ SidekiqAlive.setup do |config|
156
232
  # require 'net/http'
157
233
  # config.callback = proc { Net::HTTP.get("https://status.com/ping") }
158
234
 
159
- # ==> Preferred Queue
160
- # Sidekiq Alive will try to enqueue the workers to this queue. If not found
161
- # will do it to the first available queue.
162
- # It's a good practice to add a dedicated queue for sidekiq alive. If the queue
163
- # where sidekiq is processing SidekiqALive gets overloaded and takes
164
- # longer than the `ttl` to process SidekiqAlive::Worker will make the liveness probe
165
- # to fail. Sidekiq overloaded and restarting every `ttl` cicle.
166
- # Add the sidekiq alive queue!!
235
+ # ==> Queue Prefix
236
+ # SidekiqAlive will run in a independent queue for each instance/replica
237
+ # This queue name will be generated with: "#{queue_prefix}-#{hostname}.
238
+ # You can customize the prefix here.
167
239
  # default: :sidekiq_alive
168
240
  #
169
- # config.preferred_queue = :other
170
-
171
- # ==> delay_between_async_other_host_queue
172
- # When instance receives a job from another instance it requeues itself again
173
- # until the owner instance process it. This was causing a lot of read/writes in big deployments
174
- # with a lot of replicas.
175
- # Delaying the requeue proves to be less read/write intensive
176
- # default: 1
241
+ # config.queue_prefix = :other
242
+
243
+ # ==> Rack server
244
+ # Web server used to serve an HTTP response.
245
+ # Can also be set with the environment variable SIDEKIQ_ALIVE_SERVER.
246
+ # default: 'webrick'
177
247
  #
178
- # config.delay_between_async_other_host_queue = 0.5
179
- # #or
180
- # config.delay_between_async_other_host_queue = false
248
+ # config.server = 'puma'
181
249
  end
182
250
  ```
183
251
 
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
@@ -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__)
@@ -6,10 +6,12 @@ require 'sidekiq_alive/config'
6
6
 
7
7
  module SidekiqAlive
8
8
  def self.start
9
- Sidekiq.configure_server do |config|
10
- SidekiqAlive::Worker.sidekiq_options queue: SidekiqAlive.select_queue(config.options[:queues])
9
+ SidekiqAlive::Worker.sidekiq_options queue: current_queue
10
+ Sidekiq.configure_server do |sq_config|
11
11
 
12
- config.on(:startup) do
12
+ sq_config.options[:queues].unshift(current_queue)
13
+
14
+ sq_config.on(:startup) do
13
15
  SidekiqAlive.tap do |sa|
14
16
  sa.logger.info(banner)
15
17
  sa.register_current_instance
@@ -22,10 +24,11 @@ module SidekiqAlive
22
24
  end
23
25
  end
24
26
 
25
- config.on(:quiet) do
27
+ sq_config.on(:quiet) do
26
28
  SidekiqAlive.unregister_current_instance
27
29
  end
28
- config.on(:shutdown) do
30
+
31
+ sq_config.on(:shutdown) do
29
32
  Process.kill('TERM', @server_pid) unless @server_pid.nil?
30
33
  Process.wait(@server_pid) unless @server_pid.nil?
31
34
  SidekiqAlive.unregister_current_instance
@@ -33,12 +36,8 @@ module SidekiqAlive
33
36
  end
34
37
  end
35
38
 
36
- def self.select_queue(queues)
37
- @queue = if queues.find { |e| e.to_sym == config.preferred_queue.to_sym }
38
- config.preferred_queue.to_sym
39
- else
40
- queues.first
41
- end
39
+ def self.current_queue
40
+ "#{config.queue_prefix}-#{hostname}"
42
41
  end
43
42
 
44
43
  def self.register_current_instance
@@ -57,10 +56,15 @@ module SidekiqAlive
57
56
  end
58
57
 
59
58
  def self.purge_pending_jobs
59
+ # TODO:
60
+ # Sidekiq 6 allows better way to find scheduled jobs:
61
+ # https://github.com/mperham/sidekiq/wiki/API#scan
60
62
  scheduled_set = Sidekiq::ScheduledSet.new
61
- jobs = scheduled_set.select { |job| job.klass == 'SidekiqAlive::Worker' && job.args[0] == hostname }
62
- logger.info("Purging #{jobs.count} pending for #{hostname}")
63
+ jobs = scheduled_set.select { |job| job.klass == 'SidekiqAlive::Worker' && job.queue == current_queue }
64
+ logger.info("[SidekiqAlive] Purging #{jobs.count} pending for #{hostname}")
63
65
  jobs.each(&:delete)
66
+ logger.info("[SidekiqAlive] Removing queue #{current_queue}")
67
+ Sidekiq::Queue.new(current_queue).clear
64
68
  end
65
69
 
66
70
  def self.current_instance_register_key
@@ -1,14 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SidekiqAlive
2
4
  class Config
3
5
  include Singleton
4
6
 
5
7
  attr_accessor :port,
8
+ :path,
6
9
  :liveness_key,
7
10
  :time_to_live,
8
11
  :callback,
9
12
  :registered_instance_key,
10
- :preferred_queue,
11
- :delay_between_async_other_host_queue
13
+ :queue_prefix,
14
+ :server
12
15
 
13
16
  def initialize
14
17
  set_defaults
@@ -16,16 +19,17 @@ module SidekiqAlive
16
19
 
17
20
  def set_defaults
18
21
  @port = ENV['SIDEKIQ_ALIVE_PORT'] || 7433
22
+ @path = ENV['SIDEKIQ_ALIVE_PATH'] || '/'
19
23
  @liveness_key = 'SIDEKIQ::LIVENESS_PROBE_TIMESTAMP'
20
24
  @time_to_live = 10 * 60
21
25
  @callback = proc {}
22
26
  @registered_instance_key = 'SIDEKIQ_REGISTERED_INSTANCE'
23
- @preferred_queue = :sidekiq_alive
24
- @delay_between_async_other_host_queue = 1
27
+ @queue_prefix = :sidekiq_alive
28
+ @server = ENV['SIDEKIQ_ALIVE_SERVER'] || 'webrick'
25
29
  end
26
30
 
27
31
  def registration_ttl
28
- @registration_ttl ? @registration_ttl : time_to_live + 60
32
+ @registration_ttl || time_to_live + 60
29
33
  end
30
34
  end
31
35
  end
@@ -1,18 +1,40 @@
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: '0.0.0.0')
14
+ end
15
+
16
+ def port
17
+ SidekiqAlive.config.port
18
+ end
19
+
20
+ def path
21
+ SidekiqAlive.config.path
22
+ end
23
+
24
+ def server
25
+ SidekiqAlive.config.server
26
+ end
27
+
28
+ def call(env)
29
+ if Rack::Request.new(env).path != path
30
+ [404, {}, ['Not found']]
31
+ elsif SidekiqAlive.alive?
32
+ [200, {}, ['Alive!']]
33
+ else
34
+ response = "Can't find the alive key"
35
+ SidekiqAlive.logger.error(response)
36
+ [404, {}, [response]]
37
+ end
16
38
  end
17
39
  end
18
40
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SidekiqAlive
2
- VERSION = '1.2.0'.freeze
4
+ VERSION = '2.0.4'
3
5
  end
@@ -3,20 +3,10 @@ module SidekiqAlive
3
3
  include Sidekiq::Worker
4
4
  sidekiq_options retry: false
5
5
 
6
- def perform(hostname = SidekiqAlive.hostname)
7
- return unless hostname_registered?(hostname)
8
- if current_hostname == hostname
9
- write_living_probe
10
- # schedule next living probe
11
- self.class.perform_in(config.time_to_live / 2, current_hostname)
12
- else
13
- # requeue for hostname to validate it's own liveness probe
14
- if config.delay_between_async_other_host_queue
15
- self.class.perform_in(config.delay_between_async_other_host_queue, hostname)
16
- else
17
- self.class.perform_async(hostname)
18
- end
19
- end
6
+ def perform(_hostname = SidekiqAlive.hostname)
7
+ write_living_probe
8
+ # schedule next living probe
9
+ self.class.perform_in(config.time_to_live / 2, current_hostname)
20
10
  end
21
11
 
22
12
  def hostname_registered?(hostname)
@@ -31,7 +21,11 @@ module SidekiqAlive
31
21
  # Increment ttl for current registered instance
32
22
  SidekiqAlive.register_current_instance
33
23
  # after callbacks
34
- config.callback.call()
24
+ begin
25
+ config.callback.call
26
+ rescue StandardError
27
+ nil
28
+ end
35
29
  end
36
30
 
37
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: 1.2.0
4
+ version: 2.0.4
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-21 00:00:00.000000000 Z
11
+ date: 2020-11-04 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.