From 7d5104d09df99b90205d0a8101674cd8a1479646 Mon Sep 17 00:00:00 2001 From: Karina Kwiatek Date: Sat, 28 Jan 2023 22:10:14 +0100 Subject: [PATCH 1/5] Filter out user-facing errors from Sentry --- config/initializers/sentry.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/config/initializers/sentry.rb b/config/initializers/sentry.rb index 1f4a12af..639ded81 100644 --- a/config/initializers/sentry.rb +++ b/config/initializers/sentry.rb @@ -8,4 +8,13 @@ Sentry.init do |config| # of transactions for performance monitoring. # We recommend adjusting this value in production config.traces_sample_rate = 0.25 + + config.before_send do |event, hint| + if hint[:exception].is_a?(Errors::Base) + # These are used for user-facing errors, not when something goes wrong + nil + end + + event + end end From da9a170e67e0adc02a8d66a25b4f1f58d7d49d51 Mon Sep 17 00:00:00 2001 From: Karina Kwiatek Date: Sat, 28 Jan 2023 22:14:02 +0100 Subject: [PATCH 2/5] Set event fingerprint for exceptions relating to external services --- config/initializers/sentry.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/config/initializers/sentry.rb b/config/initializers/sentry.rb index 639ded81..caf6e2d9 100644 --- a/config/initializers/sentry.rb +++ b/config/initializers/sentry.rb @@ -9,12 +9,21 @@ Sentry.init do |config| # We recommend adjusting this value in production config.traces_sample_rate = 0.25 + exception_fingerprints = { + Excon::Error::ServiceUnavailable => 'external-service', + Twitter::Error::InternalServerError => 'external-service', + } config.before_send do |event, hint| if hint[:exception].is_a?(Errors::Base) # These are used for user-facing errors, not when something goes wrong nil end + exception_class = hint[:exception].class.name + if exception_fingerprints.key?(exception_class) + event.fingerprint = [exception_fingerprints[hint[:exception].class.name]] + end + event end end From 272b98c95447ac8f599df066215831558e571121 Mon Sep 17 00:00:00 2001 From: Karina Kwiatek Date: Sat, 28 Jan 2023 22:18:43 +0100 Subject: [PATCH 3/5] `before_send` should be assigned a lambda --- config/initializers/sentry.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/sentry.rb b/config/initializers/sentry.rb index caf6e2d9..2b107267 100644 --- a/config/initializers/sentry.rb +++ b/config/initializers/sentry.rb @@ -13,7 +13,7 @@ Sentry.init do |config| Excon::Error::ServiceUnavailable => 'external-service', Twitter::Error::InternalServerError => 'external-service', } - config.before_send do |event, hint| + config.before_send = lambda do |event, hint| if hint[:exception].is_a?(Errors::Base) # These are used for user-facing errors, not when something goes wrong nil From 354407cd79e2bad4fba60a57dec0a05bc40360d4 Mon Sep 17 00:00:00 2001 From: Karina Kwiatek Date: Sat, 28 Jan 2023 22:29:41 +0100 Subject: [PATCH 4/5] Use next to return out of `before_send` --- config/initializers/sentry.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/config/initializers/sentry.rb b/config/initializers/sentry.rb index 2b107267..62fdaf9e 100644 --- a/config/initializers/sentry.rb +++ b/config/initializers/sentry.rb @@ -14,10 +14,8 @@ Sentry.init do |config| Twitter::Error::InternalServerError => 'external-service', } config.before_send = lambda do |event, hint| - if hint[:exception].is_a?(Errors::Base) - # These are used for user-facing errors, not when something goes wrong - nil - end + # These are used for user-facing errors, not when something goes wrong + next if hint[:exception].is_a?(Errors::Base) exception_class = hint[:exception].class.name if exception_fingerprints.key?(exception_class) From 9ef6e8fdc1309a95ea2490f217085920b5467695 Mon Sep 17 00:00:00 2001 From: Karina Kwiatek Date: Sat, 28 Jan 2023 22:30:03 +0100 Subject: [PATCH 5/5] Use class instead of class name for matching exception types --- config/initializers/sentry.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/initializers/sentry.rb b/config/initializers/sentry.rb index 62fdaf9e..1124fc37 100644 --- a/config/initializers/sentry.rb +++ b/config/initializers/sentry.rb @@ -17,9 +17,9 @@ Sentry.init do |config| # These are used for user-facing errors, not when something goes wrong next if hint[:exception].is_a?(Errors::Base) - exception_class = hint[:exception].class.name + exception_class = hint[:exception].class if exception_fingerprints.key?(exception_class) - event.fingerprint = [exception_fingerprints[hint[:exception].class.name]] + event.fingerprint = [exception_fingerprints[exception_class]] end event