From 471a9ca2a69d8ce13361f3126f01f1f7878fbc01 Mon Sep 17 00:00:00 2001 From: Areeb Jamal Date: Wed, 4 Mar 2020 02:46:18 +0530 Subject: [PATCH] chore: Capture and process order errors properly in Sentry (#4173) --- app/controllers/public/index.js | 8 +++++- app/sentry.ts | 43 +++++++++++++++++++++++++++------ ember-cli-build.js | 2 +- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/app/controllers/public/index.js b/app/controllers/public/index.js index 337822867a4..67350be4da3 100644 --- a/app/controllers/public/index.js +++ b/app/controllers/public/index.js @@ -133,13 +133,19 @@ export default Controller.extend({ this.transitionToRoute('orders.new', order.identifier); }) .catch(async e => { - await Promise.all((attendees ? attendees.toArray() : []).map(attendee => attendee.destroyRecord())); + console.error('Error while saving order', e); + try { + await Promise.allSettled((attendees ? attendees.toArray() : []).map(attendee => attendee.destroyRecord())); + } catch (error) { + console.error('Error while deleting attendees after order failure', error); + } this.notify.error(this.l10n.t(e.errors[0].detail)); }) .finally(() => { this.set('isLoading', false); }); } catch (e) { + console.error('Error while creating order', e); this.notify.error(this.l10n.t(e)); } } diff --git a/app/sentry.ts b/app/sentry.ts index ff586b5f5be..e9cb70f930e 100644 --- a/app/sentry.ts +++ b/app/sentry.ts @@ -1,17 +1,24 @@ import * as Sentry from '@sentry/browser'; -import { Ember } from '@sentry/integrations'; +import { CaptureConsole, Dedupe, Ember } from '@sentry/integrations'; import config from 'open-event-frontend/config/environment'; Sentry.init({ - integrations: [new Ember()], + integrations: [ + new Ember(), + new Dedupe(), + new CaptureConsole({ + levels: ['error'] + }) + ], beforeSend(event: Sentry.Event) { const exception = event.exception?.values?.[0]; const errorValue = exception?.value; - if (errorValue?.includes("Ember Data Request") && - errorValue?.includes("404")) { - // Ignore 404 errors from Ember Data because - // I don't know how to turn them off - return null; + if (errorValue?.includes("Ember Data Request")) { + if (errorValue?.includes("404")) { + // Ignore 404 errors from Ember Data because + // I don't know how to turn them off + return null; + } } if (errorValue?.includes("TransitionAborted") && @@ -24,3 +31,25 @@ Sentry.init({ }, ...config.sentry }); + +Sentry.configureScope(function(scope) { + function addAdapterError(error: any, event: Sentry.Event) { + if (error.isAdapterError) { + event.extra = { + ...event.extra, + adapter_errors: error.errors, + adapter_errors_json: JSON.stringify(error.errors) + } + } + } + + scope.addEventProcessor(function(event: Sentry.Event, hints: Sentry.EventHint) { + addAdapterError(hints.originalException, event); + + const args: any[] = event.extra?.arguments || []; + for (const arg of args) { + addAdapterError(arg, event); + } + return event; + }); +}); diff --git a/ember-cli-build.js b/ember-cli-build.js index 4b71f1f1f2c..10bb55444f9 100644 --- a/ember-cli-build.js +++ b/ember-cli-build.js @@ -13,7 +13,7 @@ module.exports = function(defaults) { includePolyfill: true }, storeConfigInMeta : true, - sassOptions : { + sassOptions : { sourceMapEmbed: true }, autoprefixer: {