Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# frozen_string_literal: true

require 'csv'
require 'reporting/irs_authentication_report'
require 'reporting/irs_registration_funnel_report'

module Reports
class IrsAuthenticationReport < BaseReport
REPORT_NAME = 'irs-authentication-report'
class IrsRegistrationFunnelReport < BaseReport
REPORT_NAME = 'irs-registration-funnel-report'

attr_reader :report_date

Expand All @@ -19,7 +19,7 @@ def perform(date = Time.zone.yesterday.end_of_day)

email_addresses = emails.select(&:present?)
if email_addresses.empty?
Rails.logger.warn 'No email addresses received - Authentication Report NOT SENT'
Rails.logger.warn 'No email addresses received - Registration Funnel Report NOT SENT'
return false
end

Expand All @@ -29,7 +29,7 @@ def perform(date = Time.zone.yesterday.end_of_day)

ReportMailer.tables_report(
email: email_addresses,
subject: "IRS Authentication Report - #{report_date.to_date}",
subject: "IRS Registration Funnel Report - #{report_date.to_date}",
reports: reports,
message: preamble,
attachment_format: :csv,
Expand Down Expand Up @@ -60,22 +60,22 @@ def preamble(env: Identity::Hostdata.env || 'local')
end

def reports
@reports ||= irs_authentication_report.as_emailable_reports
@reports ||= irs_registration_funnel_report.as_emailable_reports
end

def irs_authentication_report
@irs_authentication_report ||= Reporting::IrsAuthenticationReport.new(
def irs_registration_funnel_report
@irs_registration_funnel_report ||= Reporting::IrsRegistrationFunnelReport.new(
issuers: issuers,
time_range: report_date.all_week,
)
end

def issuers
[*IdentityConfig.store.irs_authentication_issuers]
[*IdentityConfig.store.irs_registration_funnel_issuers]
end

def emails
[*IdentityConfig.store.irs_authentication_emails]
[*IdentityConfig.store.irs_registration_funnel_emails]
end

def upload_to_s3(report_body, report_name: nil)
Expand Down
8 changes: 4 additions & 4 deletions config/application.yml.default
Original file line number Diff line number Diff line change
Expand Up @@ -235,13 +235,13 @@ in_person_results_delay_in_hours: 1
in_person_send_proofing_notifications_enabled: false
in_person_stop_expiring_enrollments: false
invalid_gpo_confirmation_zipcode: '00001'
irs_authentication_emails: '[]'
irs_authentication_issuers: '[]'
irs_credential_tenure_report_config: '[]'
irs_credential_tenure_report_issuers: '[]'
irs_credentials_emails: '[]'
irs_fraud_metrics_emails: '[]'
irs_fraud_metrics_issuers: '[]'
irs_registration_funnel_emails: '[]'
irs_registration_funnel_issuers: '[]'
irs_verification_report_config: '[]'
irs_verification_report_issuers: '[]'

Expand Down Expand Up @@ -609,10 +609,10 @@ test:
hmac_fingerprinter_key: a2c813d4dca919340866ba58063e4072adc459b767a74cf2666d5c1eef3861db26708e7437abde1755eb24f4034386b0fea1850a1cb7e56bff8fae3cc6ade96c
hmac_fingerprinter_key_queue: '["old-key-one", "old-key-two"]'
identity_pki_disabled: true
irs_authentication_emails: '["g@example.com", "h@example.com"]'
irs_authentication_issuers: '["urn:gov:gsa:openidconnect.profiles:sp:sso:agency_name:app_name"]'
irs_fraud_metrics_emails: '["g@example.com", "h@example.com"]'
irs_fraud_metrics_issuers: '["urn:gov:gsa:openidconnect.profiles:sp:sso:agency_name:app_name"]'
irs_registration_funnel_emails: '["g@example.com", "h@example.com"]'
irs_registration_funnel_issuers: '["urn:gov:gsa:openidconnect.profiles:sp:sso:agency_name:app_name"]'
lexisnexis_trueid_account_id: 'test_account'
lockout_period_in_minutes: 5
logins_per_email_and_ip_limit: 2
Expand Down
4 changes: 2 additions & 2 deletions config/initializers/job_configurations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -245,8 +245,8 @@
args: -> { [Time.zone.yesterday.end_of_day] },
},
# Send previous week's authentication reports to irs
irs_weekly_authentication_report: {
class: 'Reports::IrsAuthenticationReport',
irs_weekly_registration_funnel_report: {
class: 'Reports::IrsRegistrationFunnelReport',
cron: cron_every_monday,
args: -> { [Time.zone.yesterday.end_of_day] },
},
Expand Down
4 changes: 2 additions & 2 deletions lib/identity_config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -180,8 +180,8 @@ def self.store
config.add(:facial_match_general_availability_enabled, type: :boolean)
config.add(:feature_idv_force_gpo_verification_enabled, type: :boolean)
config.add(:feature_idv_hybrid_flow_enabled, type: :boolean)
config.add(:irs_authentication_issuers, type: :json)
config.add(:irs_authentication_emails, type: :json)
config.add(:irs_registration_funnel_issuers, type: :json)
config.add(:irs_registration_funnel_emails, type: :json)
config.add(:irs_fraud_metrics_issuers, type: :json)
config.add(:irs_fraud_metrics_emails, type: :json)
config.add(:geo_data_file_path, type: :string)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,15 @@
end

module Reporting
class IrsAuthenticationReport
class IrsRegistrationFunnelReport
include Reporting::CloudwatchQueryQuoting

attr_reader :issuers, :time_range

module Events
OIDC_AUTH_REQUEST = 'OpenID Connect: authorization request'
EMAIL_CONFIRMATION = 'User Registration: Email Confirmation'
TWO_FA_SETUP_VISITED = 'User Registration: 2FA Setup visited'
USER_FULLY_REGISTERED = 'User Registration: User Fully Registered'
SP_REDIRECT = 'SP redirect initiated'

def self.all_events
constants.map { |c| const_get(c) }
Expand Down Expand Up @@ -67,7 +65,7 @@ def as_emailable_reports
filename: 'overview',
),
Reporting::EmailableReport.new(
title: 'Authentication Funnel Metrics',
title: 'Registration Funnel Metrics',
table: funnel_metrics_table,
filename: 'funnel_metrics',
),
Expand Down Expand Up @@ -115,14 +113,6 @@ def funnel_metrics_table
user_fully_registered,
format_as_percent(numerator: user_fully_registered, denominator: email_confirmation),
],
[
'Registration Success Rate',
sp_redirect_initiated_new_users,
format_as_percent(
numerator: sp_redirect_initiated_new_users,
denominator: email_confirmation,
),
],
]
end

Expand Down Expand Up @@ -197,23 +187,5 @@ def user_fully_registered
@user_fully_registered ||=
(data[Events::USER_FULLY_REGISTERED] & data[Events::EMAIL_CONFIRMATION]).count
end

def sp_redirect_initiated_new_users
@sp_redirect_initiated_new_users ||=
(data[Events::SP_REDIRECT] & data[Events::EMAIL_CONFIRMATION]).count
end

def sp_redirect_initiated_all
data[Events::SP_REDIRECT].count
end

def oidc_auth_request
data[Events::OIDC_AUTH_REQUEST].count
end

def sp_redirect_initiated_after_oidc
@sp_redirect_initiated_after_oidc ||=
(data[Events::SP_REDIRECT] & data[Events::OIDC_AUTH_REQUEST]).count
end
end
end
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
require 'rails_helper'

RSpec.describe Reports::IrsAuthenticationReport do
RSpec.describe Reports::IrsRegistrationFunnelReport do
let(:report_date) { Date.new(2021, 3, 2).in_time_zone('UTC').end_of_day }
let(:time_range) { report_date.all_month }
subject(:report) { Reports::IrsAuthenticationReport.new(report_date) }
subject(:report) { Reports::IrsRegistrationFunnelReport.new(report_date) }

let(:name) { 'irs-authentication-report' }
let(:name) { 'irs-registration-funnel-report' }
let(:s3_report_bucket_prefix) { 'reports-bucket' }
let(:report_folder) do
'int/irs-authentication-report/2021/2021-03-02.irs-authentication-report'
'int/irs-registration-funnel-report/2021/2021-03-02.irs-registration-funnel-report'
end

let(:expected_s3_paths) do
Expand Down Expand Up @@ -53,17 +53,17 @@
},
}

allow(IdentityConfig.store).to receive(:irs_authentication_emails)
allow(IdentityConfig.store).to receive(:irs_registration_funnel_emails)
.and_return(mock_test_auth_emails)

allow(report.irs_authentication_report).to receive(:funnel_metrics_table)
allow(report.irs_registration_funnel_report).to receive(:funnel_metrics_table)
.and_return(mock_funnel_metrics_data)
end

it 'sends out a report to just to team data' do
expect(ReportMailer).to receive(:tables_report).once.with(
email: anything,
subject: 'IRS Authentication Report - 2021-03-02',
subject: 'IRS Registration Funnel Report - 2021-03-02',
reports: anything,
message: report.preamble,
attachment_format: :csv,
Expand All @@ -73,7 +73,7 @@
end

it 'does not send out a report with no emails' do
allow(IdentityConfig.store).to receive(:irs_authentication_emails).and_return('')
allow(IdentityConfig.store).to receive(:irs_registration_funnel_emails).and_return('')

expect(report).to_not receive(:reports)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
require 'rails_helper'
require 'reporting/irs_authentication_report'
require 'reporting/irs_registration_funnel_report'

RSpec.describe Reporting::IrsAuthenticationReport do
RSpec.describe Reporting::IrsRegistrationFunnelReport do
let(:issuer) { 'my:example:issuer' }
let(:time_range) { Date.new(2022, 1, 1).in_time_zone('UTC').all_week }
let(:expected_definitions_table) do
Expand Down Expand Up @@ -30,11 +30,10 @@
['Registration Demand', 4, '100.0%'],
['Registration Failures', 2, '50.0%'],
['Registration Successes', 2, '50.0%'],
['Registration Success Rate', 1, '25.0%'],
]
end

subject(:report) { Reporting::IrsAuthenticationReport.new(issuers: [issuer], time_range:) }
subject(:report) { Reporting::IrsRegistrationFunnelReport.new(issuers: [issuer], time_range:) }

before do
travel_to Time.zone.now.beginning_of_day
Expand Down Expand Up @@ -113,7 +112,7 @@
table: expected_overview_table,
),
Reporting::EmailableReport.new(
title: 'Authentication Funnel Metrics',
title: 'Registration Funnel Metrics',
filename: 'funnel_metrics',
table: expected_funnel_metrics_table,
),
Expand Down
12 changes: 6 additions & 6 deletions spec/mailers/previews/report_mailer_preview.rb
Original file line number Diff line number Diff line change
Expand Up @@ -109,17 +109,17 @@ def fraud_metrics_report
)
end

def irs_authentication_report
irs_authentication_report = Reports::IrsAuthenticationReport.new(Time.zone.yesterday)
def irs_registration_funnel_report
irs_registration_funnel_report = Reports::IrsRegistrationFunnelReport.new(Time.zone.yesterday)

stub_cloudwatch_client(irs_authentication_report.irs_authentication_report)
stub_cloudwatch_client(irs_registration_funnel_report.irs_registration_funnel_report)

ReportMailer.tables_report(
email: 'test@example.com',
subject: "Example IRS Authentication Report - #{Time.zone.now.to_date}",
message: irs_authentication_report.preamble,
subject: "Example IRS Registration Funnel Report - #{Time.zone.now.to_date}",
message: irs_registration_funnel_report.preamble,
attachment_format: :csv,
reports: irs_authentication_report.reports,
reports: irs_registration_funnel_report.reports,
)
end

Expand Down