health_rails 0.0.1
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.
- data/.gitignore +4 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/Rakefile +6 -0
- data/app/controllers/health_rails/health_controller.rb +11 -0
- data/config/routes.rb +3 -0
- data/health_rails.gemspec +23 -0
- data/lib/health_rails.rb +5 -0
- data/lib/health_rails/engine.rb +7 -0
- data/lib/health_rails/health_check.rb +51 -0
- data/lib/health_rails/health_checks/active_record_health_check.rb +12 -0
- data/lib/health_rails/version.rb +3 -0
- data/spec/health_check_spec.rb +75 -0
- data/spec/health_checks/active_record_health_check_spec.rb +14 -0
- data/spec/spec_helper.rb +6 -0
- metadata +96 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm 1.9.2@health_rails --create
|
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
class HealthRails::HealthController < ApplicationController
|
2
|
+
# GET /health
|
3
|
+
def index
|
4
|
+
health_check = HealthRails::HealthCheck.new
|
5
|
+
if health_check.all_ok?
|
6
|
+
render text: "All OK"
|
7
|
+
else
|
8
|
+
render text: health_check.error_messages, status: :service_unavailable
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/config/routes.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "health_rails/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "health_rails"
|
7
|
+
s.version = HealthRails::VERSION
|
8
|
+
s.authors = ["Daniel Spangenberg"]
|
9
|
+
s.email = ["daniel.spangenberg@parcydo.com"]
|
10
|
+
s.homepage = "http://github.com/parcydo/health_rails"
|
11
|
+
s.summary = %q{Health rails provides your rails app a simple password protected health status page for other web services.}
|
12
|
+
s.description = %q{Health rails gives you some default checks and a DSL for defining your own checks.}
|
13
|
+
|
14
|
+
s.add_development_dependency "rails"
|
15
|
+
s.add_development_dependency "rspec"
|
16
|
+
|
17
|
+
s.rubyforge_project = "health_rails"
|
18
|
+
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
end
|
data/lib/health_rails.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
module HealthRails
|
2
|
+
class HealthCheck
|
3
|
+
class HealthCheckFailure < Exception
|
4
|
+
end
|
5
|
+
|
6
|
+
def all_ok?
|
7
|
+
process_checks
|
8
|
+
!errors.any?
|
9
|
+
end
|
10
|
+
|
11
|
+
def error_messages
|
12
|
+
errors.join("\n")
|
13
|
+
end
|
14
|
+
|
15
|
+
def errors
|
16
|
+
@errors ||= []
|
17
|
+
end
|
18
|
+
|
19
|
+
def process_check(description)
|
20
|
+
begin
|
21
|
+
HealthCheck.check(description).call
|
22
|
+
rescue HealthCheckFailure => error_message
|
23
|
+
errors << "#{description}: #{error_message}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def process_checks
|
28
|
+
HealthCheck.checks.each do |description, proc|
|
29
|
+
process_check(description)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class << self
|
34
|
+
|
35
|
+
def check(description, &block)
|
36
|
+
if block.nil?
|
37
|
+
checks[description]
|
38
|
+
else
|
39
|
+
checks[description] = block
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def checks
|
44
|
+
@@checks ||= {}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Load all health checks
|
51
|
+
Dir["#{File.dirname(__FILE__)}/health_checks/**/*.rb"].each { |f| require f }
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
module HealthRails
|
4
|
+
class HealthCheck
|
5
|
+
check "ActiveRecord connection" do
|
6
|
+
active_record_connection = ActiveRecord::Base.connection
|
7
|
+
unless active_record_connection.active?
|
8
|
+
raise HealthCheckFailure, "#{active_record_connection.adapter_name} connection is gone from us!"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module HealthRails
|
4
|
+
describe HealthCheck do
|
5
|
+
let(:health_check) { HealthRails::HealthCheck.new }
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
HealthRails::HealthCheck.stub(:checks).and_return({})
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "run all checks and return status" do
|
12
|
+
it "fails" do
|
13
|
+
HealthRails::HealthCheck.check("Failing") do
|
14
|
+
raise HealthRails::HealthCheck::HealthCheckFailure, "Exception"
|
15
|
+
end
|
16
|
+
HealthRails::HealthCheck.check("Passing") do
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
health_check.all_ok?.should be(false)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "passes" do
|
23
|
+
HealthRails::HealthCheck.check("Passing 1") do
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
HealthRails::HealthCheck.check("Passing 2") do
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
health_check.all_ok?.should be(true)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
it "push check in checks hash" do
|
34
|
+
block = lambda {}
|
35
|
+
HealthRails::HealthCheck.check("Foo Bar", &block)
|
36
|
+
HealthRails::HealthCheck.checks.size.should be(1)
|
37
|
+
HealthRails::HealthCheck.check("Foo Bar").should be(block)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "join error messages" do
|
41
|
+
health_check.stub(:errors).and_return(["Foo", "Bar", "Baz"])
|
42
|
+
health_check.error_messages.should eql("Foo\nBar\nBaz")
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "process check" do
|
46
|
+
it "pushes error on exception" do
|
47
|
+
HealthRails::HealthCheck.check("Foo Bar") do
|
48
|
+
raise HealthRails::HealthCheck::HealthCheckFailure, "Exception"
|
49
|
+
end
|
50
|
+
health_check.process_check("Foo Bar")
|
51
|
+
health_check.errors.size.should be(1)
|
52
|
+
health_check.errors.first.should eql("Foo Bar: Exception")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "process checks" do
|
57
|
+
it "run process check on each" do
|
58
|
+
HealthRails::HealthCheck.check("Foo") do
|
59
|
+
raise HealthRails::HealthCheck::HealthCheckFailure, "Exception"
|
60
|
+
end
|
61
|
+
HealthRails::HealthCheck.check("Bar") do
|
62
|
+
raise HealthRails::HealthCheck::HealthCheckFailure, "Exception"
|
63
|
+
end
|
64
|
+
HealthRails::HealthCheck.check("Baz") do
|
65
|
+
nil
|
66
|
+
end
|
67
|
+
health_check.process_checks
|
68
|
+
health_check.errors.size.should be(2)
|
69
|
+
health_check.errors.first.should eql("Foo: Exception")
|
70
|
+
health_check.errors.last.should eql("Bar: Exception")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'active_record'
|
3
|
+
|
4
|
+
describe "active record health check" do
|
5
|
+
let(:health_check) { HealthRails::HealthCheck.new }
|
6
|
+
|
7
|
+
it "raise exception if connection is not active" do
|
8
|
+
foo_bar_adapter = mock("ActiveRecord::ConnectionAdapters::FooBarAdapter", active?: false, adapter_name: "FooBar")
|
9
|
+
ActiveRecord::Base.stub(:connection).and_return(foo_bar_adapter)
|
10
|
+
health_check.process_check("ActiveRecord connection")
|
11
|
+
health_check.errors.size.should be(1)
|
12
|
+
health_check.errors.first.should eql("ActiveRecord connection: FooBar connection is gone from us!")
|
13
|
+
end
|
14
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: health_rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daniel Spangenberg
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-07-27 00:00:00.000000000 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rails
|
17
|
+
requirement: &2164618080 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *2164618080
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: rspec
|
28
|
+
requirement: &2164617500 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *2164617500
|
37
|
+
description: Health rails gives you some default checks and a DSL for defining your
|
38
|
+
own checks.
|
39
|
+
email:
|
40
|
+
- daniel.spangenberg@parcydo.com
|
41
|
+
executables: []
|
42
|
+
extensions: []
|
43
|
+
extra_rdoc_files: []
|
44
|
+
files:
|
45
|
+
- .gitignore
|
46
|
+
- .rspec
|
47
|
+
- .rvmrc
|
48
|
+
- Gemfile
|
49
|
+
- Rakefile
|
50
|
+
- app/controllers/health_rails/health_controller.rb
|
51
|
+
- config/routes.rb
|
52
|
+
- health_rails.gemspec
|
53
|
+
- lib/health_rails.rb
|
54
|
+
- lib/health_rails/engine.rb
|
55
|
+
- lib/health_rails/health_check.rb
|
56
|
+
- lib/health_rails/health_checks/active_record_health_check.rb
|
57
|
+
- lib/health_rails/version.rb
|
58
|
+
- spec/health_check_spec.rb
|
59
|
+
- spec/health_checks/active_record_health_check_spec.rb
|
60
|
+
- spec/spec_helper.rb
|
61
|
+
has_rdoc: true
|
62
|
+
homepage: http://github.com/parcydo/health_rails
|
63
|
+
licenses: []
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options: []
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
hash: -1905505185732161742
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
segments:
|
84
|
+
- 0
|
85
|
+
hash: -1905505185732161742
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project: health_rails
|
88
|
+
rubygems_version: 1.6.2
|
89
|
+
signing_key:
|
90
|
+
specification_version: 3
|
91
|
+
summary: Health rails provides your rails app a simple password protected health status
|
92
|
+
page for other web services.
|
93
|
+
test_files:
|
94
|
+
- spec/health_check_spec.rb
|
95
|
+
- spec/health_checks/active_record_health_check_spec.rb
|
96
|
+
- spec/spec_helper.rb
|