From c75c1552250c11883cd547270b92ea5a14984b90 Mon Sep 17 00:00:00 2001 From: Steve Laing Date: Wed, 19 Jun 2024 11:39:32 +0100 Subject: [PATCH 1/2] Filter gtag and fetch JS errors from Sentry These are unactionable and create noise in our alerts channel. See https://github.com/DFE-Digital/apply-for-qualified-teacher-status/commit/1dd0190309c326118ca017b1606b261e66f80105 for background on how we use filtering in other services. --- config/initializers/sentry.rb | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/config/initializers/sentry.rb b/config/initializers/sentry.rb index fb029830c7..9359d7977f 100644 --- a/config/initializers/sentry.rb +++ b/config/initializers/sentry.rb @@ -1,5 +1,16 @@ # frozen_string_literal: true +FILTERABLE_JS_ERRORS = [ + "Failed to fetch", + "NetworkError when attempting to fetch resource.", +].freeze + +def filterable_js_event?(event, hint) + hint[:exception].is_a?(TypeError) && event.exception.values.any? do |exception| + FILTERABLE_JS_ERRORS.include?(exception.value) + end +end + Sentry.init do |config| config.enabled_environments = %w[production sandbox staging review] config.dsn = config.enabled_environments.include?(Rails.env) ? Rails.application.credentials.SENTRY_DSN : "disabled" @@ -7,7 +18,9 @@ config.release = "#{ENV['RELEASE_VERSION']}-#{ENV['SHA']}" filter = ActiveSupport::ParameterFilter.new(Rails.application.config.filter_parameters) - config.before_send = lambda do |event, _hint| + config.before_send = lambda do |event, hint| + return nil if filterable_js_event?(event, hint) + # use Rails' parameter filter to sanitize the event filter.filter(event.to_hash) end From 8560424098d889064aea53177480aec77995049b Mon Sep 17 00:00:00 2001 From: Steve Laing Date: Wed, 19 Jun 2024 15:30:11 +0100 Subject: [PATCH 2/2] Filter out cookie banner JS errors from Sentry --- config/initializers/sentry.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/config/initializers/sentry.rb b/config/initializers/sentry.rb index 9359d7977f..a7336dec24 100644 --- a/config/initializers/sentry.rb +++ b/config/initializers/sentry.rb @@ -5,6 +5,12 @@ "NetworkError when attempting to fetch resource.", ].freeze +def cookie_banner_js_event?(event, hint) + hint[:exception].is_a?(Error) && + event.tags["mechanism"] == "onunhandledrejection" && + event.exception.values.any? { |ex| ex.value.include?("[object Response]") } +end + def filterable_js_event?(event, hint) hint[:exception].is_a?(TypeError) && event.exception.values.any? do |exception| FILTERABLE_JS_ERRORS.include?(exception.value) @@ -19,7 +25,7 @@ def filterable_js_event?(event, hint) filter = ActiveSupport::ParameterFilter.new(Rails.application.config.filter_parameters) config.before_send = lambda do |event, hint| - return nil if filterable_js_event?(event, hint) + return nil if filterable_js_event?(event, hint) || cookie_banner_js_event?(event, hint) # use Rails' parameter filter to sanitize the event filter.filter(event.to_hash)