def user_status_updated(view, status_update): event_name = 'user_status_updated' event_kwargs = dict( distinct_id=status_update.author.profile.get_uuid(), event_name=event_name, applicant_uuid=status_update.application.form_submission.get_uuid(), application_id=status_update.application.id, status_type=status_update.status_type.display_name, next_steps=[ step.display_name for step in status_update.next_steps.all() ], additional_info_length=len(status_update.additional_information), other_next_steps_length=len(status_update.other_next_step), message_change_ratio=SNService.get_message_change_ratio(status_update), contact_info_keys=SNService.get_contact_info_keys(status_update), has_unsent_additional_info=SNService.has_unsent_additional_info( status_update), has_unsent_other_next_step=SNService.has_unsent_other_next_step( status_update), **mixpanel_applicant_data( status_update.application.form_submission.applicant), **mixpanel_data_from_view_request_user(view)) if hasattr(status_update, 'notification'): event_kwargs.update(notification_contact_info_types=list( status_update.notification.contact_info.keys())) log_to_mixpanel(**event_kwargs)
def confirmation_sent(submission, contact_methods): event_name = 'app_confirmation_sent' log_to_mixpanel.delay( distinct_id=submission.get_uuid(), event_name=event_name, contact_info_types=contact_methods, **mixpanel_applicant_data(submission.applicant))
def confirmation_sent(submission, contact_methods): event_name = 'app_confirmation_sent' log_to_mixpanel( distinct_id=submission.get_uuid(), event_name=event_name, contact_info_types=contact_methods, **mixpanel_applicant_data(submission.applicant))
def note_added(view, submission): event_name = 'app_note_added' log_to_mixpanel( distinct_id=submission.get_uuid(), event_name=event_name, **mixpanel_applicant_data(submission.applicant), **mixpanel_data_from_view_request_user(view))
def user_status_updated(view, status_update): event_name = 'user_status_updated' event_kwargs = dict( distinct_id=status_update.author.profile.get_uuid(), event_name=event_name, applicant_uuid=status_update.application.form_submission.get_uuid(), application_id=status_update.application.id, status_type=status_update.status_type.display_name, next_steps=[ step.display_name for step in status_update.next_steps.all()], additional_info_length=len(status_update.additional_information), other_next_steps_length=len(status_update.other_next_step), message_change_ratio=SNService.get_message_change_ratio(status_update), contact_info_keys=SNService.get_contact_info_keys(status_update), has_unsent_additional_info=SNService.has_unsent_additional_info( status_update), has_unsent_other_next_step=SNService.has_unsent_other_next_step( status_update), **mixpanel_applicant_data( status_update.application.form_submission.applicant), **mixpanel_data_from_view_request_user(view)) if hasattr(status_update, 'notification'): event_kwargs.update( notification_contact_info_types=list( status_update.notification.contact_info.keys())) log_to_mixpanel(**event_kwargs)
def note_added(view, submission): event_name = 'app_note_added' log_to_mixpanel.delay( distinct_id=submission.get_uuid(), event_name=event_name, **mixpanel_applicant_data(submission.applicant), **mixpanel_data_from_view_request_user(view))
def form_started(view, counties): event_name = 'application_started' applicant = ApplicantsService.get_applicant_from_request_or_session( view.request) log_to_mixpanel(distinct_id=applicant.get_uuid(), event_name=event_name, counties=counties, **mixpanel_applicant_data(applicant), **mixpanel_data_from_view_request_user(view))
def tags_added(tag_links): event_name = 'app_tag_added' for tag_link in tag_links: log_to_mixpanel(distinct_id=tag_link.content_object.get_uuid(), event_name=event_name, tag_name=tag_link.tag.name, **mixpanel_applicant_data( tag_link.content_object.applicant), **mixpanel_user_data(tag_link.user))
def form_submitted(view, submission): event_name = 'application_submitted' log_to_mixpanel(distinct_id=submission.get_uuid(), event_name=event_name, organizations=list( submission.organizations.values_list('name', flat=True)), **mixpanel_applicant_data(submission.applicant), **mixpanel_data_from_view_request_user(view))
def tags_added(tag_links): event_name = 'app_tag_added' for tag_link in tag_links: log_to_mixpanel( distinct_id=tag_link.content_object.get_uuid(), event_name=event_name, tag_name=tag_link.tag.name, **mixpanel_applicant_data(tag_link.content_object.applicant), **mixpanel_user_data(tag_link.user))
def form_submitted(view, submission): event_name = 'application_submitted' log_to_mixpanel( distinct_id=submission.get_uuid(), event_name=event_name, organizations=list( submission.organizations.values_list('name', flat=True)), **mixpanel_applicant_data(submission.applicant), **mixpanel_data_from_view_request_user(view))
def apps_opened(view, applications): event_name = 'app_opened' for application in applications: log_to_mixpanel( distinct_id=application.form_submission.get_uuid(), event_name=event_name, application_id=application.id, application_organization_name=application.organization.name, **mixpanel_applicant_data(application.form_submission.applicant), **mixpanel_data_from_view_request_user(view))
def user_app_transferred(old_application, new_application, user): event_name = 'user_app_transferred' log_to_mixpanel(distinct_id=user.profile.get_uuid(), event_name=event_name, applicant_uuid=old_application.form_submission.get_uuid(), from_org=old_application.organization.name, to_org=new_application.organization.name, **mixpanel_applicant_data( old_application.form_submission.applicant), **mixpanel_user_data(user))
def form_page_complete(view): """page_name should be the class name of the view instance. """ event_name = 'application_page_complete' applicant = ApplicantsService.get_applicant_from_request_or_session( view.request) log_to_mixpanel(distinct_id=applicant.get_uuid(), event_name=event_name, **mixpanel_applicant_data(applicant), **mixpanel_data_from_view_request_user(view))
def form_started(view, counties): event_name = 'application_started' applicant = ApplicantsService.get_applicant_from_request_or_session( view.request) log_to_mixpanel( distinct_id=applicant.get_uuid(), event_name=event_name, counties=counties, **mixpanel_applicant_data(applicant), **mixpanel_data_from_view_request_user(view))
def user_app_transferred(old_application, new_application, user): event_name = 'user_app_transferred' log_to_mixpanel( distinct_id=user.profile.get_uuid(), event_name=event_name, applicant_uuid=old_application.form_submission.get_uuid(), from_org=old_application.organization.name, to_org=new_application.organization.name, **mixpanel_applicant_data(old_application.form_submission.applicant), **mixpanel_user_data(user))
def form_page_complete(view): """page_name should be the class name of the view instance. """ event_name = 'application_page_complete' applicant = ApplicantsService.get_applicant_from_request_or_session( view.request) log_to_mixpanel( distinct_id=applicant.get_uuid(), event_name=event_name, **mixpanel_applicant_data(applicant), **mixpanel_data_from_view_request_user(view))
def app_transferred(old_application, new_application, user): event_name = 'app_transferred' log_to_mixpanel(distinct_id=old_application.form_submission.get_uuid(), event_name=event_name, user_email=user.email, from_application_id=old_application.id, to_application_id=new_application.id, from_organization_name=old_application.organization.name, to_organization_name=new_application.organization.name, **mixpanel_applicant_data( old_application.form_submission.applicant), **mixpanel_user_data(user))
def app_transferred(old_application, new_application, user): event_name = 'app_transferred' log_to_mixpanel( distinct_id=old_application.form_submission.get_uuid(), event_name=event_name, user_email=user.email, from_application_id=old_application.id, to_application_id=new_application.id, from_organization_name=old_application.organization.name, to_organization_name=new_application.organization.name, **mixpanel_applicant_data(old_application.form_submission.applicant), **mixpanel_user_data(user))
def form_validation_failed(view, errors): """ security concerns addressed here: MP gets just keys (avoid PII) std_out gets k-v pair for errors, but misses application identifiers """ event_name = 'application_errors' applicant = ApplicantsService.get_applicant_from_request_or_session( view.request) for error_key, errors in errors.items(): log_to_mixpanel.delay( distinct_id=applicant.get_uuid(), event_name=event_name, error=error_key, **mixpanel_applicant_data(applicant), **mixpanel_data_from_view_request_user(view)) LoggingService.format_and_log( event_name, url=view.request.path, view_name=view.__class__.__name__, field=error_key, errors=errors)
def form_validation_failed(view, errors): """ security concerns addressed here: MP gets just keys (avoid PII) std_out gets k-v pair for errors, but misses application identifiers """ event_name = 'application_errors' applicant = ApplicantsService.get_applicant_from_request_or_session( view.request) for error_key, errors in errors.items(): log_to_mixpanel( distinct_id=applicant.get_uuid(), event_name=event_name, error=error_key, **mixpanel_applicant_data(applicant), **mixpanel_data_from_view_request_user(view)) LoggingService.format_and_log( event_name, url=view.request.path, view_name=view.__class__.__name__, field=error_key, errors=errors)
def followup_sent(submission, contact_methods): event_name = 'app_followup_sent' log_to_mixpanel(distinct_id=submission.get_uuid(), event_name=event_name, contact_info_types=contact_methods, **mixpanel_applicant_data(submission.applicant))