rack-haproxy_status 0.8.1 → 0.9.0

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: 9e4ea88680fb72ffea304f2aaf416b2ea3f5b79b
4
- data.tar.gz: 2bd7d76caa8153252183ec8e0b5f9eca2430e27a
3
+ metadata.gz: b99c7892b98ab925a0840e7742eece6a125e2330
4
+ data.tar.gz: 9b399ab748ccd22c484ff4d062561025f037194f
5
5
  SHA512:
6
- metadata.gz: 7a830dbf7757e794ce0c41abfec299c87a09b04c9975076d32ff915e77c922fe5e53b81e3fd13dabb73ec0fe77f6fe4f3d6c4f29076bf21720dbdb4f140165e7
7
- data.tar.gz: d77d03a0da01ed5ec952b3c490caba04b40c9893a1d2fbe47f3a39b2452553daae99103c46e5974e4e4dd04e779690770586c62f082fbcf3049304685d38186b
6
+ metadata.gz: 2bda358c25493572ecd740ea2856456765188ea81b6b0b73d70824de2cd7961f015b288392074e2f4b5b3eeb6e2be7a465443ed4c5d95c00b10ed67983be1c6d
7
+ data.tar.gz: b7e16a5ab89ddeea4baed733e0e419aa79caaf7bba7716859b3a5a4e4b90b36ea460d19e0bb445d43e179c1481e359e3e7f8a72fc809209af9125ebb67a5866a
@@ -1,4 +1,5 @@
1
1
  require "rack/haproxy_status/version"
2
+ require "json"
2
3
 
3
4
  module Rack
4
5
  module HaproxyStatus
@@ -7,17 +8,23 @@ module Rack
7
8
 
8
9
  VALID_STATES = %w(on off)
9
10
 
10
- def initialize(path:, io: ::File)
11
+ def initialize(path:, io: ::File, extra_checks: [])
11
12
  @path = path
12
13
  @io = io
14
+ @extra_checks = extra_checks
13
15
  end
14
16
 
15
17
  def call(env)
16
- if balancer_member?
17
- [200, {'Content-Type' => 'application/json'}, ['{"status": "ok", "member": true}']]
18
- else
19
- [503, {'Content-Type' => 'application/json'}, ['{"status": "ok", "member": false}']]
20
- end
18
+ balancer_member = balancer_member?
19
+ extra_checks_all_successful = extra_checks_all_successful?
20
+ http_code = balancer_member && extra_checks_all_successful ? 200 : 503
21
+ status = extra_checks_all_successful ? 'ok' : 'error'
22
+
23
+ [
24
+ http_code,
25
+ {'Content-Type' => 'application/json'},
26
+ [JSON.generate(status: status, member: balancer_member?)]
27
+ ]
21
28
  rescue InvalidStatus
22
29
  [500, {'Content-Type' => 'application/json'}, ['{"status": "unknown status"}']]
23
30
  end
@@ -29,6 +36,10 @@ module Rack
29
36
  raise InvalidStatus, "Invalid state: #{state}" unless VALID_STATES.include?(state)
30
37
  state == "on"
31
38
  end
39
+
40
+ def extra_checks_all_successful?
41
+ @extra_checks.map { |check| check.call() }.all?
42
+ end
32
43
  end
33
44
  end
34
45
  end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  module HaproxyStatus
3
- VERSION = "0.8.1"
3
+ VERSION = "0.9.0"
4
4
  end
5
5
  end
@@ -3,7 +3,8 @@ require 'json'
3
3
 
4
4
  describe Rack::HaproxyStatus::Endpoint do
5
5
  let(:disk) { double("File", read: "on") }
6
- let(:response) { described_class.new(path: 'config/status', io: disk).call({}) }
6
+ let(:extra_checks) { [] }
7
+ let(:response) { described_class.new(path: 'config/status', io: disk, extra_checks: extra_checks).call({}) }
7
8
  let(:response_status) { response[0] }
8
9
  let(:response_headers) { response[1] }
9
10
  let(:response_body) { response[2] }
@@ -31,4 +32,31 @@ describe Rack::HaproxyStatus::Endpoint do
31
32
  expect(response_status).to eq(500)
32
33
  end
33
34
  end
35
+
36
+ describe 'extra_checks that succeed' do
37
+ let(:extra_checks) { [Proc.new { true }] }
38
+
39
+ it 'should be in the balancer' do
40
+ expect(response_status).to eq(200)
41
+ expect(result.fetch('status')).to eq('ok')
42
+ end
43
+ end
44
+
45
+ describe 'extra_checks that fail' do
46
+ let(:extra_checks) { [Proc.new { 3 == 2 }] }
47
+
48
+ it 'should not be in the balancer' do
49
+ expect(response_status).to eq(503)
50
+ expect(result.fetch('status')).to eq('error')
51
+ end
52
+ end
53
+
54
+ describe 'extra_checks that partially fail' do
55
+ let(:extra_checks) { [Proc.new { 3 == 3 }, Proc.new { 3 == 2 }] }
56
+
57
+ it 'should not be in the balancer' do
58
+ expect(response_status).to eq(503)
59
+ expect(result.fetch('status')).to eq('error')
60
+ end
61
+ end
34
62
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-haproxy_status
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marten Veldthuis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-07 00:00:00.000000000 Z
11
+ date: 2018-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -89,10 +89,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
89
  version: '0'
90
90
  requirements: []
91
91
  rubyforge_project:
92
- rubygems_version: 2.2.2
92
+ rubygems_version: 2.5.2
93
93
  signing_key:
94
94
  specification_version: 4
95
95
  summary: Tiny mountable app that returns an HTTP state based on contents of a file.
96
96
  test_files:
97
97
  - spec/rack-haproxy_status_spec.rb
98
- has_rdoc: