-
Notifications
You must be signed in to change notification settings - Fork 66
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
95915 Add pega notification email workflow - IVC CHAMPVA forms #19795
Conversation
@@ -1361,6 +1361,7 @@ vanotify: | |||
ivc_champva: | |||
api_key: fake_secret | |||
failure_email_threshold_days: 7 | |||
pega_inbox_address: fake_email_address |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will be populated with the current Pega email address via AWS param
@@ -29,9 +29,10 @@ def perform # rubocop:disable Metrics/MethodLength | |||
template_id = "#{form[:form_number]}-FAILURE" | |||
send_failure_email(form, template_id) | |||
if Flipper.enabled?(:champva_enhanced_monitor_logging, @current_user) | |||
additional_context = { form_id: form[:form_number] } | |||
additional_context = { form_id: form[:form_number], form_uuid: form[:form_uuid] } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Adding additional context for logging
def fetch_forms_by_uuid(form_uuid) | ||
@fetch_forms_by_uuid ||= IvcChampvaForm.where(form_uuid:) | ||
def construct_email_payload(form, template_id) | ||
{ email: form.email, | ||
first_name: form.first_name, | ||
last_name: form.last_name, | ||
form_number: form.form_number, | ||
file_count: nil, | ||
pega_status: form.pega_status, | ||
created_at: form.created_at.strftime('%B %d, %Y'), | ||
template_id: template_id, | ||
form_uuid: form.form_uuid } | ||
end | ||
|
||
# Sends an email to user notifying them of their submission's failure | ||
# | ||
# @param form [IvcChampvaForm] form object in question | ||
# @param template_id [string] key for template to use in `IvcChampva::Email::EMAIL_TEMPLATE_MAP` | ||
def send_failure_email(form, template_id) | ||
form_data = | ||
{ | ||
email: form.email, | ||
first_name: form.first_name, | ||
last_name: form.last_name, | ||
form_number: form.form_number, | ||
file_count: nil, | ||
pega_status: form.pega_status, | ||
created_at: form.created_at.strftime('%B %d, %Y'), | ||
template_id: template_id | ||
} | ||
form_data = construct_email_payload(form, template_id) | ||
ActiveRecord::Base.transaction do | ||
if IvcChampva::Email.new(form_data).send_email | ||
fetch_forms_by_uuid(form[:form_uuid]).update_all(email_sent: true) # rubocop:disable Rails/SkipsModelValidations | ||
else | ||
additional_context = { form_id: form[:form_number] } | ||
additional_context = { form_id: form[:form_number], form_uuid: form[:form_uuid] } | ||
monitor.log_silent_failure(additional_context) | ||
raise ActiveRecord::Rollback, 'Pega Status Update/Action Required Email send failure' | ||
end | ||
end | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pulled the email payload construction out into its own function so it could be cleanly shared with the new send_zsf_notification_to_pega
function.
|
||
def track_send_zsf_notification_to_pega(form_uuid) | ||
additional_context = { | ||
form_uuid: | ||
} | ||
track_request('info', "IVC ChampVA Forms - alerted Pega of ZSF email sent for submission #{form_uuid}", | ||
"#{STATS_KEY}.send_zsf_notification_to_pega", | ||
call_location: caller_locations.first, **additional_context) | ||
end | ||
|
||
def track_failed_send_zsf_notification_to_pega(form_uuid) | ||
additional_context = { | ||
form_uuid: | ||
} | ||
track_request('warn', "IVC ChampVA Forms - could not alert Pega of ZSF email sent for submission #{form_uuid}", | ||
"#{STATS_KEY}.failed_send_zsf_notification_to_pega", | ||
call_location: caller_locations.first, **additional_context) | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Additional logging in the IVC monitor class
Summary
This PR adds an email trigger to alert the downstream Pega service when we've fired a ZSF email off to a user. It lets the Pega team keep abreast of any issues to which users have been alerted.
IvcChampva::Monitor
classRelated issue(s)
Testing done
Screenshots
NA
What areas of the site does it impact?
IvcChampva
module onlyAcceptance criteria
Requested Feedback
NA