Browse Source

improve(sentry): filter setInterval exceptions for sentry

charlie 2 years ago
parent
commit
29bc71798b
1 changed files with 22 additions and 9 deletions
  1. 22 9
      src/main/frontend/modules/instrumentation/sentry.cljs

+ 22 - 9
src/main/frontend/modules/instrumentation/sentry.cljs

@@ -2,10 +2,11 @@
   (:require [frontend.version :refer [version]]
             [frontend.util :as util]
             [frontend.config :as config]
+            [medley.core :as medley]
             ["@sentry/react" :as Sentry]
             [frontend.mobile.util :as mobile-util]))
 
-(goog-define SENTRY-DSN "")
+(goog-define SENTRY-DSN "https://[email protected]/5311485")
 
 (def config
   {:dsn SENTRY-DSN
@@ -33,14 +34,26 @@
                    (when-let [[_ _ query-and-fragment]
                               (re-matches #"file://.*?/(app/electron|static/index)\.html(.*)" (.. event -request -url))]
                      (set! (.. event -request -url) (str "http://localhost/electron.html" query-and-fragment)))
-                   (doseq [value (.. event -exception -values)]
-                     (doseq [frame (.. value -stacktrace -frames)]
-                       (when (not-empty (.. frame -filename))
-                         (when-let [[_ filename]
-                                    (re-matches #"file://.*?/app/(js/.*\.js)" (.. frame -filename))]
-                           (set! (.. frame -filename) (str "/static/" filename))
-                           ;; NOTE: No idea of why there's a 2-line offset.
-                           (set! (.. frame -lineno) (- (.. frame -lineno) 2))))))
+
+                   (let [*filtered (volatile! [])
+                         ^js values (.. event -exception -values)]
+                     (doseq [[idx value] (medley/indexed values)]
+                       (let [mf (some-> value (.. -mechanism -data -function))]
+                         (when (contains? #{"setInterval"} mf)
+                           (vswap! *filtered conj idx))
+
+                         (doseq [frame (.. value -stacktrace -frames)]
+                           (when (not-empty (.. frame -filename))
+                             (when-let [[_ filename]
+                                        (re-matches #"file://.*?/app/(js/.*\.js)" (.. frame -filename))]
+                               (set! (.. frame -filename) (str "/static/" filename))
+                               ;; NOTE: No idea of why there's a 2-line offset.
+                               (set! (.. frame -lineno) (- (.. frame -lineno) 2)))))))
+
+                     ;; remove filtered events
+                     (when-let [filtered (seq @*filtered)]
+                       (doseq [k filtered]
+                         (js-delete values k))))
                    (catch :default e
                      (js/console.error e)))
                  event)})