class HealthCheck::Utils
Public Class Methods
check_cache()
click to toggle source
# File lib/health_check/utils.rb, line 166 def self.check_cache Rails.cache.write('__health_check_cache_test__', 'ok', :expires_in => 1.second) ? '' : 'Unable to write to cache. ' end
check_email()
click to toggle source
# File lib/health_check/utils.rb, line 119 def self.check_email case ActionMailer::Base.delivery_method when :smtp HealthCheck::Utils.check_smtp(ActionMailer::Base.smtp_settings, HealthCheck.smtp_timeout) when :sendmail HealthCheck::Utils.check_sendmail(ActionMailer::Base.sendmail_settings) else '' end end
check_sendmail(settings)
click to toggle source
# File lib/health_check/utils.rb, line 130 def self.check_sendmail(settings) File.executable?(settings[:location]) ? '' : 'no sendmail executable found. ' end
check_smtp(settings, timeout)
click to toggle source
# File lib/health_check/utils.rb, line 134 def self.check_smtp(settings, timeout) status = '' begin if @skip_external_checks status = '221' else Timeout::timeout(timeout) do |timeout_length| t = TCPSocket.new(settings[:address], settings[:port]) begin status = t.gets while status != nil && status !~ /^2/ status = t.gets end t.puts "HELO #{settings[:domain]}\r" while status != nil && status !~ /^250/ status = t.gets end t.puts "QUIT\r" status = t.gets ensure t.close end end end rescue Errno::EBADF => ex status = "Unable to connect to service" rescue Exception => ex status = ex.to_s end (status =~ /^221/) ? '' : "SMTP: #{status || 'unexpected EOF on socket'}. " end
db_migrate_path()
click to toggle source
# File lib/health_check/utils.rb, line 93 def self.db_migrate_path # Lazy initialisation so Rails.root will be defined @@db_migrate_path ||= File.join(Rails.root, 'db', 'migrate') end
db_migrate_path=(value)
click to toggle source
# File lib/health_check/utils.rb, line 98 def self.db_migrate_path=(value) @@db_migrate_path = value end
get_database_version()
click to toggle source
# File lib/health_check/utils.rb, line 106 def self.get_database_version ActiveRecord::Migrator.current_version if defined?(ActiveRecord) end
get_migration_version(dir = self.db_migrate_path)
click to toggle source
# File lib/health_check/utils.rb, line 110 def self.get_migration_version(dir = self.db_migrate_path) latest_migration = nil Dir[File.join(dir, "[0-9]*_*.rb")].each do |f| l = f.scan(/0*([0-9]+)_[_.a-zA-Z0-9]*.rb/).first.first rescue -1 latest_migration = l if !latest_migration || l.to_i > latest_migration.to_i end latest_migration end
mailer_configured?()
click to toggle source
# File lib/health_check/utils.rb, line 102 def self.mailer_configured? defined?(ActionMailer::Base) && (ActionMailer::Base.delivery_method != :smtp || HealthCheck::Utils.default_smtp_settings != ActionMailer::Base.smtp_settings) end
process_checks(checks, called_from_middleware = false)
click to toggle source
process an array containing a list of checks
# File lib/health_check/utils.rb, line 21 def self.process_checks(checks, called_from_middleware = false) errors = '' checks.each do |check| case check when 'and', 'site' # do nothing when "database" HealthCheck::Utils.get_database_version when "email" errors << HealthCheck::Utils.check_email when "emailconf" errors << HealthCheck::Utils.check_email if HealthCheck::Utils.mailer_configured? when "migrations", "migration" if defined?(ActiveRecord::Migration) and ActiveRecord::Migration.respond_to?(:check_pending!) # Rails 4+ begin ActiveRecord::Migration.check_pending! rescue ActiveRecord::PendingMigrationError => ex errors << ex.message end else database_version = HealthCheck::Utils.get_database_version migration_version = HealthCheck::Utils.get_migration_version if database_version.to_i != migration_version.to_i errors << "Current database version (#{database_version}) does not match latest migration (#{migration_version}). " end end when 'cache' errors << HealthCheck::Utils.check_cache when 'resque-redis-if-present' errors << HealthCheck::ResqueHealthCheck.check if defined?(::Resque) when 'sidekiq-redis-if-present' errors << HealthCheck::SidekiqHealthCheck.check if defined?(::Sidekiq) when 'redis-if-present' errors << HealthCheck::RedisHealthCheck.check if defined?(::Redis) when 's3-if-present' errors << HealthCheck::S3HealthCheck.check if defined?(::Aws) when 'resque-redis' errors << HealthCheck::ResqueHealthCheck.check when 'sidekiq-redis' errors << HealthCheck::SidekiqHealthCheck.check when 'redis' errors << HealthCheck::RedisHealthCheck.check when 's3' errors << HealthCheck::S3HealthCheck.check when "standard" errors << HealthCheck::Utils.process_checks(HealthCheck.standard_checks, called_from_middleware) when "middleware" errors << "Health check not called from middleware - probably not installed as middleware." unless called_from_middleware when "custom" HealthCheck.custom_checks.each do |name, list| list.each do |custom_check| errors << custom_check.call(self) end end when "all", "full" errors << HealthCheck::Utils.process_checks(HealthCheck.full_checks, called_from_middleware) else if HealthCheck.custom_checks.include? check HealthCheck.custom_checks[check].each do |custom_check| errors << custom_check.call(self) end else return "invalid argument to health_test." end end end return errors rescue => e return e.message end