Add error logging to Marketo calls

This commit is contained in:
Jake Moshenko 2017-04-05 11:25:29 -04:00
parent 2661db7485
commit 22f5934f34
4 changed files with 36 additions and 7 deletions

View file

@ -35,6 +35,7 @@ from oauth.oidc import DiscoveryFailureException
from util.useremails import (send_confirmation_email, send_recovery_email, send_change_email, from util.useremails import (send_confirmation_email, send_recovery_email, send_change_email,
send_password_changed, send_org_recovery_email) send_password_changed, send_org_recovery_email)
from util.names import parse_single_urn from util.names import parse_single_urn
from util.saas.useranalytics import build_error_callback
REPOS_PER_PAGE = 100 REPOS_PER_PAGE = 100
@ -345,14 +346,20 @@ class User(ApiResource):
code = model.user.create_confirm_email_code(user, new_email=new_email) code = model.user.create_confirm_email_code(user, new_email=new_email)
send_change_email(user.username, user_data['email'], code.code) send_change_email(user.username, user_data['email'], code.code)
else: else:
user_analytics.change_email(user.email, new_email) ua_future = user_analytics.change_email(user.email, new_email)
ua_future.add_done_callback(build_error_callback('Change email failed'))
model.user.update_email(user, new_email, auto_verify=not features.MAILING) model.user.update_email(user, new_email, auto_verify=not features.MAILING)
if 'given_name' in user_data or 'family_name' in user_data or 'company' in user_data: if 'given_name' in user_data or 'family_name' in user_data or 'company' in user_data:
model.user.update_user_metadata(user, user_data.get('given_name'), model.user.update_user_metadata(user, user_data.get('given_name'),
user_data.get('family_name'), user_data.get('company')) user_data.get('family_name'), user_data.get('company'))
user_analytics.change_metadata(user.email, user_data.get('given_name'), ua_mdata_future = user_analytics.change_metadata(
user_data.get('family_name'), user_data.get('company')) user.email,
user_data.get('given_name'),
user_data.get('family_name'),
user_data.get('company'),
)
ua_mdata_future.add_done_callback(build_error_callback('Change metadata failed'))
# Check for username rename. A username can be renamed if the feature is enabled OR the user # Check for username rename. A username can be renamed if the feature is enabled OR the user
# currently has a confirm_username prompt. # currently has a confirm_username prompt.
@ -370,7 +377,9 @@ class User(ApiResource):
raise request_error(message='Username is already in use') raise request_error(message='Username is already in use')
user = model.user.change_username(user.id, new_username) user = model.user.change_username(user.id, new_username)
user_analytics.change_username(user.email, new_username) username_future = user_analytics.change_username(user.email, new_username)
username_future.add_done_callback(build_error_callback('Change username failed'))
elif confirm_username: elif confirm_username:
model.user.remove_user_prompt(user, 'confirm_username') model.user.remove_user_prompt(user, 'confirm_username')

View file

@ -23,6 +23,7 @@ from config import frontend_visible_config
from external_libraries import get_external_javascript, get_external_css from external_libraries import get_external_javascript, get_external_css
from util.names import parse_namespace_repository from util.names import parse_namespace_repository
from util.secscan import PRIORITY_LEVELS from util.secscan import PRIORITY_LEVELS
from util.saas.useranalytics import build_error_callback
from util.timedeltastring import convert_to_timedelta from util.timedeltastring import convert_to_timedelta
@ -122,8 +123,15 @@ def common_login(db_user, permanent_session=True):
session.permanent_session_lifetime = convert_to_timedelta(session_timeout_str) session.permanent_session_lifetime = convert_to_timedelta(session_timeout_str)
# Inform our user analytics that we have a new "lead" # Inform our user analytics that we have a new "lead"
user_analytics.create_lead(db_user.email, db_user.username, db_user.given_name, create_lead_future = user_analytics.create_lead(
db_user.family_name, db_user.company) db_user.email,
db_user.username,
db_user.given_name,
db_user.family_name,
db_user.company,
)
create_lead_future.add_done_callback(build_error_callback('Create lead failed'))
return True return True
else: else:
logger.debug('User could not be logged in, inactive?.') logger.debug('User could not be logged in, inactive?.')

View file

@ -34,6 +34,7 @@ from health.healthcheck import get_healthchecker
from util.cache import no_cache from util.cache import no_cache
from util.headers import parse_basic_auth from util.headers import parse_basic_auth
from util.invoice import renderInvoiceToPdf from util.invoice import renderInvoiceToPdf
from util.saas.useranalytics import build_error_callback
from util.systemlogs import build_logs_archive from util.systemlogs import build_logs_archive
from util.useremails import send_email_changed from util.useremails import send_email_changed
@ -407,7 +408,8 @@ def confirm_email():
if new_email: if new_email:
send_email_changed(user.username, old_email, new_email) send_email_changed(user.username, old_email, new_email)
user_analytics.change_email(old_email, new_email) change_email_future = user_analytics.change_email(old_email, new_email)
change_email_future.add_done_callback(build_error_callback('Change email failed'))
common_login(user) common_login(user)
if model.user.has_user_prompts(user): if model.user.has_user_prompts(user):

View file

@ -14,6 +14,16 @@ class LeadNotFoundException(Exception):
pass pass
def build_error_callback(message_when_exception):
def maybe_log_error(response_future):
try:
response_future.result()
except Exception:
logger.exception('User analytics: %s', message_when_exception)
return maybe_log_error
class _MarketoAnalyticsClient(object): class _MarketoAnalyticsClient(object):
""" User analytics implementation which will report user changes to the """ User analytics implementation which will report user changes to the
Marketo API. Marketo API.