diff --git a/Gemfile b/Gemfile index 9eedd10d..a69eb312 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,7 @@ gem 'berkeley_library-location', '~> 4.2.0' gem 'berkeley_library-logging', '~> 0.2', '>= 0.2.7' gem 'berkeley_library-marc', '~> 0.3.1' gem 'berkeley_library-tind', '~> 0.8.0' -gem 'berkeley_library-util', '~> 0.2.0' +gem 'berkeley_library-util', '~> 0.3' gem 'bootstrap' gem 'dotenv-rails', '~> 2.8.1', require: 'dotenv/rails-now' gem 'faraday' diff --git a/Gemfile.lock b/Gemfile.lock index 01b9af14..89a112d2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -123,7 +123,7 @@ GEM rest-client (~> 2.1) rubyzip (~> 2.3, < 3.0) typesafe_enum (~> 0.3) - berkeley_library-util (0.2.0) + berkeley_library-util (0.3.0) berkeley_library-logging (~> 0.3) rest-client (~> 2.1) typesafe_enum (~> 0.3) @@ -511,7 +511,7 @@ DEPENDENCIES berkeley_library-logging (~> 0.2, >= 0.2.7) berkeley_library-marc (~> 0.3.1) berkeley_library-tind (~> 0.8.0) - berkeley_library-util (~> 0.2.0) + berkeley_library-util (~> 0.3) bootstrap brakeman bundle-audit diff --git a/config/application.rb b/config/application.rb index e80dbd00..13d2b032 100644 --- a/config/application.rb +++ b/config/application.rb @@ -107,6 +107,10 @@ def log_active_storage_root!(active_storage_root) config.tind_base_uri = config.altmedia['tind_base_uri'] config.tind_api_key = config.altmedia['tind_api_key'] + config.x.healthcheck_urls.hathiTrust = 'https://catalog.hathitrust.org/api/volumes/full/oclc/424023.json' + config.x.healthcheck_urls.whois = 'https://whois.arin.net/rest/poc/1AD-ARIN' + config.x.healthcheck_urls.berkeley_service_now = 'https://berkeley.service-now.com/kb_view.do?sysparm_article=KB0011960' + config.to_prepare do GoodJob::JobsController.class_eval do include AuthSupport diff --git a/config/initializers/okcomputer.rb b/config/initializers/okcomputer.rb index 33108522..5f07ad33 100644 --- a/config/initializers/okcomputer.rb +++ b/config/initializers/okcomputer.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true require 'net/smtp' +require 'berkeley_library/util/uris/head_check' # Health check configuration - OkComputer.logger = Rails.logger OkComputer.check_in_parallel = true @@ -58,11 +58,29 @@ def check end # rubocop:enable Metrics/MethodLength, Metrics/AbcSize +# Ensure SMTP can connect +OkComputer::Registry.register 'mail-connectivity', MailConnectivityCheck.new if ActionMailer::Base.delivery_method == :smtp + # 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 SMTP can connect -OkComputer::Registry.register 'mail-connectivity', MailConnectivityCheck.new if ActionMailer::Base.delivery_method == :smtp +# Ensure TIND API is working. +tind_health_check_url = "#{Rails.application.config.tind_base_uri}api/v1/search?In=en" +OkComputer::Registry.register 'tind-api', BerkeleyLibrary::Util::HeadCheck.new(tind_health_check_url) + +# Ensure HathiTrust API is working. +OkComputer::Registry.register 'hathitrust-api', BerkeleyLibrary::Util::HeadCheck.new(Rails.application.config.x.healthcheck_urls.hathiTrust) + +# Ensure ARIN Whois API is working. +OkComputer::Registry.register 'whois-arin-api', BerkeleyLibrary::Util::HeadCheck.new(Rails.application.config.x.healthcheck_urls.whois) + +# Ensure Berkeley ServiceNow is accessible. +OkComputer::Registry.register 'berkeley-service-now', BerkeleyLibrary::Util::HeadCheck.new(Rails.application.config.x.healthcheck_urls.berkeley_service_now) + +# Ensure PayPal Payflow is accessible. +OkComputer::Registry.register 'paypal-payflow', OkComputer::HttpCheck.new(Rails.application.config.paypal_payflow_url) + +# Since the WorldCat API service requests dynamically generated OCLC tokens, we are not doing a health check for it. diff --git a/spec/request/okcomputer_spec.rb b/spec/request/okcomputer_spec.rb index 1f294365..c97aeced 100644 --- a/spec/request/okcomputer_spec.rb +++ b/spec/request/okcomputer_spec.rb @@ -3,6 +3,12 @@ RSpec.describe 'OKComputer', type: :request do before do allow(Alma::User).to receive(:find).and_return(Alma::User.new) + tind_health_check_url = "#{Rails.application.config.tind_base_uri}api/v1/search?In=en" + stub_request(:head, tind_health_check_url).to_return(status: 200) + stub_request(:head, Rails.application.config.x.healthcheck_urls.whois).to_return(status: 200) + stub_request(:head, Rails.application.config.x.healthcheck_urls.hathiTrust).to_return(status: 200) + stub_request(:head, Rails.application.config.x.healthcheck_urls.berkeley_service_now).to_return(status: 200) + stub_request(:get, Rails.application.config.paypal_payflow_url).to_return(status: 200) end it 'is mounted at /okcomputer' do @@ -25,6 +31,11 @@ database alma-patron-lookup database-migrations + tind-api + whois-arin-api + paypal-payflow + hathitrust-api + berkeley-service-now ] end end @@ -45,6 +56,11 @@ database alma-patron-lookup database-migrations + tind-api + whois-arin-api + paypal-payflow + hathitrust-api + berkeley-service-now mail-connectivity ] end