Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 42 additions & 4 deletions config/initializers/okcomputer.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require 'net/smtp'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: move these two lines below the # frozen_string_literal: true statement, and you can remove the explicit call to the #freeze method you added on line 11.


# frozen_string_literal: true

# Health check configuration
Expand All @@ -6,7 +8,7 @@
OkComputer.check_in_parallel = true

class AlmaPatronCheck < OkComputer::Check
TEST_PATRON_ID = '[email protected]'
TEST_PATRON_ID = '[email protected]'.freeze

def check
Alma::User.find(TEST_PATRON_ID)
Expand All @@ -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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

two things:

  1. don't register checks within the class - register them at the level of the initializer.
  2. you might need to mock a Net::SMTP connection for the spec itself.


# 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
2 changes: 1 addition & 1 deletion spec/request/okcomputer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading