roqua-support 0.1.29 → 0.1.30
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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/roqua-support.rb +6 -0
- data/lib/roqua-support/railtie.rb +0 -1
- data/lib/roqua-support/version.rb +1 -1
- data/lib/roqua/status_checks/check_db_connection.rb +13 -0
- data/lib/roqua/status_checks/check_load_balancer_member.rb +15 -0
- data/lib/roqua/status_checks/status_controller.rb +43 -0
- data/spec/internal/config/balancer_state +1 -0
- data/spec/internal/config/routes.rb +3 -0
- data/spec/roqua/status_checks/check_db_connection_spec.rb +15 -0
- data/spec/roqua/status_checks/check_load_balancer_member_spec.rb +22 -0
- data/spec/roqua/status_checks/status_controller_spec.rb +63 -0
- metadata +16 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a7e7e17065382daf49bff625d1a8008a0a4c0ba
|
4
|
+
data.tar.gz: 9a6b746e175193312045d7a94dc67a57d55577bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b507ccf0d36fc1941ad3bfb8f4a2714ce0da6e435a6c7356016ecdaffd7d77a6617822803b8ec8e4521b349d9befc228220f1f311248690f87880cfb2a46cfa8
|
7
|
+
data.tar.gz: 9140cb6bc4ea4b6c7b0e13276b0474b4cb3365238cb7e9166d717e85cc80d3eed2f47d7f0997c706cfe6be91afbb662d8abfa09f6dc2a7f536738718e1dd2374
|
data/Gemfile.lock
CHANGED
data/lib/roqua-support.rb
CHANGED
@@ -21,4 +21,10 @@ module Roqua
|
|
21
21
|
autoload :Schedule, 'roqua/scheduling/schedule'
|
22
22
|
autoload :Task, 'roqua/scheduling/task'
|
23
23
|
end
|
24
|
+
|
25
|
+
module StatusChecks
|
26
|
+
autoload :CheckDbConnection, 'roqua/status_checks/check_db_connection'
|
27
|
+
autoload :CheckLoadBalancerMember, 'roqua/status_checks/check_load_balancer_member'
|
28
|
+
autoload :StatusController, 'roqua/status_checks/status_controller'
|
29
|
+
end
|
24
30
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Roqua
|
2
|
+
module StatusChecks
|
3
|
+
module CheckDbConnection
|
4
|
+
def self.connected?
|
5
|
+
ActiveRecord::Base.establish_connection
|
6
|
+
ActiveRecord::Base.connection
|
7
|
+
ActiveRecord::Base.connected?
|
8
|
+
rescue
|
9
|
+
false # Check must return boolean, not an exception.
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Roqua
|
2
|
+
module StatusChecks
|
3
|
+
module CheckLoadBalancerMember
|
4
|
+
InvalidStatus = Class.new(StandardError)
|
5
|
+
|
6
|
+
VALID_STATES = %w(on off)
|
7
|
+
|
8
|
+
def self.balancer_member?(path)
|
9
|
+
state = ::File.read(path).strip
|
10
|
+
raise InvalidStatus, "Invalid state: #{state}" unless VALID_STATES.include?(state)
|
11
|
+
state == "on"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Roqua
|
2
|
+
module StatusChecks
|
3
|
+
# To use this status controller in a Rails application, add a route:
|
4
|
+
#
|
5
|
+
# get '/status' => 'roqua/status_checks/status#balancer_status'
|
6
|
+
#
|
7
|
+
# If you want to add more logic to the status controller, extend it:
|
8
|
+
#
|
9
|
+
# get '/status' => 'status#balancer_status'
|
10
|
+
#
|
11
|
+
# class StatusController < Roqua::StatusChecks::StatusController
|
12
|
+
# skip_before_action :foo
|
13
|
+
# skip_before_action :bar
|
14
|
+
# end
|
15
|
+
class StatusController < ActionController::Base
|
16
|
+
def balancer_status
|
17
|
+
balancer_member = balancer_member?
|
18
|
+
db_connected = db_connected?
|
19
|
+
|
20
|
+
http_code = balancer_member && db_connected ? 200 : 503
|
21
|
+
status = db_connected ? 'ok' : 'error'
|
22
|
+
|
23
|
+
render json: {status: status, member: balancer_member}, status: http_code
|
24
|
+
rescue CheckLoadBalancerMember::InvalidStatus
|
25
|
+
render json: {status: "unknown status"}, status: 500
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
def balancer_state_file
|
31
|
+
Rails.root.join('config/balancer_state')
|
32
|
+
end
|
33
|
+
|
34
|
+
def balancer_member?
|
35
|
+
CheckLoadBalancerMember.balancer_member?(balancer_state_file)
|
36
|
+
end
|
37
|
+
|
38
|
+
def db_connected?
|
39
|
+
CheckDbConnection.connected?
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
on
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Roqua::StatusChecks::CheckDbConnection' do
|
4
|
+
it 'returns true when there is a db connection' do
|
5
|
+
allow(ActiveRecord::Base).to receive(:establish_connection).and_return(true)
|
6
|
+
allow(ActiveRecord::Base).to receive(:connection).and_return(true)
|
7
|
+
allow(ActiveRecord::Base).to receive(:connected?).and_return(true)
|
8
|
+
|
9
|
+
expect(Roqua::StatusChecks::CheckDbConnection.connected?).to be_truthy
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'returns false when there is no db configured' do
|
13
|
+
expect(Roqua::StatusChecks::CheckDbConnection.connected?).to be_falsey
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Roqua::StatusChecks::CheckLoadBalancerMember' do
|
4
|
+
it 'returns true when the status file contains on' do
|
5
|
+
allow(File).to receive(:read).and_return('on')
|
6
|
+
|
7
|
+
expect(Roqua::StatusChecks::CheckLoadBalancerMember.balancer_member?('foo/bar')).to be_truthy
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'returns false when the status file does not contain off' do
|
11
|
+
allow(File).to receive(:read).and_return('off')
|
12
|
+
|
13
|
+
expect(Roqua::StatusChecks::CheckLoadBalancerMember.balancer_member?('foo/bar')).to be_falsey
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'raises InvalidStatus error when the status file contains something else' do
|
17
|
+
allow(File).to receive(:read).and_return('foo')
|
18
|
+
|
19
|
+
expect { Roqua::StatusChecks::CheckLoadBalancerMember.balancer_member?('foo/bar') }
|
20
|
+
.to raise_error(Roqua::StatusChecks::CheckLoadBalancerMember::InvalidStatus, 'Invalid state: foo')
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Roqua::StatusChecks::StatusController, type: :controller do
|
4
|
+
context 'visiting the status page while balancer member and database is up' do
|
5
|
+
it 'returns the correct status' do
|
6
|
+
allow(Roqua::StatusChecks::CheckLoadBalancerMember).to receive(:balancer_member?).and_return(true)
|
7
|
+
allow(Roqua::StatusChecks::CheckDbConnection).to receive(:connected?).and_return(true)
|
8
|
+
|
9
|
+
get :balancer_status
|
10
|
+
|
11
|
+
expect(response.status).to eq(200)
|
12
|
+
expect(response.body).to eq("{\"status\":\"ok\",\"member\":true}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'visiting the status page while not balancer member and database is up' do
|
17
|
+
it 'returns the correct status' do
|
18
|
+
allow(Roqua::StatusChecks::CheckLoadBalancerMember).to receive(:balancer_member?).and_return(false)
|
19
|
+
allow(Roqua::StatusChecks::CheckDbConnection).to receive(:connected?).and_return(true)
|
20
|
+
|
21
|
+
get :balancer_status
|
22
|
+
|
23
|
+
expect(response.status).to eq(503)
|
24
|
+
expect(response.body).to eq("{\"status\":\"ok\",\"member\":false}")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'visiting the status page while balancer member and database is down' do
|
29
|
+
it 'returns the correct status' do
|
30
|
+
allow(Roqua::StatusChecks::CheckLoadBalancerMember).to receive(:balancer_member?).and_return(true)
|
31
|
+
allow(Roqua::StatusChecks::CheckDbConnection).to receive(:connected?).and_return(false)
|
32
|
+
|
33
|
+
get :balancer_status
|
34
|
+
|
35
|
+
expect(response.status).to eq(503)
|
36
|
+
expect(response.body).to eq("{\"status\":\"error\",\"member\":true}")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'visiting the status page while not balancer member and database is down' do
|
41
|
+
it 'returns the correct status' do
|
42
|
+
allow(Roqua::StatusChecks::CheckLoadBalancerMember).to receive(:balancer_member?).and_return(false)
|
43
|
+
allow(Roqua::StatusChecks::CheckDbConnection).to receive(:connected?).and_return(false)
|
44
|
+
|
45
|
+
get :balancer_status
|
46
|
+
|
47
|
+
expect(response.status).to eq(503)
|
48
|
+
expect(response.body).to eq("{\"status\":\"error\",\"member\":false}")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'visiting the status page while balancer_state is on nor off' do
|
53
|
+
it 'returns the correct status' do
|
54
|
+
allow(Roqua::StatusChecks::CheckLoadBalancerMember).to receive(:balancer_member?)
|
55
|
+
.and_raise(Roqua::StatusChecks::CheckLoadBalancerMember::InvalidStatus)
|
56
|
+
|
57
|
+
get :balancer_status
|
58
|
+
|
59
|
+
expect(response.status).to eq(500)
|
60
|
+
expect(response.body).to eq("{\"status\":\"unknown status\"}")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roqua-support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marten Veldthuis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_interaction
|
@@ -221,6 +221,9 @@ files:
|
|
221
221
|
- lib/roqua/scheduling/schedule.rb
|
222
222
|
- lib/roqua/scheduling/scheduler.rb
|
223
223
|
- lib/roqua/scheduling/task.rb
|
224
|
+
- lib/roqua/status_checks/check_db_connection.rb
|
225
|
+
- lib/roqua/status_checks/check_load_balancer_member.rb
|
226
|
+
- lib/roqua/status_checks/status_controller.rb
|
224
227
|
- lib/roqua/support.rb
|
225
228
|
- lib/roqua/support/command_runner.rb
|
226
229
|
- lib/roqua/support/errors.rb
|
@@ -231,6 +234,8 @@ files:
|
|
231
234
|
- lib/roqua/support/stats/hosted_graphite_backend.rb
|
232
235
|
- lib/roqua/validators/subset_validator.rb
|
233
236
|
- roqua-support.gemspec
|
237
|
+
- spec/internal/config/balancer_state
|
238
|
+
- spec/internal/config/routes.rb
|
234
239
|
- spec/roqua/core_ext/active_interaction/date_time_as_unix_extension_spec.rb
|
235
240
|
- spec/roqua/core_ext/active_interaction/duration_filter_spec.rb
|
236
241
|
- spec/roqua/core_ext/active_interaction/rails_intrumentation_spec.rb
|
@@ -244,6 +249,9 @@ files:
|
|
244
249
|
- spec/roqua/responders/active_interaction_aware_responder_spec.rb
|
245
250
|
- spec/roqua/responders/api_errors_responder_spec.rb
|
246
251
|
- spec/roqua/scheduling/scheduler_spec.rb
|
252
|
+
- spec/roqua/status_checks/check_db_connection_spec.rb
|
253
|
+
- spec/roqua/status_checks/check_load_balancer_member_spec.rb
|
254
|
+
- spec/roqua/status_checks/status_controller_spec.rb
|
247
255
|
- spec/roqua/support/errors_spec.rb
|
248
256
|
- spec/roqua/support/helpers_spec.rb
|
249
257
|
- spec/roqua/support/logwrapper_spec.rb
|
@@ -273,11 +281,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
273
281
|
version: '0'
|
274
282
|
requirements: []
|
275
283
|
rubyforge_project:
|
276
|
-
rubygems_version: 2.5.2
|
284
|
+
rubygems_version: 2.5.2
|
277
285
|
signing_key:
|
278
286
|
specification_version: 4
|
279
287
|
summary: Helper objects and proxies used by a lot of RoQua applications
|
280
288
|
test_files:
|
289
|
+
- spec/internal/config/balancer_state
|
290
|
+
- spec/internal/config/routes.rb
|
281
291
|
- spec/roqua/core_ext/active_interaction/date_time_as_unix_extension_spec.rb
|
282
292
|
- spec/roqua/core_ext/active_interaction/duration_filter_spec.rb
|
283
293
|
- spec/roqua/core_ext/active_interaction/rails_intrumentation_spec.rb
|
@@ -291,6 +301,9 @@ test_files:
|
|
291
301
|
- spec/roqua/responders/active_interaction_aware_responder_spec.rb
|
292
302
|
- spec/roqua/responders/api_errors_responder_spec.rb
|
293
303
|
- spec/roqua/scheduling/scheduler_spec.rb
|
304
|
+
- spec/roqua/status_checks/check_db_connection_spec.rb
|
305
|
+
- spec/roqua/status_checks/check_load_balancer_member_spec.rb
|
306
|
+
- spec/roqua/status_checks/status_controller_spec.rb
|
294
307
|
- spec/roqua/support/errors_spec.rb
|
295
308
|
- spec/roqua/support/helpers_spec.rb
|
296
309
|
- spec/roqua/support/logwrapper_spec.rb
|