From 57291dd0b5ca47a2e4c10efd75f61ee527316c68 Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Thu, 14 Nov 2024 07:08:59 -0500 Subject: [PATCH 1/9] Remove allowed_extra_analytics changelog: Internal, Analytics, Document analytics events --- spec/features/idv/get_proofing_results_job_scenarios_spec.rb | 2 +- spec/jobs/get_usps_ready_proofing_results_job_spec.rb | 2 +- spec/jobs/get_usps_waiting_proofing_results_job_spec.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/features/idv/get_proofing_results_job_scenarios_spec.rb b/spec/features/idv/get_proofing_results_job_scenarios_spec.rb index f28bc7fe37c..610e08c0614 100644 --- a/spec/features/idv/get_proofing_results_job_scenarios_spec.rb +++ b/spec/features/idv/get_proofing_results_job_scenarios_spec.rb @@ -1,7 +1,7 @@ require 'rails_helper' require 'axe-rspec' -RSpec.feature 'GetUspsProofingResultsJob Scenarios', js: true, allowed_extra_analytics: [:*] do +RSpec.feature 'GetUspsProofingResultsJob Scenarios', js: true do include OidcAuthHelper include UspsIppHelper include ActiveJob::TestHelper 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 0500a8fb50c..f85c706bf5f 100644 --- a/spec/jobs/get_usps_ready_proofing_results_job_spec.rb +++ b/spec/jobs/get_usps_ready_proofing_results_job_spec.rb @@ -1,6 +1,6 @@ require 'rails_helper' -RSpec.describe GetUspsReadyProofingResultsJob, allowed_extra_analytics: [:*] do +RSpec.describe GetUspsReadyProofingResultsJob do include UspsIppHelper let(:reprocess_delay_minutes) { 2.0 } 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 57bf43b1389..e0a90b58bbc 100644 --- a/spec/jobs/get_usps_waiting_proofing_results_job_spec.rb +++ b/spec/jobs/get_usps_waiting_proofing_results_job_spec.rb @@ -1,6 +1,6 @@ require 'rails_helper' -RSpec.describe GetUspsWaitingProofingResultsJob, allowed_extra_analytics: [:*] do +RSpec.describe GetUspsWaitingProofingResultsJob do include UspsIppHelper let(:reprocess_delay_minutes) { 2.0 } From 92570b7da7f1f1dfed7b93fda753b6796c46d631 Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Wed, 20 Nov 2024 09:55:43 -0500 Subject: [PATCH 2/9] Document analytics attributes --- app/services/analytics_events.rb | 247 +++++++++++++++++++++++++------ 1 file changed, 200 insertions(+), 47 deletions(-) diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index 8e867239b69..7272b876a71 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -3310,6 +3310,11 @@ def idv_in_person_usps_proofing_enrollment_code_email_received( # @param [Integer] enrollments_failed number of enrollments which failed identity proofing # @param [Integer] enrollments_in_progress number of enrollments which did not have any change # @param [Integer] enrollments_passed number of enrollments which passed identity proofing + # @param [Integer] enrollments_network_error + # @param [Integer] enrollments_cancelled + # @param [Float] percent_enrollments_errored + # @param [Float] percent_enrollments_network_error + # @param [String] job_name def idv_in_person_usps_proofing_results_job_completed( duration_seconds:, enrollments_checked:, @@ -3318,17 +3323,27 @@ def idv_in_person_usps_proofing_results_job_completed( enrollments_failed:, enrollments_in_progress:, enrollments_passed:, + enrollments_network_error:, + enrollments_cancelled:, + percent_enrollments_errored:, + percent_enrollments_network_error:, + job_name:, **extra ) track_event( 'GetUspsProofingResultsJob: Job completed', - duration_seconds: duration_seconds, - enrollments_checked: enrollments_checked, - enrollments_errored: enrollments_errored, - enrollments_expired: enrollments_expired, - enrollments_failed: enrollments_failed, - enrollments_in_progress: enrollments_in_progress, - enrollments_passed: enrollments_passed, + duration_seconds:, + enrollments_checked:, + enrollments_errored:, + enrollments_expired:, + enrollments_failed:, + enrollments_in_progress:, + enrollments_passed:, + enrollments_network_error:, + enrollments_cancelled:, + percent_enrollments_errored:, + percent_enrollments_network_error:, + job_name:, **extra, ) end @@ -3353,27 +3368,57 @@ def idv_in_person_usps_proofing_results_job_deadline_passed_email_exception( end # Tracks deadline email initiated during GetUspsProofingResultsJob + # @param [String] enrollment_code # @param [String] enrollment_id + # @param [Time] timestamp + # @param [String] service_provider + # @param [Integer] wait_until + # @param [String] job_name def idv_in_person_usps_proofing_results_job_deadline_passed_email_initiated( + enrollment_code:, enrollment_id:, + timestamp:, + service_provider:, + wait_until:, + job_name:, **extra ) track_event( 'GetUspsProofingResultsJob: deadline passed email initiated', - enrollment_id: enrollment_id, + enrollment_code:, + enrollment_id:, + timestamp:, + service_provider:, + wait_until:, + job_name:, **extra, ) end # Tracks emails that are initiated during GetUspsProofingResultsJob # @param [String] email_type success, failed or failed fraud + # @param [String] enrollment_code + # @param [Time] timestamp + # @param [String] service_provider + # @param [Integer] wait_until + # @param [String] job_name def idv_in_person_usps_proofing_results_job_email_initiated( email_type:, + enrollment_code:, + timestamp:, + service_provider:, + wait_until:, + job_name:, **extra ) track_event( 'GetUspsProofingResultsJob: Success or failure email initiated', - email_type: email_type, + email_type:, + enrollment_code:, + timestamp:, + service_provider:, + wait_until:, + job_name:, **extra, ) end @@ -3404,11 +3449,31 @@ def idv_in_person_usps_proofing_results_job_enrollment_incomplete( # @param [String] enrollment_code # @param [String] enrollment_id # @param [Float] minutes_since_established + # @param [Float] minutes_since_last_status_check + # @param [Float] minutes_since_last_status_check_completed + # @param [Float] minutes_since_last_status_update + # @param [Float] minutes_to_completion + # @param [Boolean] fraud_suspected + # @param [String] primary_id_type + # @param [String] secondary_id_type + # @param [String] failure_reason + # @param [String] transaction_end_date_time + # @param [String] transaction_start_date_time + # @param [String] status + # @param [String] assurance_level + # @param [String] proofing_post_office + # @param [String] proofing_city + # @param [String] proofing_state + # @param [String] scan_count + # @param [String] response_message # @param [Boolean] passed did this enrollment pass or fail? # @param [String] reason why did this enrollment pass or fail? # @param [String] tmx_status the tmx_status of the enrollment profile profile # @param [Integer] profile_age_in_seconds How many seconds have passed since profile created - # @param [Boolean] fraud_suspected + # @param [Boolean] response_present + # @param [String] job_name + # @param [Boolean] enhanced_ipp + # @param [String] issuer def idv_in_person_usps_proofing_results_job_enrollment_updated( enrollment_code:, enrollment_id:, @@ -3417,19 +3482,59 @@ def idv_in_person_usps_proofing_results_job_enrollment_updated( reason:, tmx_status:, profile_age_in_seconds:, + minutes_since_last_status_check:, + minutes_since_last_status_check_completed:, + minutes_since_last_status_update:, + minutes_to_completion:, + response_present:, + job_name:, + enhanced_ipp:, + issuer:, fraud_suspected: nil, + primary_id_type: nil, + secondary_id_type: nil, + failure_reason: nil, + transaction_end_date_time: nil, + transaction_start_date_time: nil, + status: nil, + assurance_level: nil, + proofing_post_office: nil, + proofing_city: nil, + proofing_state: nil, + scan_count: nil, + response_message: nil, **extra ) track_event( 'GetUspsProofingResultsJob: Enrollment status updated', - enrollment_code: enrollment_code, - enrollment_id: enrollment_id, - minutes_since_established: minutes_since_established, - passed: passed, - reason: reason, - tmx_status: tmx_status, - profile_age_in_seconds: profile_age_in_seconds, - fraud_suspected: fraud_suspected, + enrollment_code:, + enrollment_id:, + minutes_since_established:, + passed:, + reason:, + tmx_status:, + profile_age_in_seconds:, + minutes_since_last_status_check:, + minutes_since_last_status_check_completed:, + minutes_since_last_status_update:, + minutes_to_completion:, + fraud_suspected:, + primary_id_type:, + secondary_id_type:, + failure_reason:, + transaction_end_date_time:, + transaction_start_date_time:, + status:, + assurance_level:, + proofing_post_office:, + proofing_city:, + proofing_state:, + scan_count:, + response_present:, + response_message:, + job_name:, + enhanced_ipp:, + issuer:, **extra, ) end @@ -3442,6 +3547,7 @@ def idv_in_person_usps_proofing_results_job_enrollment_updated( # @param [String] enrollment_code # @param [Float] minutes_since_established # @param [Float] minutes_since_last_status_check + # @param [Float] minutes_since_last_status_check_completed # @param [Float] minutes_since_last_status_update # @param [Float] minutes_to_completion # @param [Boolean] fraud_suspected @@ -3456,8 +3562,11 @@ def idv_in_person_usps_proofing_results_job_enrollment_updated( # @param [String] proofing_city # @param [String] proofing_state # @param [String] scan_count + # @param [Boolean] response_present # @param [String] response_message # @param [Integer] response_status_code + # @param [String] job_name + # @param [String] issuer def idv_in_person_usps_proofing_results_job_exception( reason:, enrollment_id:, @@ -3466,6 +3575,7 @@ def idv_in_person_usps_proofing_results_job_exception( exception_message: nil, enrollment_code: nil, minutes_since_last_status_check: nil, + minutes_since_last_status_check_completed: nil, minutes_since_last_status_update: nil, minutes_to_completion: nil, fraud_suspected: nil, @@ -3480,35 +3590,42 @@ def idv_in_person_usps_proofing_results_job_exception( proofing_city: nil, proofing_state: nil, scan_count: nil, + response_present: nil, response_message: nil, response_status_code: nil, + job_name: nil, + issuer: nil, **extra ) track_event( 'GetUspsProofingResultsJob: Exception raised', - reason: reason, - enrollment_id: enrollment_id, - exception_class: exception_class, - exception_message: exception_message, - enrollment_code: enrollment_code, - minutes_since_established: minutes_since_established, - minutes_since_last_status_check: minutes_since_last_status_check, - minutes_since_last_status_update: minutes_since_last_status_update, - minutes_to_completion: minutes_to_completion, - fraud_suspected: fraud_suspected, - primary_id_type: primary_id_type, - secondary_id_type: secondary_id_type, - failure_reason: failure_reason, - transaction_end_date_time: transaction_end_date_time, - transaction_start_date_time: transaction_start_date_time, - status: status, - assurance_level: assurance_level, - proofing_post_office: proofing_post_office, - proofing_city: proofing_city, - proofing_state: proofing_state, - scan_count: scan_count, - response_message: response_message, - response_status_code: response_status_code, + reason:, + enrollment_id:, + exception_class:, + exception_message:, + enrollment_code:, + minutes_since_established:, + minutes_since_last_status_check:, + minutes_since_last_status_check_completed:, + minutes_since_last_status_update:, + minutes_to_completion:, + fraud_suspected:, + primary_id_type:, + secondary_id_type:, + failure_reason:, + transaction_end_date_time:, + transaction_start_date_time:, + status:, + assurance_level:, + proofing_post_office:, + proofing_city:, + proofing_state:, + scan_count:, + response_present:, + response_message:, + response_status_code:, + job_name:, + issuer:, **extra, ) end @@ -3546,36 +3663,72 @@ def idv_in_person_usps_proofing_results_job_started( # @param [String] enrollment_code # @param [String] enrollment_id # @param [Float] minutes_since_established + # @param [Float] minutes_since_last_status_check + # @param [Float] minutes_since_last_status_check_completed + # @param [Float] minutes_since_last_status_update + # @param [Float] minutes_to_completion + # @param [String] issuer + # @param [String] job_name # @param [String] response_message # @param [String] reason why was this error unexpected? def idv_in_person_usps_proofing_results_job_unexpected_response( enrollment_code:, enrollment_id:, minutes_since_established:, + minutes_since_last_status_check:, + minutes_since_last_status_check_completed:, + minutes_since_last_status_update:, + minutes_to_completion:, + issuer:, + job_name:, response_message:, reason:, **extra ) track_event( 'GetUspsProofingResultsJob: Unexpected response received', - enrollment_code: enrollment_code, - enrollment_id: enrollment_id, - minutes_since_established: minutes_since_established, - response_message: response_message, - reason: reason, + enrollment_code:, + enrollment_id:, + minutes_since_established:, + response_message:, + reason:, + minutes_since_last_status_check:, + minutes_since_last_status_check_completed:, + minutes_since_last_status_update:, + minutes_to_completion:, + issuer:, + job_name:, **extra, ) end # A user has been moved to fraud review after completing proofing at the USPS + # @param [String] enrollment_code # @param [String] enrollment_id + # @param [Float] minutes_since_established + # @param [Float] minutes_since_last_status_check + # @param [Float] minutes_since_last_status_update + # @param [Float] minutes_to_completion + # @param [String] issuer def idv_in_person_usps_proofing_results_job_user_sent_to_fraud_review( + enrollment_code:, enrollment_id:, + minutes_since_established:, + minutes_since_last_status_check:, + minutes_since_last_status_update:, + minutes_to_completion:, + issuer:, **extra ) track_event( :idv_in_person_usps_proofing_results_job_user_sent_to_fraud_review, - enrollment_id: enrollment_id, + enrollment_code:, + enrollment_id:, + minutes_since_established:, + minutes_since_last_status_check:, + minutes_since_last_status_update:, + minutes_to_completion:, + issuer:, **extra, ) end From ad115c798af2bba71a4e381aca57881d0b814a30 Mon Sep 17 00:00:00 2001 From: gina-yamada Date: Thu, 12 Dec 2024 09:49:10 -0700 Subject: [PATCH 3/9] document analytic attr --- app/services/analytics_events.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index 7272b876a71..54c6b22b12b 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -3630,12 +3630,27 @@ def idv_in_person_usps_proofing_results_job_exception( ) end + # @param [String] enrollment_code:, + # @param [String] job_name:, + # @param [String] service_provider:, + # @param [Time] timestamp:, + # @param [Integer] wait_until:, # Tracks please call emails that are initiated during GetUspsProofingResultsJob def idv_in_person_usps_proofing_results_job_please_call_email_initiated( + enrollment_code:, + job_name:, + service_provider:, + timestamp:, + wait_until:, **extra ) track_event( :idv_in_person_usps_proofing_results_job_please_call_email_initiated, + enrollment_code:, + job_name:, + service_provider:, + timestamp:, + wait_until:, **extra, ) end @@ -3707,6 +3722,7 @@ def idv_in_person_usps_proofing_results_job_unexpected_response( # @param [String] enrollment_id # @param [Float] minutes_since_established # @param [Float] minutes_since_last_status_check + # @parmm [Float] minutes_since_last_status_check_completed # @param [Float] minutes_since_last_status_update # @param [Float] minutes_to_completion # @param [String] issuer @@ -3715,6 +3731,7 @@ def idv_in_person_usps_proofing_results_job_user_sent_to_fraud_review( enrollment_id:, minutes_since_established:, minutes_since_last_status_check:, + minutes_since_last_status_check_completed:, minutes_since_last_status_update:, minutes_to_completion:, issuer:, @@ -3726,6 +3743,7 @@ def idv_in_person_usps_proofing_results_job_user_sent_to_fraud_review( enrollment_id:, minutes_since_established:, minutes_since_last_status_check:, + minutes_since_last_status_check_completed:, minutes_since_last_status_update:, minutes_to_completion:, issuer:, From 05e60d0a3f8bb6edd5135eb4a80a568a8ed9a41b Mon Sep 17 00:00:00 2001 From: gina-yamada Date: Thu, 12 Dec 2024 09:50:53 -0700 Subject: [PATCH 4/9] Remove allowed_extra_analytics for recaptcha --- spec/forms/recaptcha_enterprise_form_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/forms/recaptcha_enterprise_form_spec.rb b/spec/forms/recaptcha_enterprise_form_spec.rb index 6a133b14570..280d840bc08 100644 --- a/spec/forms/recaptcha_enterprise_form_spec.rb +++ b/spec/forms/recaptcha_enterprise_form_spec.rb @@ -390,7 +390,7 @@ end end - context 'with extra analytics properties', allowed_extra_analytics: [:extra] do + context 'with extra analytics properties' do let(:extra_analytics_properties) { { extra: true } } it 'logs analytics of the body' do From f5d9c880e38f2d89e53931c6d4caecbf271d88c8 Mon Sep 17 00:00:00 2001 From: gina-yamada Date: Thu, 12 Dec 2024 10:18:46 -0700 Subject: [PATCH 5/9] update param documentation --- app/services/analytics_events.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index 54c6b22b12b..e43498b4ac6 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -3630,12 +3630,12 @@ def idv_in_person_usps_proofing_results_job_exception( ) end - # @param [String] enrollment_code:, - # @param [String] job_name:, - # @param [String] service_provider:, - # @param [Time] timestamp:, - # @param [Integer] wait_until:, # Tracks please call emails that are initiated during GetUspsProofingResultsJob + # @param [String] enrollment_code + # @param [String] job_name + # @param [String] service_provider + # @param [Time] timestamp + # @param [Integer] wait_until def idv_in_person_usps_proofing_results_job_please_call_email_initiated( enrollment_code:, job_name:, From 1633747fbe7d65d1d146ce2a6cd3e2f8d0d2852c Mon Sep 17 00:00:00 2001 From: gina-yamada Date: Thu, 12 Dec 2024 12:03:27 -0700 Subject: [PATCH 6/9] document analytic attri for reCAPTCHA --- app/services/analytics_events.rb | 5 ++--- spec/forms/recaptcha_enterprise_form_spec.rb | 3 --- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index e43498b4ac6..17c27ad0ee1 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -3722,7 +3722,7 @@ def idv_in_person_usps_proofing_results_job_unexpected_response( # @param [String] enrollment_id # @param [Float] minutes_since_established # @param [Float] minutes_since_last_status_check - # @parmm [Float] minutes_since_last_status_check_completed + # @param [Float] minutes_since_last_status_check_completed # @param [Float] minutes_since_last_status_update # @param [Float] minutes_to_completion # @param [String] issuer @@ -6660,8 +6660,7 @@ def recaptcha_verify_result_received( score_threshold:, evaluated_as_valid:, form_class:, - exception_class:, - recaptcha_action:, + recaptcha_action:, exception_class: nil, phone_country_code: nil, **extra ) diff --git a/spec/forms/recaptcha_enterprise_form_spec.rb b/spec/forms/recaptcha_enterprise_form_spec.rb index 280d840bc08..36dcd46616f 100644 --- a/spec/forms/recaptcha_enterprise_form_spec.rb +++ b/spec/forms/recaptcha_enterprise_form_spec.rb @@ -391,8 +391,6 @@ end context 'with extra analytics properties' do - let(:extra_analytics_properties) { { extra: true } } - it 'logs analytics of the body' do result @@ -409,7 +407,6 @@ score_threshold: score_threshold, form_class: 'RecaptchaEnterpriseForm', recaptcha_action:, - extra: true, ) end end From 03ace69ebc945ea11273e4eaa621fcd474dc0510 Mon Sep 17 00:00:00 2001 From: gina-yamada Date: Thu, 12 Dec 2024 12:42:09 -0700 Subject: [PATCH 7/9] restore original recaptcha args --- app/services/analytics_events.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index 17c27ad0ee1..ee99b31b8bc 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -6660,7 +6660,8 @@ def recaptcha_verify_result_received( score_threshold:, evaluated_as_valid:, form_class:, - recaptcha_action:, exception_class: nil, + exception_class:, + recaptcha_action:, phone_country_code: nil, **extra ) From 0375dd60942aea54563592432caf51c7b9262c9f Mon Sep 17 00:00:00 2001 From: gina-yamada Date: Thu, 12 Dec 2024 12:44:00 -0700 Subject: [PATCH 8/9] delete allowed_extra_analytics in recaptcha spec --- spec/forms/recaptcha_form_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/forms/recaptcha_form_spec.rb b/spec/forms/recaptcha_form_spec.rb index 63bf1096e7d..6dad8d6e1f4 100644 --- a/spec/forms/recaptcha_form_spec.rb +++ b/spec/forms/recaptcha_form_spec.rb @@ -309,7 +309,7 @@ ) end - context 'with extra analytics properties', allowed_extra_analytics: [:extra] do + context 'with extra analytics properties' do let(:extra_analytics_properties) { { extra: true } } it 'logs analytics of the body' do From d48b12b4ba75d8783691748647cf570fbab70024 Mon Sep 17 00:00:00 2001 From: gina-yamada Date: Fri, 13 Dec 2024 08:28:13 -0700 Subject: [PATCH 9/9] use allowed_extra_analytics to test extra props --- spec/forms/recaptcha_enterprise_form_spec.rb | 5 ++++- spec/forms/recaptcha_form_spec.rb | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/spec/forms/recaptcha_enterprise_form_spec.rb b/spec/forms/recaptcha_enterprise_form_spec.rb index 36dcd46616f..6a133b14570 100644 --- a/spec/forms/recaptcha_enterprise_form_spec.rb +++ b/spec/forms/recaptcha_enterprise_form_spec.rb @@ -390,7 +390,9 @@ end end - context 'with extra analytics properties' do + context 'with extra analytics properties', allowed_extra_analytics: [:extra] do + let(:extra_analytics_properties) { { extra: true } } + it 'logs analytics of the body' do result @@ -407,6 +409,7 @@ score_threshold: score_threshold, form_class: 'RecaptchaEnterpriseForm', recaptcha_action:, + extra: true, ) end end diff --git a/spec/forms/recaptcha_form_spec.rb b/spec/forms/recaptcha_form_spec.rb index 6dad8d6e1f4..63bf1096e7d 100644 --- a/spec/forms/recaptcha_form_spec.rb +++ b/spec/forms/recaptcha_form_spec.rb @@ -309,7 +309,7 @@ ) end - context 'with extra analytics properties' do + context 'with extra analytics properties', allowed_extra_analytics: [:extra] do let(:extra_analytics_properties) { { extra: true } } it 'logs analytics of the body' do