health_check 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|