sidekiq_liviness 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f4f213bf5a66bfbcf7becabfa975011bc1cc56b78e84dcd350775242b454395d
4
+ data.tar.gz: ac62a2200a189d96bdd4eff05db87821d7ce7ffc8b4ddf5bdee49aab7eaae93b
5
+ SHA512:
6
+ metadata.gz: 3721606609848a83fd406f8375407799690e03f011e3f4cc98629939281be8c55c2431f9e0c0b6010b9b3dedb513028ed156838f98c31055eee2e656858e6946
7
+ data.tar.gz: abe0bf054c0fd245f1f037d56a521cd4cbb4c82e6da986adf50784e619db33b98fadb7a91c8c3bc192445877d12b86c0f9ec6da1b929e8a6705304d59f25edfb
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "sidekiq"
4
+ require "sidekiq/api"
5
+ require_relative "sidekiq_liviness/server"
6
+ require_relative "sidekiq_liviness/version"
7
+
8
+ module SidekiqLiviness
9
+ def self.start
10
+ Sidekiq.configure_server do |config|
11
+ config.on(:startup) do
12
+ @server_pid = fork do
13
+ SidekiqLiviness::Server.run!
14
+ end
15
+ end
16
+
17
+ config.on(:shutdown) do
18
+ Process.kill("TERM", @server_pid) unless @server_pid.nil?
19
+ Process.wait(@server_pid) unless @server_pid.nil?
20
+ end
21
+ end
22
+ end
23
+
24
+ def self.alive?
25
+ # Find current process if exists
26
+ process = Sidekiq::ProcessSet.new.find { |p| p["pid"] == ::Process.ppid }
27
+ return false unless process
28
+
29
+ process["beat"] > (Time.now.to_i - 15)
30
+ end
31
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rack"
4
+
5
+ module SidekiqLiviness
6
+ class Server
7
+ class << self
8
+ def run!
9
+ handler = Rack::Handler.get("webrick")
10
+
11
+ Signal.trap("TERM") { handler.shutdown }
12
+
13
+ handler.run(self, Port: port, Host: "0.0.0.0")
14
+ end
15
+
16
+ def call(env)
17
+ if Rack::Request.new(env).path != path
18
+ [404, {}, [""]]
19
+ elsif SidekiqLiviness.alive?
20
+ [200, {}, [""]]
21
+ else
22
+ [500, {}, [""]]
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def port
29
+ ENV.fetch("SIDEKIQ_LIVINESS_PORT") { 7433 }
30
+ end
31
+
32
+ def path
33
+ ENV.fetch("SIDEKIQ_LIVINESS_PATH") { "/healthz" }
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SidekiqLiviness
4
+ VERSION = "0.1.0"
5
+ end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sidekiq_liviness
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mikko Kokkonen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-02-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sidekiq
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '6'
34
+ - - ">"
35
+ - !ruby/object:Gem::Version
36
+ version: '6'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '6'
44
+ - - ">"
45
+ - !ruby/object:Gem::Version
46
+ version: '6'
47
+ - !ruby/object:Gem::Dependency
48
+ name: webrick
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.6'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.6'
61
+ description: SidekiqLiviness offers a solution to add liveness probe of a Sidekiq
62
+ instance.
63
+ email:
64
+ - mikko.kokkonen@itsmycargo.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - lib/sidekiq_liviness.rb
70
+ - lib/sidekiq_liviness/server.rb
71
+ - lib/sidekiq_liviness/version.rb
72
+ homepage: https://github.com/mikian/sidekiq_liviness
73
+ licenses:
74
+ - MIT
75
+ metadata:
76
+ bug_tracker_uri: https://github.com/mikian/sidekiq_liviness/issues
77
+ changelog_uri: https://github.com/mikian/sidekiq_liviness/blob/main/CHANGELOG.md
78
+ documentation_uri: https://github.com/mikian/sidekiq_liviness
79
+ homepage_uri: https://github.com/mikian/sidekiq_liviness
80
+ source_code_uri: https://github.com/mikian/sidekiq_liviness
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 2.3.0
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubygems_version: 3.2.3
97
+ signing_key:
98
+ specification_version: 4
99
+ summary: Liveness probe for Sidekiq on Kubernetes deployments.
100
+ test_files: []