diff --git a/config/initializers/okcomputer.rb b/config/initializers/okcomputer.rb index b61c407a..c13ca077 100644 --- a/config/initializers/okcomputer.rb +++ b/config/initializers/okcomputer.rb @@ -1,3 +1,5 @@ +require 'net/smtp' + # frozen_string_literal: true # Health check configuration @@ -6,7 +8,7 @@ OkComputer.check_in_parallel = true class AlmaPatronCheck < OkComputer::Check - TEST_PATRON_ID = '000311@lbl.gov' + TEST_PATRON_ID = '000311@lbl.gov'.freeze def check Alma::User.find(TEST_PATRON_ID) @@ -18,11 +20,47 @@ def check end end +# rubocop:disable Metrics/MethodLength, Metrics/AbcSize +class MailConnectivityCheck < OkComputer::Check + OkComputer::Registry.register 'mail-connectivity', MailConnectivityCheck.new if ActionMailer::Base.delivery_method == :smtp + + # Check that the mail password is set + def check + settings = ActionMailer::Base.smtp_settings + begin + Net::SMTP.start( + settings[:address], + settings[:port], + settings[:domain], + settings[:user_name], + settings[:password], + settings[:authentication], + tls: true + ) { mark_message 'Connection for smtp successful' } + rescue Net::SMTPAuthenticationError => e + mark_failure + Rails.logger.warn "SMTP authentication error: #{e}" + mark_message 'SMTP Error: Authentication failed. Check logs for more details' + rescue Net::SMTPServerBusy, Net::SMTPSyntaxError, Net::SMTPFatalError, Net::SMTPUnknownError => e + mark_failure + Rails.logger.warn "SMTP Error: #{e}" + mark_message 'SMTP error. Check logs for more details' + rescue IOError, Net::ReadTimeout => e + mark_failure + Rails.logger.warn "SMTP Timeout: #{e}" + mark_message 'SMTP Connection error: Timeout. Check logs for more details' + rescue StandardError => e + # Catch any other unexpected errors + mark_failure + Rails.logger.warn "SMTP standard error: #{e}" + mark_message 'SMTP ERROR: Could not connect. Check logs for more details' + end + end +end +# rubocop:enable Metrics/MethodLength, Metrics/AbcSize + # Ensure Alma API is working. OkComputer::Registry.register 'alma-patron-lookup', AlmaPatronCheck.new # Ensure database migrations have been run. OkComputer::Registry.register 'database-migrations', OkComputer::ActiveRecordMigrationsCheck.new - -# Ensure connectivity to the mail system. -OkComputer::Registry.register 'action-mailer', OkComputer::ActionMailerCheck.new diff --git a/spec/request/okcomputer_spec.rb b/spec/request/okcomputer_spec.rb index fbf8d418..e4978636 100644 --- a/spec/request/okcomputer_spec.rb +++ b/spec/request/okcomputer_spec.rb @@ -11,7 +11,7 @@ it 'returns all checks to /health' do get '/health' expect(response.parsed_body.keys).to match_array %w[ - action-mailer + mailer-connectivity alma-patron-lookup default database