health_check 1.1.2 → 1.2.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.
- data/.gitignore +5 -0
- data/.travis.yml +52 -41
- data/CHANGELOG +4 -0
- data/README.rdoc +81 -18
- data/config/routes.rb +4 -2
- data/health_check.gemspec +1 -1
- data/lib/health_check.rb +28 -0
- data/lib/health_check/add_23_routes.rb +12 -7
- data/lib/health_check/health_check_controller.rb +16 -42
- data/lib/health_check/utils.rb +51 -27
- data/lib/health_check/version.rb +1 -1
- data/test/init_variables +60 -0
- data/{rails2_3.gemfile → test/rails_2.3.gemfile} +8 -1
- data/{rails3_0.gemfile → test/rails_3.0.gemfile} +0 -1
- data/{rails3_1.gemfile → test/rails_3.1.gemfile} +0 -1
- data/{rails3_2.gemfile → test/rails_3.2.gemfile} +0 -1
- data/{rails_edge.gemfile → test/rails_4.0-beta.gemfile} +4 -5
- data/test/setup_railsapp +258 -0
- data/test/test_with_railsapp +100 -177
- data/test/testurl +39 -12
- metadata +25 -18
- data/rails1_2.gemfile +0 -12
data/lib/health_check/utils.rb
CHANGED
@@ -4,30 +4,54 @@
|
|
4
4
|
module HealthCheck
|
5
5
|
class Utils
|
6
6
|
|
7
|
-
@@
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
@@default_smtp_settings =
|
8
|
+
{
|
9
|
+
:address => "localhost",
|
10
|
+
:port => 25,
|
11
|
+
:domain => 'localhost.localdomain',
|
12
|
+
:user_name => nil,
|
13
|
+
:password => nil,
|
14
|
+
:authentication => nil,
|
15
|
+
:enable_starttls_auto => true,
|
16
|
+
}
|
14
17
|
|
15
|
-
|
18
|
+
cattr_accessor :default_smtp_settings
|
16
19
|
|
17
|
-
cattr_accessor :error_status_code
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
def self.process_checks(checks)
|
22
|
+
errors = ''
|
23
|
+
checks.split('_').each do |check|
|
24
|
+
case check
|
25
|
+
when 'and', 'site'
|
26
|
+
# do nothing
|
27
|
+
when "database"
|
28
|
+
HealthCheck::Utils.get_database_version
|
29
|
+
when "email"
|
30
|
+
errors << HealthCheck::Utils.check_email
|
31
|
+
when "migrations", "migration"
|
32
|
+
database_version = HealthCheck::Utils.get_database_version
|
33
|
+
migration_version = HealthCheck::Utils.get_migration_version
|
34
|
+
if database_version.to_i != migration_version.to_i
|
35
|
+
errors << "Current database version (#{database_version}) does not match latest migration (#{migration_version}). "
|
36
|
+
end
|
37
|
+
when 'cache'
|
38
|
+
errors << HealthCheck::Utils.check_cache
|
39
|
+
when "standard"
|
40
|
+
errors << HealthCheck::Utils.process_checks("database_migrations_custom")
|
41
|
+
errors << HealthCheck::Utils.process_checks("email") unless HealthCheck::Utils.default_action_mailer_configuration?
|
42
|
+
when "custom"
|
43
|
+
HealthCheck.custom_checks.each do |custom_check|
|
44
|
+
errors << custom_check.call(self)
|
45
|
+
end
|
46
|
+
when "all", "full"
|
47
|
+
errors << HealthCheck::Utils.process_checks("database_migrations_custom_email_cache")
|
48
|
+
else
|
49
|
+
return "invalid argument to health_test. "
|
50
|
+
end
|
51
|
+
end
|
52
|
+
return errors
|
53
|
+
end
|
29
54
|
|
30
|
-
cattr_accessor :default_smtp_settings
|
31
55
|
|
32
56
|
def self.db_migrate_path
|
33
57
|
# Lazy initialisation so Rails.root will be defined
|
@@ -57,12 +81,12 @@ module HealthCheck
|
|
57
81
|
|
58
82
|
def self.check_email
|
59
83
|
case ActionMailer::Base.delivery_method
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
84
|
+
when :smtp
|
85
|
+
HealthCheck::Utils.check_smtp(ActionMailer::Base.smtp_settings, HealthCheck.smtp_timeout)
|
86
|
+
when :sendmail
|
87
|
+
HealthCheck::Utils.check_sendmail(ActionMailer::Base.sendmail_settings)
|
88
|
+
else
|
89
|
+
''
|
66
90
|
end
|
67
91
|
end
|
68
92
|
|
@@ -95,7 +119,7 @@ module HealthCheck
|
|
95
119
|
end
|
96
120
|
end
|
97
121
|
end
|
98
|
-
rescue
|
122
|
+
rescue Errno::EBADF => ex
|
99
123
|
status = "Unable to connect to service"
|
100
124
|
rescue Exception => ex
|
101
125
|
status = ex.to_s
|
data/lib/health_check/version.rb
CHANGED
data/test/init_variables
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# Any failure causes exit
|
4
|
+
set -e
|
5
|
+
|
6
|
+
echo Setting RAILS_ENV=test RACK_ENV=test
|
7
|
+
export RAILS_ENV=test RACK_ENV=test
|
8
|
+
|
9
|
+
base_dir=$PWD
|
10
|
+
tmp_dir=$base_dir/tmp
|
11
|
+
railsapp=$tmp_dir/railsapp
|
12
|
+
custom_file="$railsapp/tmp/custom_check.ok"
|
13
|
+
success=successful
|
14
|
+
|
15
|
+
rehash=''
|
16
|
+
rbenv_which='which'
|
17
|
+
|
18
|
+
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
|
19
|
+
echo "Detected user installed rvm"
|
20
|
+
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
|
21
|
+
echo "Detected root installed rvm"
|
22
|
+
elif [[ -d "$HOME/.rbenv" ]] ; then
|
23
|
+
echo "Detected rbenv: `rbenv version`"
|
24
|
+
rehash='rbenv rehash'
|
25
|
+
rbenv_which='rbenv which'
|
26
|
+
else
|
27
|
+
printf "Note: Neither rvm nor rbenv was not found.\n"
|
28
|
+
fi
|
29
|
+
|
30
|
+
echo "Checking required commands exist:"
|
31
|
+
for cmd in bash gem egrep ls tail kill find cpio
|
32
|
+
do
|
33
|
+
echo -n " "
|
34
|
+
which $cmd || ( echo "Aborting setup_railsapp: Missing $cmd command!" && exit 2 )
|
35
|
+
done
|
36
|
+
for cmd in ruby gem
|
37
|
+
do
|
38
|
+
echo -n " "
|
39
|
+
$rbenv_which $cmd || ( echo "Aborting setup_railsapp: Missing $cmd command!" && exit 2 )
|
40
|
+
done
|
41
|
+
|
42
|
+
rails="rails"
|
43
|
+
rake="rake"
|
44
|
+
|
45
|
+
if [ -x $base_dir/test/bin/rails ]
|
46
|
+
then
|
47
|
+
rails="$base_dir/test/bin/rails"
|
48
|
+
rake="$base_dir/test/bin/rake"
|
49
|
+
export PATH="$base_dir/test/bin:$PATH"
|
50
|
+
fi
|
51
|
+
|
52
|
+
if [ -x $railsapp/bin/rails ]
|
53
|
+
then
|
54
|
+
rails="$railsapp/bin/rails"
|
55
|
+
rake="$railsapp/bin/rake"
|
56
|
+
export PATH="$railsapp/bin:$PATH"
|
57
|
+
fi
|
58
|
+
|
59
|
+
echo "Using rails=$rails, rake=$rake"
|
60
|
+
|
@@ -2,9 +2,17 @@
|
|
2
2
|
|
3
3
|
source 'https://rubygems.org'
|
4
4
|
|
5
|
+
# Last rubygems version before 2.0.0 (which breaks rails 2.3)
|
6
|
+
#rubygems 1.8.25
|
7
|
+
|
8
|
+
ruby "1.8.7"
|
9
|
+
|
5
10
|
gem 'rails', "~> 2.3.15"
|
6
11
|
# rails requires rake >= 0.8.3
|
7
12
|
|
13
|
+
gem 'rdoc'
|
14
|
+
gem 'rdoc-data'
|
15
|
+
|
8
16
|
group :development, :test do
|
9
17
|
if defined?(JRUBY_VERSION)
|
10
18
|
gem 'jruby-openssl'
|
@@ -12,6 +20,5 @@ group :development, :test do
|
|
12
20
|
else
|
13
21
|
gem 'sqlite3', "~> 1.3.7"
|
14
22
|
end
|
15
|
-
gem 'jeweler', '~> 1.8.4'
|
16
23
|
gem 'shoulda', "~> 2.11.0"
|
17
24
|
end
|
@@ -4,11 +4,11 @@ source 'https://rubygems.org'
|
|
4
4
|
|
5
5
|
# Bundle edge Rails instead:
|
6
6
|
|
7
|
-
|
7
|
+
ruby "1.9.3" if RUBY_VERSION < '1.9'
|
8
8
|
|
9
|
-
gem '
|
10
|
-
|
11
|
-
gem "rack", '~> 1.
|
9
|
+
gem 'rails', "~> 4.0.0.beta1"
|
10
|
+
gem 'rake', '>= 0.8.3'
|
11
|
+
gem "rack", '~> 1.5.2'
|
12
12
|
|
13
13
|
group :development, :test do
|
14
14
|
if defined?(JRUBY_VERSION)
|
@@ -17,6 +17,5 @@ group :development, :test do
|
|
17
17
|
else
|
18
18
|
gem 'sqlite3', "~> 1.3.7"
|
19
19
|
end
|
20
|
-
gem 'jeweler'
|
21
20
|
gem 'shoulda'
|
22
21
|
end
|
data/test/setup_railsapp
ADDED
@@ -0,0 +1,258 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# Any failure causes exit
|
4
|
+
set -e
|
5
|
+
|
6
|
+
while :
|
7
|
+
do
|
8
|
+
case "$BUNDLE_GEMFILE" in
|
9
|
+
*/test/rails_[Qq].gemfile)
|
10
|
+
echo "Aborting..."
|
11
|
+
exit 2
|
12
|
+
;;
|
13
|
+
*/test/rails_[0-9].[0-9]*.gemfile)
|
14
|
+
if [ -f "$BUNDLE_GEMFILE" ]; then
|
15
|
+
break
|
16
|
+
fi
|
17
|
+
;;
|
18
|
+
esac
|
19
|
+
echo "== SELECT GEMFILE =="
|
20
|
+
echo
|
21
|
+
echo "Please select the gemfile for the required rails series:"
|
22
|
+
(cd test ; ls rails*gemfile | ruby -p -e '$_.sub!(/rails_(.*).gemfile/, " \\1")' )
|
23
|
+
echo
|
24
|
+
echo -n "Enter choice (or q to quit): "
|
25
|
+
read x
|
26
|
+
export BUNDLE_GEMFILE=$PWD/test/rails_$x.gemfile
|
27
|
+
done
|
28
|
+
|
29
|
+
rm -rf tmp/Gemfile* tmp/railsapp tmp/bin tmp/gems test/bin test/rails*.gemfile.lock
|
30
|
+
|
31
|
+
mkdir -p tmp/gems
|
32
|
+
|
33
|
+
. test/init_variables
|
34
|
+
|
35
|
+
if $rbenv_which bundle ; then
|
36
|
+
echo Bundler is installed
|
37
|
+
else
|
38
|
+
gem install bundler
|
39
|
+
$rehash
|
40
|
+
fi
|
41
|
+
|
42
|
+
echo "Running bundle --binstubs with BUNDLE_GEMFILE=$BUNDLE_GEMFILE ..."
|
43
|
+
if ! bundle --binstubs ; then
|
44
|
+
echo "Test aborted (missing required gems)"
|
45
|
+
exit 2
|
46
|
+
fi
|
47
|
+
$rehash
|
48
|
+
|
49
|
+
rails="$base_dir/test/bin/rails"
|
50
|
+
rake="$base_dir/test/bin/rake"
|
51
|
+
|
52
|
+
actual_rails_version=`$rails -v`
|
53
|
+
|
54
|
+
[ -d lib/health_check ] || exec echo setup_railsapp MUST be executed in the base of the health_check gem/clone of git repository
|
55
|
+
|
56
|
+
echo Installing health_check as a gem into tmp/gems
|
57
|
+
env GEM_HOME=$tmp_dir/gems rake install
|
58
|
+
|
59
|
+
export GEM_PATH="$tmp_dir/gems:`gem environment gempath`"
|
60
|
+
echo Set GEM_PATH=$GEM_PATH
|
61
|
+
|
62
|
+
echo Gems in tmp/gems:
|
63
|
+
ls tmp/gems
|
64
|
+
|
65
|
+
echo Environment:
|
66
|
+
env | egrep 'TRAVIS|RAILS|RUBY|_ENV|GEM|BUNDLE'
|
67
|
+
|
68
|
+
cd $tmp_dir
|
69
|
+
|
70
|
+
case `ruby -e 'puts JRUBY_VERSION' 2> /dev/null` in
|
71
|
+
[0-9]*)
|
72
|
+
db=jdbcsqlite3
|
73
|
+
# Appears to need a bit extra time
|
74
|
+
;;
|
75
|
+
*)
|
76
|
+
db=sqlite3
|
77
|
+
;;
|
78
|
+
esac
|
79
|
+
|
80
|
+
echo "Creating $actual_rails_version app in $tmp_dir/railsapp using adapter $db"
|
81
|
+
case "$actual_rails_version" in
|
82
|
+
*' '[12].*)
|
83
|
+
$rails railsapp -d $db
|
84
|
+
;;
|
85
|
+
*' '[34].*)
|
86
|
+
$rails new railsapp -d $db
|
87
|
+
;;
|
88
|
+
*)
|
89
|
+
echo "Unknown rails version"
|
90
|
+
;;
|
91
|
+
esac
|
92
|
+
|
93
|
+
cd $railsapp
|
94
|
+
|
95
|
+
[ -z "$rehash" ] || rbenv local `rbenv version-name`
|
96
|
+
|
97
|
+
echo "Changed current directory to railsapp root: $railsapp"
|
98
|
+
|
99
|
+
echo "Fixing rdoc require in Rakefile if needed"
|
100
|
+
ruby -p -i.bak -e '$_.gsub!(/rake.rdoctask/, "rdoc/task")' Rakefile
|
101
|
+
|
102
|
+
echo "Configuring mailer to point to fake_smtp_server port 3555"
|
103
|
+
cat >> config/environment.rb <<'!EOF!'
|
104
|
+
|
105
|
+
ActionMailer::Base.delivery_method = :smtp
|
106
|
+
ActionMailer::Base.smtp_settings = { :address => "localhost", :port => 3555 }
|
107
|
+
|
108
|
+
!EOF!
|
109
|
+
|
110
|
+
echo Adding an initializer for health_check gem ...
|
111
|
+
mkdir -p config/initializers
|
112
|
+
tee config/initializers/health_check.rb <<!
|
113
|
+
HealthCheck.setup do |config|
|
114
|
+
config.success = "$success"
|
115
|
+
config.smtp_timeout = 60.0
|
116
|
+
config.http_status_for_error_text = 550
|
117
|
+
config.http_status_for_error_object = 555
|
118
|
+
|
119
|
+
config.add_custom_check do
|
120
|
+
File.exists?("$custom_file") ? '' : '$custom_file is missing!'
|
121
|
+
end
|
122
|
+
end
|
123
|
+
!
|
124
|
+
|
125
|
+
echo "Last ten lines of config/environment.rb:"
|
126
|
+
tail -10 config/environment.rb
|
127
|
+
echo
|
128
|
+
|
129
|
+
echo Unsetting BUNDLE_GEMFILE '(so Gemfile for rails application will be used)'
|
130
|
+
unset BUNDLE_GEMFILE
|
131
|
+
|
132
|
+
if [ -s Gemfile ]
|
133
|
+
then
|
134
|
+
echo Adding health_check as gem to Gemfile...
|
135
|
+
echo "gem 'health_check', :path => '$base_dir'" >> Gemfile
|
136
|
+
|
137
|
+
echo
|
138
|
+
echo Gemfile contents:
|
139
|
+
cat Gemfile
|
140
|
+
echo
|
141
|
+
echo running bundle install --binstubs
|
142
|
+
bundle install --binstubs
|
143
|
+
case "$actual_rails_version" in
|
144
|
+
*' '4.*)
|
145
|
+
echo "Running rake rails:update:binstubs to fix up binstubs bundle has overwritten"
|
146
|
+
echo a | rake rails:update:bin
|
147
|
+
;;
|
148
|
+
esac
|
149
|
+
$rehash
|
150
|
+
echo "Using binstubs in $railsapp/bin for rails and rake commands"
|
151
|
+
rails="$railsapp/bin/rails"
|
152
|
+
rake="$railsapp/bin/rake"
|
153
|
+
# Fix for rvm, otherwise bundle run from rails create fails
|
154
|
+
export PATH="`pwd`/bin:$PATH"
|
155
|
+
else
|
156
|
+
dest=$railsapp/vendor/plugins/health_check
|
157
|
+
echo Installing health_check as plugin in $dest ...
|
158
|
+
mkdir -p $dest
|
159
|
+
(
|
160
|
+
cd $base_dir
|
161
|
+
|
162
|
+
git ls-files | cpio -pdl $dest
|
163
|
+
|
164
|
+
cd $dest
|
165
|
+
|
166
|
+
echo Files installed as plugin:
|
167
|
+
find . -type f
|
168
|
+
echo
|
169
|
+
)
|
170
|
+
fi
|
171
|
+
|
172
|
+
echo Setting RAILS_ENV=test RACK_ENV=test
|
173
|
+
export RAILS_ENV=test RACK_ENV=test
|
174
|
+
|
175
|
+
case $db in
|
176
|
+
jdbcsqlite3)
|
177
|
+
echo
|
178
|
+
echo 'Jruby requires the database to be created before the server is started: running rake db:migrate'
|
179
|
+
$rake db:migrate
|
180
|
+
echo
|
181
|
+
;;
|
182
|
+
esac
|
183
|
+
|
184
|
+
cat > public/ajax_example.html <<'EOF'
|
185
|
+
<html>
|
186
|
+
<head>
|
187
|
+
<title>Example static and dynamic calls to health_check</title>
|
188
|
+
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
|
189
|
+
<script>
|
190
|
+
function parse_result(result, callback) {
|
191
|
+
$("#html_status_"+callback).text(result.status);
|
192
|
+
$("#html_body_"+callback).text(result.responseText);
|
193
|
+
alert(callback + " callback called");
|
194
|
+
};
|
195
|
+
|
196
|
+
function dynamic_call(dataType, url) {
|
197
|
+
$.ajax({
|
198
|
+
dataType: dataType,
|
199
|
+
url: url,
|
200
|
+
success: function(data, textStatus, result) {
|
201
|
+
$("#data_success").text(data);
|
202
|
+
parse_result(result, "success");
|
203
|
+
},
|
204
|
+
error: function(result, textStatus) {
|
205
|
+
parse_result(result, "error");
|
206
|
+
},
|
207
|
+
complete: function(result, textStatus) {
|
208
|
+
parse_result(result, "complete");
|
209
|
+
}
|
210
|
+
});
|
211
|
+
};
|
212
|
+
</script>
|
213
|
+
</head>
|
214
|
+
<body>
|
215
|
+
<h1>Static calls</h1>
|
216
|
+
<ul>
|
217
|
+
<li><a href="http://localhost:3000/health_check/site" target="_blank">Minimal health check should always work</a>
|
218
|
+
(<a href="http://localhost:3000/health_check/site.json" target="_blank">json</a>,
|
219
|
+
<a href="http://localhost:3000/health_check/site.xml" target="_blank">xml</a>,
|
220
|
+
<a href="http://localhost:3000/health_check/site.html" target="_blank">html</a>)
|
221
|
+
<li><a href="http://localhost:3000/health_check/fail" target="_blank">Force health check to fail!</a>
|
222
|
+
(<a href="http://localhost:3000/health_check/fail.json" target="_blank">json</a>,
|
223
|
+
<a href="http://localhost:3000/health_check/fail.xml" target="_blank">xml</a>,
|
224
|
+
<a href="http://localhost:3000/health_check/fail.html" target="_blank">html</a>)
|
225
|
+
</ul>
|
226
|
+
<h1>Dynamic calls</h1>
|
227
|
+
<ul>
|
228
|
+
<li><a href="#" onclick="dynamic_call('text', 'http://localhost:3000/health_check/site');">Minimal health check should always work</a>
|
229
|
+
(<a href="#" onclick="dynamic_call('json', 'http://localhost:3000/health_check/site.json');">json</a>,
|
230
|
+
<a href="#" onclick="dynamic_call('site', 'http://localhost:3000/health_check/site.xml');">xml</a>,
|
231
|
+
<a href="#" onclick="dynamic_call('text', 'http://localhost:3000/health_check/site.html');">html</a>)
|
232
|
+
|
233
|
+
<li><a href="#" onclick="dynamic_call('text', 'http://localhost:3000/health_check/fail');">Force health check to fail!</a>
|
234
|
+
(<a href="#" onclick="dynamic_call('json', 'http://localhost:3000/health_check/fail.json');">json</a>,
|
235
|
+
<a href="#" onclick="dynamic_call('site', 'http://localhost:3000/health_check/fail.xml');">xml</a>,
|
236
|
+
<a href="#" onclick="dynamic_call('text', 'http://localhost:3000/health_check/fail.html');">html</a>)
|
237
|
+
<li>Last results sent to success:<ul>
|
238
|
+
<li><b>Data:</b><span id=data_success></span>
|
239
|
+
<li><b>result.status:</b><span id=html_status_success></span>
|
240
|
+
<li><b>result.responseText:</b><span id=html_body_success></span>
|
241
|
+
</ul>
|
242
|
+
<li>Last results sent to error:<ul>
|
243
|
+
<li><b>result.status:</b><span id=html_status_error></span>
|
244
|
+
<li><b>result.responseText:</b><span id=html_body_error></span>
|
245
|
+
</ul>
|
246
|
+
<li>Last results sent to complete:<ul>
|
247
|
+
<li><b>result.status:</b><span id=html_status_complete></span>
|
248
|
+
<li><b>result.responseText:</b><span id=html_body_complete></span>
|
249
|
+
</ul>
|
250
|
+
</ul>
|
251
|
+
</body>
|
252
|
+
</html>
|
253
|
+
EOF
|
254
|
+
|
255
|
+
echo
|
256
|
+
echo "Created $actual_rails_version app in $railsapp using adapter $db"
|
257
|
+
echo -n "Using "
|
258
|
+
ruby --version
|