Browse Source

feat: stress testing efficiency improvements

pull/2317/head
natdeanlewissoftwire 2 years ago
parent
commit
237185102f
  1. 49
      app/models/log.rb
  2. 2
      app/services/address_client.rb
  3. 2
      app/services/postcode_service.rb
  4. 2
      app/services/uprn_client.rb

49
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

2
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

2
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

2
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

Loading…
Cancel
Save