diff --git a/app/jobs/get_usps_proofing_results_job.rb b/app/jobs/get_usps_proofing_results_job.rb index 4cbf68195e8..66324cb618a 100644 --- a/app/jobs/get_usps_proofing_results_job.rb +++ b/app/jobs/get_usps_proofing_results_job.rb @@ -20,6 +20,7 @@ def perform(_now) @enrollment_outcomes = { enrollments_checked: 0, enrollments_errored: 0, + enrollments_network_error: 0, enrollments_expired: 0, enrollments_failed: 0, enrollments_in_progress: 0, @@ -45,7 +46,8 @@ def perform(_now) analytics.idv_in_person_usps_proofing_results_job_completed( **enrollment_outcomes, duration_seconds: (Time.zone.now - started_at).seconds.round(2), - percent_enrollments_errored: percent_errored, + percent_enrollments_errored: summary_percent(:enrollments_errored), + percent_enrollments_network_error: summary_percent(:enrollments_network_error), job_name: self.class.name, ) @@ -112,11 +114,11 @@ def analytics(user: AnonymousUser.new) Analytics.new(user: user, request: nil, session: {}, sp: nil) end - def percent_errored + def summary_percent(outcomes_key) error_rate = 0 if enrollment_outcomes[:enrollments_checked] > 0 error_rate = - (enrollment_outcomes[:enrollments_errored].fdiv( + (enrollment_outcomes[outcomes_key].fdiv( enrollment_outcomes[:enrollments_checked], ) * 100).round(2) end @@ -159,7 +161,12 @@ def handle_client_or_server_error(err, enrollment) response_status_code: err.response_status, job_name: self.class.name, ) - enrollment_outcomes[:enrollments_errored] += 1 + + if err.is_a?(Faraday::TimeoutError) || err.is_a?(Faraday::ConnectionFailed) + enrollment_outcomes[:enrollments_network_error] += 1 + else + enrollment_outcomes[:enrollments_errored] += 1 + end end def handle_standard_error(err, enrollment) diff --git a/app/jobs/get_usps_ready_proofing_results_job.rb b/app/jobs/get_usps_ready_proofing_results_job.rb index 89d63b6c293..c31e48444d2 100644 --- a/app/jobs/get_usps_ready_proofing_results_job.rb +++ b/app/jobs/get_usps_ready_proofing_results_job.rb @@ -7,6 +7,7 @@ def perform(_now) @enrollment_outcomes = { enrollments_checked: 0, enrollments_errored: 0, + enrollments_network_error: 0, enrollments_expired: 0, enrollments_failed: 0, enrollments_in_progress: 0, @@ -31,7 +32,8 @@ def perform(_now) analytics.idv_in_person_usps_proofing_results_job_completed( **enrollment_outcomes, duration_seconds: (Time.zone.now - started_at).seconds.round(2), - percent_enrollments_errored: percent_errored, + percent_enrollments_errored: summary_percent(:enrollments_errored), + percent_enrollments_network_error: summary_percent(:enrollments_network_error), job_name: self.class.name, ) diff --git a/app/jobs/get_usps_waiting_proofing_results_job.rb b/app/jobs/get_usps_waiting_proofing_results_job.rb index a848e3ff540..ffffb0a19bf 100644 --- a/app/jobs/get_usps_waiting_proofing_results_job.rb +++ b/app/jobs/get_usps_waiting_proofing_results_job.rb @@ -7,6 +7,7 @@ def perform(_now) @enrollment_outcomes = { enrollments_checked: 0, enrollments_errored: 0, + enrollments_network_error: 0, enrollments_expired: 0, enrollments_failed: 0, enrollments_in_progress: 0, @@ -31,7 +32,8 @@ def perform(_now) analytics.idv_in_person_usps_proofing_results_job_completed( **enrollment_outcomes, duration_seconds: (Time.zone.now - started_at).seconds.round(2), - percent_enrollments_errored: percent_errored, + percent_enrollments_errored: summary_percent(:enrollments_errored), + percent_enrollments_network_error: summary_percent(:enrollments_network_error), job_name: self.class.name, ) diff --git a/spec/jobs/get_usps_proofing_results_job_spec.rb b/spec/jobs/get_usps_proofing_results_job_spec.rb index 68aa6f07036..9908f09460f 100644 --- a/spec/jobs/get_usps_proofing_results_job_spec.rb +++ b/spec/jobs/get_usps_proofing_results_job_spec.rb @@ -320,6 +320,16 @@ end it 'logs a message with counts of various outcomes when the job completes (errored > 0)' do + pending_enrollments.append( + create( + :in_person_enrollment, :pending, + selected_location_details: { name: 'DEANWOOD' } + ), + create( + :in_person_enrollment, :pending, + selected_location_details: { name: 'DEANWOOD' } + ), + ) enrollment_records = InPersonEnrollment.where(id: pending_enrollments.map(&:id)) allow(InPersonEnrollment).to receive(:needs_usps_status_check). and_return(enrollment_records) @@ -329,19 +339,22 @@ { status: 500 }, request_failed_proofing_results_args, request_expired_proofing_results_args, - ) + ).and_raise(Faraday::TimeoutError).and_raise(Faraday::ConnectionFailed) + job.perform(Time.zone.now) expect(job_analytics).to have_logged_event( 'GetUspsProofingResultsJob: Job completed', duration_seconds: anything, - enrollments_checked: 5, + enrollments_checked: 7, enrollments_errored: 1, + enrollments_network_error: 2, enrollments_expired: 1, enrollments_failed: 1, enrollments_in_progress: 1, enrollments_passed: 1, - percent_enrollments_errored: 20.00, + percent_enrollments_errored: 14.29, + percent_enrollments_network_error: 28.57, job_name: 'GetUspsProofingResultsJob', ) @@ -366,11 +379,13 @@ duration_seconds: anything, enrollments_checked: 5, enrollments_errored: 0, + enrollments_network_error: 0, enrollments_expired: 0, enrollments_failed: 0, enrollments_in_progress: 0, enrollments_passed: 5, percent_enrollments_errored: 0.00, + percent_enrollments_network_error: 0.00, job_name: 'GetUspsProofingResultsJob', ) @@ -395,11 +410,13 @@ duration_seconds: anything, enrollments_checked: 0, enrollments_errored: 0, + enrollments_network_error: 0, enrollments_expired: 0, enrollments_failed: 0, enrollments_in_progress: 0, enrollments_passed: 0, percent_enrollments_errored: 0.00, + percent_enrollments_network_error: 0.00, job_name: 'GetUspsProofingResultsJob', ) @@ -1109,6 +1126,17 @@ ) end + context 'when a connection failed error occurs' do + before(:each) do + stub_request_proofing_results_with_connection_failed_error + end + + it_behaves_like( + 'enrollment_encountering_an_error_that_has_a_nil_response', + error_type: Faraday::ConnectionFailed, + ) + end + context 'when a nil status error occurs' do before(:each) do stub_request_proofing_results_with_nil_status_error diff --git a/spec/jobs/get_usps_ready_proofing_results_job_spec.rb b/spec/jobs/get_usps_ready_proofing_results_job_spec.rb index aeb0e452ed1..9b1ef90cc25 100644 --- a/spec/jobs/get_usps_ready_proofing_results_job_spec.rb +++ b/spec/jobs/get_usps_ready_proofing_results_job_spec.rb @@ -181,11 +181,13 @@ duration_seconds: anything, enrollments_checked: 5, enrollments_errored: 1, + enrollments_network_error: 0, enrollments_expired: 1, enrollments_failed: 1, enrollments_in_progress: 1, enrollments_passed: 1, percent_enrollments_errored: 20.00, + percent_enrollments_network_error: 0.00, job_name: 'GetUspsReadyProofingResultsJob', ) @@ -209,11 +211,13 @@ duration_seconds: anything, enrollments_checked: 5, enrollments_errored: 0, + enrollments_network_error: 0, enrollments_expired: 0, enrollments_failed: 0, enrollments_in_progress: 0, enrollments_passed: 5, percent_enrollments_errored: 0.00, + percent_enrollments_network_error: 0.00, job_name: 'GetUspsReadyProofingResultsJob', ) @@ -238,11 +242,13 @@ duration_seconds: anything, enrollments_checked: 0, enrollments_errored: 0, + enrollments_network_error: 0, enrollments_expired: 0, enrollments_failed: 0, enrollments_in_progress: 0, enrollments_passed: 0, percent_enrollments_errored: 0.00, + percent_enrollments_network_error: 0.00, job_name: 'GetUspsReadyProofingResultsJob', ) diff --git a/spec/jobs/get_usps_waiting_proofing_results_job_spec.rb b/spec/jobs/get_usps_waiting_proofing_results_job_spec.rb index c0dd8cac1e8..d42c67b4d9a 100644 --- a/spec/jobs/get_usps_waiting_proofing_results_job_spec.rb +++ b/spec/jobs/get_usps_waiting_proofing_results_job_spec.rb @@ -181,11 +181,13 @@ duration_seconds: anything, enrollments_checked: 5, enrollments_errored: 1, + enrollments_network_error: 0, enrollments_expired: 1, enrollments_failed: 1, enrollments_in_progress: 1, enrollments_passed: 1, percent_enrollments_errored: 20.00, + percent_enrollments_network_error: 0.00, job_name: 'GetUspsWaitingProofingResultsJob', ) @@ -209,11 +211,13 @@ duration_seconds: anything, enrollments_checked: 5, enrollments_errored: 0, + enrollments_network_error: 0, enrollments_expired: 0, enrollments_failed: 0, enrollments_in_progress: 0, enrollments_passed: 5, percent_enrollments_errored: 0.00, + percent_enrollments_network_error: 0.00, job_name: 'GetUspsWaitingProofingResultsJob', ) @@ -238,11 +242,13 @@ duration_seconds: anything, enrollments_checked: 0, enrollments_errored: 0, + enrollments_network_error: 0, enrollments_expired: 0, enrollments_failed: 0, enrollments_in_progress: 0, enrollments_passed: 0, percent_enrollments_errored: 0.00, + percent_enrollments_network_error: 0.00, job_name: 'GetUspsWaitingProofingResultsJob', ) diff --git a/spec/support/usps_ipp_helper.rb b/spec/support/usps_ipp_helper.rb index 07fd3497a40..723ccd64946 100644 --- a/spec/support/usps_ipp_helper.rb +++ b/spec/support/usps_ipp_helper.rb @@ -272,6 +272,13 @@ def stub_request_proofing_results_with_timeout_error ).to_raise(Faraday::TimeoutError) end + def stub_request_proofing_results_with_connection_failed_error + stub_request( + :post, + %r{/ivs-ippaas-api/IPPRest/resources/rest/getProofingResults}, + ).to_raise(Faraday::ConnectionFailed) + end + def stub_request_proofing_results_with_nil_status_error stub_request( :post,