From 237185102f18d2a0543fd116ce206d13f90f6990 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Mon, 18 Mar 2024 13:42:08 +0000 Subject: [PATCH] feat: stress testing efficiency improvements --- app/models/log.rb | 49 +++++++++++++++++++++++--------- app/services/address_client.rb | 2 +- app/services/postcode_service.rb | 2 +- app/services/uprn_client.rb | 2 +- 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/app/models/log.rb b/app/models/log.rb index 8847812d3..1b7d2a826 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -59,16 +59,8 @@ class Log < ApplicationRecord def process_uprn_change! if uprn.present? - service = UprnClient.new(uprn) - service.call - - if service.error.present? - errors.add(:uprn, :uprn_error, message: service.error) - errors.add(:uprn_selection, :uprn_error, message: service.error) - return - end - - presenter = UprnDataPresenter.new(service.result) + presenter = uprn_presenter + return if presenter.nil? self.uprn_known = 1 self.uprn_confirmed = nil unless skip_update_uprn_confirmed @@ -82,14 +74,28 @@ class Log < ApplicationRecord end end + def uprn_presenter + @uprn_presenter ||= begin + service = UprnClient.new(uprn) + service.call + return if service.result.blank? + + if service.error.present? + errors.add(:uprn, :uprn_error, message: service.error) + errors.add(:uprn_selection, :uprn_error, message: service.error) + return + end + + UprnDataPresenter.new(service.result) + end + end + def process_address_change! if uprn_selection.present? || select_best_address_match.present? if select_best_address_match - service = AddressClient.new(address_string) - service.call - return nil if service.result.blank? || service.error.present? + presenter = address_presenter + return nil if presenter.nil? - presenter = AddressDataPresenter.new(service.result.first) os_match_threshold_for_bulk_upload = 0.7 if presenter.match >= os_match_threshold_for_bulk_upload self.uprn_selection = presenter.uprn @@ -116,6 +122,21 @@ class Log < ApplicationRecord end end + def address_presenter + @address_presenter ||= begin + service = AddressClient.new(address_string) + service.call + return nil if service.result.blank? + + if service.error.present? + errors.add(:address_line1_input, :address_error, message: service.error) + errors.add(:postcode_full_input, :address_error, message: service.error) + return + end + AddressDataPresenter.new(service.result.first) + end + end + def address_string "#{address_line1_input}, #{postcode_full_input}" end diff --git a/app/services/address_client.rb b/app/services/address_client.rb index 670fbe643..831dfde54 100644 --- a/app/services/address_client.rb +++ b/app/services/address_client.rb @@ -30,7 +30,7 @@ private client.use_ssl = true client.verify_mode = OpenSSL::SSL::VERIFY_PEER client.max_retries = 3 - client.read_timeout = 10 # seconds + client.read_timeout = 30 # seconds client end diff --git a/app/services/postcode_service.rb b/app/services/postcode_service.rb index 74c1f4895..c3c6dcfdd 100644 --- a/app/services/postcode_service.rb +++ b/app/services/postcode_service.rb @@ -11,7 +11,7 @@ class PostcodeService begin # URI encoding only supports ASCII characters ascii_postcode = self.class.clean(postcode) - Timeout.timeout(5) { postcode_lookup = @pio.lookup(ascii_postcode) } + Timeout.timeout(30) { postcode_lookup = @pio.lookup(ascii_postcode) } rescue Timeout::Error Rails.logger.warn("Postcodes.io lookup timed out") end diff --git a/app/services/uprn_client.rb b/app/services/uprn_client.rb index 2e57a6072..7c9bf8940 100644 --- a/app/services/uprn_client.rb +++ b/app/services/uprn_client.rb @@ -30,7 +30,7 @@ private client.use_ssl = true client.verify_mode = OpenSSL::SSL::VERIFY_PEER client.max_retries = 3 - client.read_timeout = 10 # seconds + client.read_timeout = 30 # seconds client end