rails_health_check 3.0.0 → 3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ece3b0c5fed38d6c9ccc1e60600284733553b5ae6caa8eaa40f4da34b1cf0339
4
- data.tar.gz: 146bc1328a9f22300105500be926fe1d3cb982ae0f7410cfc725fa961e66062c
3
+ metadata.gz: 4569367e3c910ab49259c4744fff38cc16a741696462f56526db2a20b6e35993
4
+ data.tar.gz: 28de3529ecc64a42d682d52880597f8e0dd4a7f574543dac40c60955fcfbe3bf
5
5
  SHA512:
6
- metadata.gz: 8cd5439d276daf70a246f73d17df6fc5768881360018a488b5804149ddee18d384da602aaa99080f7ac715517a86bd83f3425165b1e5bd1c3126ae695d72c3f9
7
- data.tar.gz: e7e76f22b9f8a6fe74d8b3fcbb3e4cc072ea2186cfb55d9b8a0d7a3b89b4b9af6b14a588a7266fe6d5146f11e86a07a0e2e8bc037d364da5b5cd8f5cf19d3396
6
+ metadata.gz: 884d6565824e9e9ae2d57b4fc5e5a6ec7f74a4cdcaed9f00360e220d788c7a13e9a6a2725e05efd41b0ece8397f95f2f2ca27d60d46488d204096eccc959bda6
7
+ data.tar.gz: 5c15d9b7a2bf2108fdcf64b46a67e15b860e870f25a7b17177675ad6fefaa629e12f4fe2f46f9542fc0741d83fb5a5687111ea3fab7b0423e18eabd82c8749f2
data/.rubocop.yml ADDED
@@ -0,0 +1,5 @@
1
+ ---
2
+ Metrics/LineLength:
3
+ Enabled: false
4
+ Style/Documentation:
5
+ Enabled: false
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in health_check.gemspec
@@ -6,8 +8,8 @@ gemspec
6
8
 
7
9
  group :development, :test do
8
10
  if defined?(JRUBY_VERSION)
9
- gem 'jruby-openssl'
10
11
  gem 'activerecord-jdbcsqlite3-adapter'
12
+ gem 'jruby-openssl'
11
13
  else
12
14
  gem 'sqlite3', '~> 1.3.7'
13
15
  end
@@ -16,5 +18,4 @@ group :development, :test do
16
18
  # mime-types 2.0 requires Ruby version >= 1.9.2
17
19
  # mime-types 3.0 requires Ruby version >= 2.0
18
20
  gem 'mime-types', defined?(JRUBY_VERSION) || RUBY_VERSION < '2.0' ? '< 3' : '>= 3.0'
19
-
20
21
  end
data/Rakefile CHANGED
@@ -1,14 +1,16 @@
1
- require "bundler/gem_tasks"
1
+ # frozen_string_literal: true
2
2
 
3
- #require 'rubygems'
3
+ require 'bundler/gem_tasks'
4
+
5
+ # require 'rubygems'
4
6
  require 'rake'
5
7
 
6
- #tests as gem
8
+ # tests as gem
7
9
  task :test do
8
10
  exec '/bin/bash', './test/test_with_railsapp'
9
11
  end
10
12
 
11
- task :default => :test
13
+ task default: :test
12
14
 
13
15
  begin
14
16
  gem 'rdoc'
@@ -25,5 +27,5 @@ begin
25
27
  rdoc.rdoc_files.include('lib/**/*.rb')
26
28
  end
27
29
  rescue Gem::LoadError
28
- puts "rdoc (or a dependency) not available. Install it with: gem install rdoc"
30
+ puts 'rdoc (or a dependency) not available. Install it with: gem install rdoc'
29
31
  end
data/Vagrantfile CHANGED
@@ -1,20 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # -*- mode: ruby -*-
2
4
  # vi: set ft=ruby :
3
5
 
4
- Vagrant.configure("2") do |config|
6
+ Vagrant.configure('2') do |config|
5
7
  # For a complete reference, please see the online documentation at
6
8
  # https://docs.vagrantup.com.
7
9
 
8
- config.vm.box = "ubuntu/xenial64"
10
+ config.vm.box = 'ubuntu/xenial64'
9
11
 
10
- # set auto_update to false, if you do NOT want to check the correct
12
+ # set auto_update to false, if you do NOT want to check the correct
11
13
  # additions version when booting this machine
12
14
  config.vbguest.auto_update = false
13
-
15
+
14
16
  # do NOT download the iso file from a webserver
15
17
  config.vbguest.no_remote = true
16
18
 
17
19
  # provision with a shell script.
18
- config.vm.provision "shell", path: "./test/provision_vagrant"
19
-
20
+ config.vm.provision 'shell', path: './test/provision_vagrant'
20
21
  end
data/config/routes.rb CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  unless HealthCheck::Engine.routes_explicitly_defined
2
4
  Rails.application.routes.draw do
3
- add_health_check_routes()
5
+ add_health_check_routes
4
6
  end
5
7
  end
data/health_check.gemspec CHANGED
@@ -11,10 +11,10 @@ Gem::Specification.new do |gem|
11
11
  gem.authors = ['Ian Heggie']
12
12
  gem.email = ['ian@heggie.biz']
13
13
  gem.summary = 'Simple health check of Rails app for uptime monitoring with Pingdom, NewRelic, EngineYard or uptime.openacs.org etc.'
14
- gem.description = <<-EOF
14
+ gem.description = <<-EOD
15
15
  Fork of https://github.com/ianheggie/health_check.
16
16
  Simple health check of Rails app for uptime monitoring with Pingdom, NewRelic, EngineYard or uptime.openacs.org etc.
17
- EOF
17
+ EOD
18
18
  gem.homepage = 'https://github.com/FinalCAD/health_check'
19
19
 
20
20
  gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
data/init.rb CHANGED
@@ -1,2 +1,3 @@
1
- require 'health_check'
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'health_check'
data/lib/health_check.rb CHANGED
@@ -1,19 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Copyright (c) 2010-2013 Ian Heggie, released under the MIT license.
2
4
  # See MIT-LICENSE for details.
3
5
 
4
6
  module HealthCheck
5
-
6
7
  class Engine < Rails::Engine
7
- cattr_accessor :routes_explicitly_defined
8
+ cattr_accessor :routes_explicitly_defined
8
9
  end
9
10
 
10
11
  # Text output upon success
11
12
  mattr_accessor :success
12
- self.success = "success"
13
+ self.success = 'success'
13
14
 
14
15
  # Text output upon failure
15
16
  mattr_accessor :failure
16
- self.failure = "failure"
17
+ self.failure = 'failure'
17
18
 
18
19
  # Timeout in seconds used when checking smtp server
19
20
  mattr_accessor :smtp_timeout
@@ -57,13 +58,13 @@ module HealthCheck
57
58
  mattr_accessor :custom_checks
58
59
  mattr_accessor :full_checks
59
60
  mattr_accessor :standard_checks
60
- self.custom_checks = { }
61
+ self.custom_checks = {}
61
62
  self.full_checks = ['database', 'migrations', 'custom', 'email', 'cache', 'redis-if-present', 'sidekiq-redis-if-present', 'resque-redis-if-present', 's3-if-present']
62
- self.standard_checks = [ 'database', 'migrations', 'custom', 'emailconf' ]
63
+ self.standard_checks = %w[database migrations custom emailconf]
63
64
 
64
65
  # Middleware based checks
65
66
  mattr_accessor :middleware_checks
66
- self.middleware_checks = [ 'middleware' ]
67
+ self.middleware_checks = ['middleware']
67
68
 
68
69
  mattr_accessor :installed_as_middleware
69
70
 
@@ -77,14 +78,13 @@ module HealthCheck
77
78
  self.include_error_in_response_body = true
78
79
 
79
80
  def self.add_custom_check(name = 'custom', &block)
80
- custom_checks[name] ||= [ ]
81
+ custom_checks[name] ||= []
81
82
  custom_checks[name] << block
82
83
  end
83
84
 
84
85
  def self.setup
85
86
  yield self
86
87
  end
87
-
88
88
  end
89
89
 
90
90
  require 'health_check/version'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BaseHealthCheck
2
4
  def create_error(check_type, error_message)
3
5
  "[#{check_type} - #{error_message}] "
@@ -1,21 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Copyright (c) 2010-2013 Ian Heggie, released under the MIT license.
2
4
  # See MIT-LICENSE for details.
3
5
 
4
6
  module HealthCheck
5
7
  class HealthCheckController < ActionController::Base
6
-
7
- layout false if self.respond_to? :layout
8
+ layout false if respond_to? :layout
8
9
  before_action :check_origin_ip
9
10
  before_action :authenticate
10
11
 
11
12
  def index
12
13
  last_modified = Time.now.utc
13
14
  max_age = HealthCheck.max_age
14
- if max_age > 1
15
- last_modified = Time.at((last_modified.to_f / max_age).floor * max_age).utc
16
- end
17
- public = (max_age > 1) && ! HealthCheck.basic_auth_username
18
- if stale?(:last_modified => last_modified, :public => public)
15
+ last_modified = Time.at((last_modified.to_f / max_age).floor * max_age).utc if max_age > 1
16
+ public = (max_age > 1) && !HealthCheck.basic_auth_username
17
+ if stale?(last_modified: last_modified, public: public)
19
18
  checks = params[:checks] ? params[:checks].split('_') : ['standard']
20
19
  checks -= HealthCheck.middleware_checks if HealthCheck.installed_as_middleware
21
20
  begin
@@ -30,9 +29,7 @@ module HealthCheck
30
29
  msg = HealthCheck.include_error_in_response_body ? "health_check failed: #{errors}" : nil
31
30
  send_response false, msg, HealthCheck.http_status_for_error_text, HealthCheck.http_status_for_error_object
32
31
  # Log a single line as some uptime checkers only record that it failed, not the text returned
33
- if logger
34
- logger.info msg
35
- end
32
+ logger&.info msg
36
33
  end
37
34
  end
38
35
  end
@@ -41,17 +38,18 @@ module HealthCheck
41
38
 
42
39
  def send_response(healthy, msg, text_status, obj_status)
43
40
  msg ||= healthy ? HealthCheck.success : HealthCheck.failure
44
- obj = { :healthy => healthy, :message => msg}
41
+ obj = { healthy: healthy, message: msg }
45
42
  respond_to do |format|
46
- format.html { render :plain => msg, :status => text_status, :content_type => 'text/plain' }
47
- format.json { render :json => obj, :status => obj_status }
48
- format.xml { render :xml => obj, :status => obj_status }
49
- format.any { render :plain => msg, :status => text_status, :content_type => 'text/plain' }
43
+ format.html { render plain: msg, status: text_status, content_type: 'text/plain' }
44
+ format.json { render json: obj, status: obj_status }
45
+ format.xml { render xml: obj, status: obj_status }
46
+ format.any { render plain: msg, status: text_status, content_type: 'text/plain' }
50
47
  end
51
48
  end
52
49
 
53
50
  def authenticate
54
51
  return unless HealthCheck.basic_auth_username && HealthCheck.basic_auth_password
52
+
55
53
  authenticate_or_request_with_http_basic('Health Check') do |username, password|
56
54
  username == HealthCheck.basic_auth_username && password == HealthCheck.basic_auth_password
57
55
  end
@@ -59,10 +57,10 @@ module HealthCheck
59
57
 
60
58
  def check_origin_ip
61
59
  unless HealthCheck.origin_ip_whitelist.blank? ||
62
- HealthCheck.origin_ip_whitelist.include?(request.ip)
63
- render :plain => 'Health check is not allowed for the requesting IP',
64
- :status => HealthCheck.http_status_for_ip_whitelist_error,
65
- :content_type => 'text/plain'
60
+ HealthCheck.origin_ip_whitelist.include?(request.ip)
61
+ render plain: 'Health check is not allowed for the requesting IP',
62
+ status: HealthCheck.http_status_for_ip_whitelist_error,
63
+ content_type: 'text/plain'
66
64
  end
67
65
  end
68
66
 
@@ -70,6 +68,5 @@ module HealthCheck
70
68
  def protect_against_forgery?
71
69
  false
72
70
  end
73
-
74
71
  end
75
72
  end
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActionDispatch::Routing
2
4
  class Mapper
3
-
4
5
  def health_check_routes(prefix = nil)
5
6
  HealthCheck::Engine.routes_explicitly_defined = true
6
7
  add_health_check_routes(prefix)
@@ -8,8 +9,7 @@ module ActionDispatch::Routing
8
9
 
9
10
  def add_health_check_routes(prefix = nil)
10
11
  HealthCheck.uri = prefix if prefix
11
- match "#{HealthCheck.uri}(/:checks)(.:format)", :to => 'health_check/health_check#index', via: [:get, :post], :defaults => { :format => 'txt' }
12
+ match "#{HealthCheck.uri}(/:checks)(.:format)", to: 'health_check/health_check#index', via: %i[get post], defaults: { format: 'txt' }
12
13
  end
13
-
14
14
  end
15
15
  end
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HealthCheck
2
4
  class MiddlewareHealthcheck
3
-
4
5
  def initialize(app)
5
6
  @app = app
6
7
  end
@@ -11,16 +12,15 @@ module HealthCheck
11
12
  if error_response = (ip_blocked(env) || not_authenticated(env))
12
13
  return error_response
13
14
  end
15
+
14
16
  HealthCheck.installed_as_middleware = true
15
17
  errors = ''
16
18
  begin
17
19
  # Process the checks to be run from middleware
18
20
  errors = HealthCheck::Utils.process_checks(middleware_checks, true)
19
21
  # Process remaining checks through the full stack if there are any
20
- unless full_stack_checks.empty?
21
- return @app.call(env)
22
- end
23
- rescue => e
22
+ return @app.call(env) unless full_stack_checks.empty?
23
+ rescue StandardError => e
24
24
  errors = e.message.blank? ? e.class.to_s : e.message.to_s
25
25
  end
26
26
  healthy = errors.blank?
@@ -37,7 +37,7 @@ module HealthCheck
37
37
  content_type = 'text/plain'
38
38
  error_code = HealthCheck.http_status_for_error_text
39
39
  end
40
- [ (healthy ? 200 : error_code), { 'Content-Type' => content_type }, [msg] ]
40
+ [(healthy ? 200 : error_code), { 'Content-Type' => content_type }, [msg]]
41
41
  else
42
42
  @app.call(env)
43
43
  end
@@ -47,46 +47,46 @@ module HealthCheck
47
47
 
48
48
  def parse_env(env)
49
49
  uri = env['PATH_INFO']
50
- if uri =~ /^\/#{Regexp.escape HealthCheck.uri}(\/([-_0-9a-zA-Z]*))?(\.(\w*))?$/
51
- checks = $2.to_s == '' ? ['standard'] : $2.split('_')
52
- response_type = $4.to_s
50
+ if uri =~ %r{^/#{Regexp.escape HealthCheck.uri}(/([-_0-9a-zA-Z]*))?(\.(\w*))?$}
51
+ checks = Regexp.last_match(2).to_s == '' ? ['standard'] : Regexp.last_match(2).split('_')
52
+ response_type = Regexp.last_match(4).to_s
53
53
  middleware_checks = checks & HealthCheck.middleware_checks
54
54
  full_stack_checks = (checks - HealthCheck.middleware_checks) - ['and']
55
- [response_type, middleware_checks, full_stack_checks ]
55
+ [response_type, middleware_checks, full_stack_checks]
56
56
  end
57
57
  end
58
58
 
59
59
  def ip_blocked(env)
60
60
  return false if HealthCheck.origin_ip_whitelist.blank?
61
+
61
62
  req = Rack::Request.new(env)
62
63
  unless HealthCheck.origin_ip_whitelist.include?(req.ip)
63
- [ HealthCheck.http_status_for_ip_whitelist_error,
64
- { 'Content-Type' => 'text/plain' },
65
- [ 'Health check is not allowed for the requesting IP' ]
66
- ]
64
+ [HealthCheck.http_status_for_ip_whitelist_error,
65
+ { 'Content-Type' => 'text/plain' },
66
+ ['Health check is not allowed for the requesting IP']]
67
67
  end
68
68
  end
69
69
 
70
70
  def not_authenticated(env)
71
71
  return false unless HealthCheck.basic_auth_username && HealthCheck.basic_auth_password
72
+
72
73
  auth = MiddlewareHealthcheck::Request.new(env)
73
74
  if auth.provided? && auth.basic? && Rack::Utils.secure_compare(HealthCheck.basic_auth_username, auth.username) && Rack::Utils.secure_compare(HealthCheck.basic_auth_password, auth.password)
74
75
  env['REMOTE_USER'] = auth.username
75
76
  return false
76
77
  end
77
- [ 401,
78
- { 'Content-Type' => 'text/plain', 'WWW-Authenticate' => 'Basic realm="Health Check"' },
79
- [ ]
80
- ]
78
+ [401,
79
+ { 'Content-Type' => 'text/plain', 'WWW-Authenticate' => 'Basic realm="Health Check"' },
80
+ []]
81
81
  end
82
82
 
83
83
  class Request < Rack::Auth::AbstractRequest
84
84
  def basic?
85
- "basic" == scheme
85
+ scheme == 'basic'
86
86
  end
87
87
 
88
88
  def credentials
89
- @credentials ||= params.unpack("m*").first.split(/:/, 2)
89
+ @credentials ||= params.unpack1('m*').split(/:/, 2)
90
90
  end
91
91
 
92
92
  def username
@@ -97,6 +97,5 @@ module HealthCheck
97
97
  credentials.last
98
98
  end
99
99
  end
100
-
101
100
  end
102
101
  end
@@ -1,15 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HealthCheck
2
- class ResqueHealthCheck
3
- extend BaseHealthCheck
4
+ class ResqueHealthCheck
5
+ extend BaseHealthCheck
6
+
7
+ def self.check
8
+ raise "Wrong configuration. Missing 'resque' gem" unless defined?(::Resque)
4
9
 
5
- def self.check
6
- unless defined?(::Resque)
7
- raise "Wrong configuration. Missing 'resque' gem"
8
- end
9
10
  res = ::Resque.redis.ping
10
11
  res == 'PONG' ? '' : "Resque.redis.ping returned #{res.inspect} instead of PONG"
11
- rescue Exception => e
12
- create_error 'resque-redis', e.message
13
- end
14
- end
12
+ rescue Exception => e
13
+ create_error 'resque-redis', e.message
14
+ end
15
+ end
15
16
  end
@@ -1,24 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HealthCheck
2
4
  class S3HealthCheck
3
5
  extend BaseHealthCheck
4
6
 
5
7
  class << self
6
8
  def check
7
- unless defined?(::Aws)
8
- raise "Wrong configuration. Missing 'aws-sdk' gem"
9
- end
9
+ raise "Wrong configuration. Missing 'aws-sdk' gem" unless defined?(::Aws)
10
10
  return create_error 's3', 'Could not connect to aws' if aws_s3_client.nil?
11
+
11
12
  HealthCheck.buckets.each do |bucket_name, permissions|
12
- if permissions.nil? # backward compatible
13
- permissions = [:R, :W, :D]
14
- end
13
+ permissions = %i[R W D] if permissions.nil? # backward compatible
15
14
  permissions.each do |permision|
16
- begin
17
15
  send(permision, bucket_name)
18
16
  rescue Exception => e
19
17
  raise "bucket:#{bucket_name}, permission:#{permision} - #{e.message}"
20
18
  end
21
- end
22
19
  end
23
20
  ''
24
21
  rescue Exception => e
@@ -1,11 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HealthCheck
2
4
  class SidekiqHealthCheck
3
5
  extend BaseHealthCheck
4
6
 
5
7
  def self.check
6
- unless defined?(::Sidekiq)
7
- raise "Wrong configuration. Missing 'sidekiq' gem"
8
- end
8
+ raise "Wrong configuration. Missing 'sidekiq' gem" unless defined?(::Sidekiq)
9
+
9
10
  ::Sidekiq.redis do |r|
10
11
  res = r.ping
11
12
  res == 'PONG' ? '' : "Sidekiq.redis.ping returned #{res.inspect} instead of PONG"
@@ -1,19 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Copyright (c) 2010-2013 Ian Heggie, released under the MIT license.
2
4
  # See MIT-LICENSE for details.
3
5
 
4
6
  module HealthCheck
5
7
  class Utils
6
-
7
8
  @@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
- }
9
+ {
10
+ address: 'localhost',
11
+ port: 25,
12
+ domain: 'localhost.localdomain',
13
+ user_name: nil,
14
+ password: nil,
15
+ authentication: nil,
16
+ enable_starttls_auto: true
17
+ }
17
18
 
18
19
  cattr_accessor :default_smtp_settings
19
20
 
@@ -22,77 +23,75 @@ module HealthCheck
22
23
  errors = ''
23
24
  checks.each do |check|
24
25
  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 "emailconf"
32
- errors << HealthCheck::Utils.check_email if HealthCheck::Utils.mailer_configured?
33
- when "migrations", "migration"
34
- if defined?(ActiveRecord::Migration) and ActiveRecord::Migration.respond_to?(:check_pending!)
35
- # Rails 4+
36
- begin
37
- ActiveRecord::Migration.check_pending!
38
- rescue ActiveRecord::PendingMigrationError => ex
39
- errors << ex.message
40
- end
41
- else
42
- database_version = HealthCheck::Utils.get_database_version
43
- migration_version = HealthCheck::Utils.get_migration_version
44
- if database_version.to_i != migration_version.to_i
45
- errors << "Current database version (#{database_version}) does not match latest migration (#{migration_version}). "
46
- end
47
- end
48
- when 'cache'
49
- errors << HealthCheck::Utils.check_cache
50
- when 'resque-redis-if-present'
51
- errors << HealthCheck::ResqueHealthCheck.check if defined?(::Resque)
52
- when 'sidekiq-redis-if-present'
53
- errors << HealthCheck::SidekiqHealthCheck.check if defined?(::Sidekiq)
54
- when 'redis-if-present'
55
- errors << HealthCheck::RedisHealthCheck.check if defined?(::Redis)
56
- when 's3-if-present'
57
- errors << HealthCheck::S3HealthCheck.check if defined?(::Aws)
58
- when 'resque-redis'
59
- errors << HealthCheck::ResqueHealthCheck.check
60
- when 'sidekiq-redis'
61
- errors << HealthCheck::SidekiqHealthCheck.check
62
- when 'redis'
63
- errors << HealthCheck::RedisHealthCheck.check
64
- when 's3'
65
- errors << HealthCheck::S3HealthCheck.check
66
- when "standard"
67
- errors << HealthCheck::Utils.process_checks(HealthCheck.standard_checks, called_from_middleware)
68
- when "middleware"
69
- errors << "Health check not called from middleware - probably not installed as middleware." unless called_from_middleware
70
- when "custom"
71
- HealthCheck.custom_checks.each do |name, list|
72
- list.each do |custom_check|
73
- errors << custom_check.call(self)
74
- end
26
+ when 'and', 'site'
27
+ # do nothing
28
+ when 'database'
29
+ HealthCheck::Utils.get_database_version
30
+ when 'email'
31
+ errors << HealthCheck::Utils.check_email
32
+ when 'emailconf'
33
+ errors << HealthCheck::Utils.check_email if HealthCheck::Utils.mailer_configured?
34
+ when 'migrations', 'migration'
35
+ if defined?(ActiveRecord::Migration) && ActiveRecord::Migration.respond_to?(:check_pending!)
36
+ # Rails 4+
37
+ begin
38
+ ActiveRecord::Migration.check_pending!
39
+ rescue ActiveRecord::PendingMigrationError => ex
40
+ errors << ex.message
75
41
  end
76
- when "all", "full"
77
- errors << HealthCheck::Utils.process_checks(HealthCheck.full_checks, called_from_middleware)
78
42
  else
79
- if HealthCheck.custom_checks.include? check
80
- HealthCheck.custom_checks[check].each do |custom_check|
81
- errors << custom_check.call(self)
82
- end
83
- else
84
- return "invalid argument to health_test."
43
+ database_version = HealthCheck::Utils.get_database_version
44
+ migration_version = HealthCheck::Utils.get_migration_version
45
+ errors << "Current database version (#{database_version}) does not match latest migration (#{migration_version}). " if database_version.to_i != migration_version.to_i
46
+ end
47
+ when 'cache'
48
+ errors << HealthCheck::Utils.check_cache
49
+ when 'resque-redis-if-present'
50
+ errors << HealthCheck::ResqueHealthCheck.check if defined?(::Resque)
51
+ when 'sidekiq-redis-if-present'
52
+ errors << HealthCheck::SidekiqHealthCheck.check if defined?(::Sidekiq)
53
+ when 'redis-if-present'
54
+ errors << HealthCheck::RedisHealthCheck.check if defined?(::Redis)
55
+ when 's3-if-present'
56
+ errors << HealthCheck::S3HealthCheck.check if defined?(::Aws)
57
+ when 'resque-redis'
58
+ errors << HealthCheck::ResqueHealthCheck.check
59
+ when 'sidekiq-redis'
60
+ errors << HealthCheck::SidekiqHealthCheck.check
61
+ when 'redis'
62
+ errors << HealthCheck::RedisHealthCheck.check
63
+ when 's3'
64
+ errors << HealthCheck::S3HealthCheck.check
65
+ when 'standard'
66
+ errors << HealthCheck::Utils.process_checks(HealthCheck.standard_checks, called_from_middleware)
67
+ when 'middleware'
68
+ errors << 'Health check not called from middleware - probably not installed as middleware.' unless called_from_middleware
69
+ when 'custom'
70
+ HealthCheck.custom_checks.each do |_name, list|
71
+ list.each do |custom_check|
72
+ errors << custom_check.call(self)
85
73
  end
74
+ end
75
+ when 'all', 'full'
76
+ errors << HealthCheck::Utils.process_checks(HealthCheck.full_checks, called_from_middleware)
77
+ else
78
+ if HealthCheck.custom_checks.include? check
79
+ HealthCheck.custom_checks[check].each do |custom_check|
80
+ errors << custom_check.call(self)
81
+ end
82
+ else
83
+ return 'invalid argument to health_test.'
84
+ end
86
85
  end
87
86
  end
88
- return errors
89
- rescue => e
90
- return e.message
87
+ errors
88
+ rescue StandardError => e
89
+ e.message
91
90
  end
92
91
 
93
92
  def self.db_migrate_path
94
93
  # Lazy initialisation so Rails.root will be defined
95
- @@db_migrate_path ||= File.join(Rails.root, 'db', 'migrate')
94
+ @@db_migrate_path ||= Rails.root.join('db', 'migrate')
96
95
  end
97
96
 
98
97
  def self.db_migrate_path=(value)
@@ -107,10 +106,14 @@ module HealthCheck
107
106
  ActiveRecord::Migrator.current_version if defined?(ActiveRecord)
108
107
  end
109
108
 
110
- def self.get_migration_version(dir = self.db_migrate_path)
109
+ def self.get_migration_version(dir = db_migrate_path)
111
110
  latest_migration = nil
112
- Dir[File.join(dir, "[0-9]*_*.rb")].each do |f|
113
- l = f.scan(/0*([0-9]+)_[_.a-zA-Z0-9]*.rb/).first.first rescue -1
111
+ Dir[File.join(dir, '[0-9]*_*.rb')].each do |f|
112
+ l = begin
113
+ f.scan(/0*([0-9]+)_[_.a-zA-Z0-9]*.rb/).first.first
114
+ rescue StandardError
115
+ -1
116
+ end
114
117
  latest_migration = l if !latest_migration || l.to_i > latest_migration.to_i
115
118
  end
116
119
  latest_migration
@@ -118,12 +121,12 @@ module HealthCheck
118
121
 
119
122
  def self.check_email
120
123
  case ActionMailer::Base.delivery_method
121
- when :smtp
122
- HealthCheck::Utils.check_smtp(ActionMailer::Base.smtp_settings, HealthCheck.smtp_timeout)
123
- when :sendmail
124
- HealthCheck::Utils.check_sendmail(ActionMailer::Base.sendmail_settings)
125
- else
126
- ''
124
+ when :smtp
125
+ HealthCheck::Utils.check_smtp(ActionMailer::Base.smtp_settings, HealthCheck.smtp_timeout)
126
+ when :sendmail
127
+ HealthCheck::Utils.check_sendmail(ActionMailer::Base.sendmail_settings)
128
+ else
129
+ ''
127
130
  end
128
131
  end
129
132
 
@@ -137,17 +140,13 @@ module HealthCheck
137
140
  if @skip_external_checks
138
141
  status = '221'
139
142
  else
140
- Timeout::timeout(timeout) do |timeout_length|
143
+ Timeout.timeout(timeout) do |_timeout_length|
141
144
  t = TCPSocket.new(settings[:address], settings[:port])
142
145
  begin
143
146
  status = t.gets
144
- while status != nil && status !~ /^2/
145
- status = t.gets
146
- end
147
+ status = t.gets while !status.nil? && status !~ /^2/
147
148
  t.puts "HELO #{settings[:domain]}\r"
148
- while status != nil && status !~ /^250/
149
- status = t.gets
150
- end
149
+ status = t.gets while !status.nil? && status !~ /^250/
151
150
  t.puts "QUIT\r"
152
151
  status = t.gets
153
152
  ensure
@@ -155,17 +154,16 @@ module HealthCheck
155
154
  end
156
155
  end
157
156
  end
158
- rescue Errno::EBADF => ex
159
- status = "Unable to connect to service"
157
+ rescue Errno::EBADF
158
+ status = 'Unable to connect to service'
160
159
  rescue Exception => ex
161
160
  status = ex.to_s
162
161
  end
163
- (status =~ /^221/) ? '' : "SMTP: #{status || 'unexpected EOF on socket'}. "
162
+ /^221/.match?(status) ? '' : "SMTP: #{status || 'unexpected EOF on socket'}. "
164
163
  end
165
164
 
166
165
  def self.check_cache
167
- Rails.cache.write('__health_check_cache_test__', 'ok', :expires_in => 1.second) ? '' : 'Unable to write to cache. '
166
+ Rails.cache.write('__health_check_cache_test__', 'ok', expires_in: 1.second) ? '' : 'Unable to write to cache. '
168
167
  end
169
-
170
168
  end
171
169
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HealthCheck
2
- VERSION = "3.0.0"
4
+ VERSION = '3.0.1'
3
5
  end
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'socket'
4
5
 
5
6
  port = 3555
6
7
 
7
-
8
8
  server = TCPServer.new port
9
9
  puts "fake_smtp_server: Waiting for one connection to port #{port} ..."
10
10
 
@@ -19,20 +19,20 @@ def receive(client)
19
19
  line
20
20
  end
21
21
 
22
- client = server.accept # Wait for a client to connect
23
- send(client, "220 dummy-smtp.example.com SMTP")
22
+ client = server.accept # Wait for a client to connect
23
+ send(client, '220 dummy-smtp.example.com SMTP')
24
24
  cmd = receive(client)
25
25
 
26
26
  while cmd !~ /^QUIT\r/
27
- if cmd =~ /^HELO(.*)\r/
28
- send(client, "250 Welcome to a dummy smtp server")
27
+ if /^HELO(.*)\r/.match?(cmd)
28
+ send(client, '250 Welcome to a dummy smtp server')
29
29
  else
30
- send(client, "502 I am so dumb I only understand HELO and QUIT")
30
+ send(client, '502 I am so dumb I only understand HELO and QUIT')
31
31
  end
32
32
  cmd = receive(client)
33
33
  end
34
- send(client, "221 Bye Bye")
34
+ send(client, '221 Bye Bye')
35
35
 
36
36
  client.close
37
- puts "fake_smtp_server: Exiting now the conversation has finished."
37
+ puts 'fake_smtp_server: Exiting now the conversation has finished.'
38
38
  exit 0
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class CreateCountries < ActiveRecord::Migration[5.0]
2
4
  def self.up
3
5
  create_table :countries do |t|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class CreateRoles < ActiveRecord::Migration[5.0]
2
4
  def self.up
3
5
  create_table :roles do |t|
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class CreateUsers < ActiveRecord::Migration[5.0]
2
4
  def self.up
3
- create_table "users", :force => true do |t|
5
+ create_table 'users', force: true do |t|
4
6
  t.column :name, :string
5
7
  end
6
8
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class CreateCountries < ActiveRecord::Migration[5.0]
2
4
  def self.up
3
5
  create_table :countries do |t|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Gemfile for health_test testing
2
4
 
3
5
  source 'https://rubygems.org'
@@ -9,18 +11,17 @@ gem 'rake', '>= 0.8.7'
9
11
 
10
12
  group :development, :test do
11
13
  if defined?(JRUBY_VERSION)
12
- gem 'jruby-openssl'
13
14
  gem 'activerecord-jdbcsqlite3-adapter'
15
+ gem 'jruby-openssl'
14
16
  else
15
- gem 'sqlite3', "~> 1.3.7"
17
+ gem 'sqlite3', '~> 1.3.7'
16
18
  end
17
19
  gem 'shoulda'
18
-
20
+
19
21
  # redis based checks
20
- gem 'sidekiq', :require => !ENV['SIDEKIQ'].nil?
21
- gem 'redis', :require => !ENV['REDIS_URL'].nil?
22
- gem 'resque', :require => !ENV['RESQUE'].nil?
22
+ gem 'redis', require: !ENV['REDIS_URL'].nil?
23
+ gem 'resque', require: !ENV['RESQUE'].nil?
24
+ gem 'sidekiq', require: !ENV['SIDEKIQ'].nil?
23
25
  # s3 check
24
- gem 'aws-sdk', :require => !ENV['AWS_ACCESS_KEY_ID'].nil?
26
+ gem 'aws-sdk', require: !ENV['AWS_ACCESS_KEY_ID'].nil?
25
27
  end
26
-
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Gemfile for health_test testing
2
4
 
3
5
  source 'https://rubygems.org'
@@ -6,27 +8,27 @@ source 'https://rubygems.org'
6
8
 
7
9
  ruby RUBY_VERSION < '2.2.2' ? '2.2.2' : RUBY_VERSION
8
10
 
11
+ gem 'rack'
9
12
  gem 'rails'
10
13
  gem 'rake'
11
- gem 'rack'
12
14
 
13
15
  group :development, :test do
14
16
  if defined?(JRUBY_VERSION)
15
- gem 'jruby-openssl'
16
17
  gem 'activerecord-jdbcsqlite3-adapter'
18
+ gem 'jruby-openssl'
17
19
  else
18
20
  gem 'sqlite3'
19
21
  end
20
22
  gem 'shoulda'
21
-
23
+
22
24
  # redis based checks
23
- gem 'sidekiq', :require => !ENV['SIDEKIQ'].nil?
24
- gem 'redis', :require => !ENV['REDIS_URL'].nil?
25
- gem 'resque', :require => !ENV['RESQUE'].nil?
25
+ gem 'redis', require: !ENV['REDIS_URL'].nil?
26
+ gem 'resque', require: !ENV['RESQUE'].nil?
27
+ gem 'sidekiq', require: !ENV['SIDEKIQ'].nil?
26
28
  # s3 check
27
- gem 'aws-sdk', :require => !ENV['AWS_ACCESS_KEY_ID'].nil?
29
+ gem 'aws-sdk', require: !ENV['AWS_ACCESS_KEY_ID'].nil?
28
30
  end
29
31
 
30
32
  # Initial Gemfile has therubyracer commented out
31
- gem 'therubyrhino', :platform => :jruby # REQUIRED
32
- gem 'therubyracer', :platform => :ruby # REQUIRED
33
+ gem 'therubyracer', platform: :ruby # REQUIRED
34
+ gem 'therubyrhino', platform: :jruby # REQUIRED
data/test/testurl CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
2
4
  require 'net/http'
3
5
  require 'uri'
4
6
 
@@ -10,17 +12,25 @@ def open(url)
10
12
  http.request(req)
11
13
  end
12
14
 
13
- response = open(ARGV[0]) rescue nil
15
+ response = begin
16
+ open(ARGV[0])
17
+ rescue StandardError
18
+ nil
19
+ end
14
20
  unless response
15
- i=0
16
- print "waiting.."
17
- while i < 120 and not response
18
- #puts 'RESPONSE:', response.inspect
19
- print "."
21
+ i = 0
22
+ print 'waiting..'
23
+ while (i < 120) && !response
24
+ # puts 'RESPONSE:', response.inspect
25
+ print '.'
20
26
  STDOUT.flush
21
27
  i += 1
22
28
  sleep(1)
23
- response = open(ARGV[0]) rescue nil
29
+ response = begin
30
+ open(ARGV[0])
31
+ rescue StandardError
32
+ nil
33
+ end
24
34
  end
25
35
  unless response
26
36
  puts "\nFAIL: timed out after waiting #{i} seconds"
@@ -32,32 +42,32 @@ end
32
42
  page_content = response.body
33
43
 
34
44
  puts " response code: #{response.code} #{response.message}"
35
- response.header.each_header {|key,value| puts " #{key}: #{value}" }
45
+ response.header.each_header { |key, value| puts " #{key}: #{value}" }
36
46
  puts " body: #{page_content}"
37
47
 
38
- if ARGV[1] and ARGV[1] != ''
48
+ if ARGV[1] && (ARGV[1] != '')
39
49
  if ARGV[1].split(',').include?(response.code)
40
50
  puts "PASS (response code was #{response.code} which matched #{ARGV[1]})"
41
51
  else
42
- puts "FAIL (response code was #{response.code}, expected #{ARGV[1]})"
52
+ puts "FAIL (response code was #{response.code}, expected #{ARGV[1]})"
43
53
  exit 1
44
54
  end
45
55
  end
46
56
 
47
- if ARGV[2] and ARGV[2] != ''
57
+ if ARGV[2] && (ARGV[2] != '')
48
58
  if response.content_type == ARGV[2]
49
59
  puts "PASS (content type was #{response.content_type})"
50
60
  else
51
- puts "FAIL (content type was #{response.content_type}, expected #{ARGV[2]})"
61
+ puts "FAIL (content type was #{response.content_type}, expected #{ARGV[2]})"
52
62
  exit 2
53
63
  end
54
64
  end
55
65
 
56
- if ARGV[3] and ARGV[3] != ''
66
+ if ARGV[3] && (ARGV[3] != '')
57
67
  if page_content.to_s.include? ARGV[3]
58
68
  puts "PASS (found #{ARGV[3]})"
59
69
  else
60
- puts "FAIL (expected to find #{ARGV[3]}) - page contents:" , page_content.to_s, 'END-OF-CONTENTS'
70
+ puts "FAIL (expected to find #{ARGV[3]}) - page contents:", page_content.to_s, 'END-OF-CONTENTS'
61
71
  exit 3
62
72
  end
63
73
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_health_check
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Heggie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-06 00:00:00.000000000 Z
11
+ date: 2019-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -106,6 +106,7 @@ extra_rdoc_files:
106
106
  files:
107
107
  - ".document"
108
108
  - ".gitignore"
109
+ - ".rubocop.yml"
109
110
  - ".travis.yml"
110
111
  - CHANGELOG
111
112
  - Gemfile