Преглед изворни кода

feat: add opted-in/opted-out monitoring

Tienson Qin пре 4 година
родитељ
комит
9c5edf8cb6

+ 4 - 0
resources/electron.html

@@ -53,5 +53,9 @@ const portal = new MagicPortal(worker);
 <script defer src="./js/code-editor.js"></script>
 <script defer src="./js/code-editor.js"></script>
 <script defer src="./js/age-encryption.js"></script>
 <script defer src="./js/age-encryption.js"></script>
 <script defer src="./js/excalidraw.js"></script>
 <script defer src="./js/excalidraw.js"></script>
+<script>
+    !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
+  posthog.init('qUumrWobEk2dKiKt1b32CMEZy8fgNS94rb_Bq4WutPA',{api_host:'https://app.posthog.com', persistence:'localStorage'})
+</script>
 </body>
 </body>
 </html>
 </html>

+ 20 - 7
src/main/frontend/components/settings.cljs

@@ -145,6 +145,17 @@
           :width 500
           :width 500
           :height 500}]])
           :height 500}]])
 
 
+(defn monitoring-opted-out
+  []
+  (.. js/window -posthog has_opted_out_capturing))
+
+(defn set-sentry-disabled!
+  [value]
+  (if value
+    (.. js/window -posthog opt_out_capturing)
+    (.. js/window -posthog opt_in_capturing))
+  (state/set-sentry-disabled! value))
+
 (rum/defcs settings < rum/reactive
 (rum/defcs settings < rum/reactive
   []
   []
   (let [preferred-format (state/get-preferred-format)
   (let [preferred-format (state/get-preferred-format)
@@ -371,6 +382,15 @@
 
 
        [:hr]
        [:hr]
 
 
+       [:div.panel-wrap
+        [:p "Logseq will never collect your local graph database or sell your data."]
+        (toggle "usage-diagnostics"
+                (t :settings-page/disable-sentry)
+                (not sentry-disabled?)
+                (fn [] (set-sentry-disabled! (not sentry-disabled?))))]
+
+       [:hr]
+
        [:div.panel-wrap
        [:div.panel-wrap
 
 
         [:div.sm:grid.sm:grid-cols-3.sm:gap-4.sm:items-center.sm:pt-5
         [:div.sm:grid.sm:grid-cols-3.sm:gap-4.sm:items-center.sm:pt-5
@@ -390,13 +410,6 @@
           [:div.ver version]
           [:div.ver version]
           (if (util/electron?) (app-updater))]]
           (if (util/electron?) (app-updater))]]
 
 
-        (toggle "disable_sentry"
-                (t :settings-page/disable-sentry)
-                sentry-disabled?
-                (fn []
-                  (let [value (not sentry-disabled?)]
-                    (state/set-sentry-disabled! value))))
-
         [:div.it.sm:grid.sm:grid-cols-3.sm:gap-4.sm:items-start
         [:div.it.sm:grid.sm:grid-cols-3.sm:gap-4.sm:items-start
          [:label.block.text-sm.font-medium.leading-5.opacity-70
          [:label.block.text-sm.font-medium.leading-5.opacity-70
           {:for "developer_mode"}
           {:for "developer_mode"}

+ 1 - 1
src/main/frontend/dicts.cljs

@@ -203,7 +203,7 @@
         :content/click-to-edit "Click to edit"
         :content/click-to-edit "Click to edit"
         :settings-page/edit-config-edn "Edit config.edn (for current repo)"
         :settings-page/edit-config-edn "Edit config.edn (for current repo)"
         :settings-page/show-brackets "Show brackets"
         :settings-page/show-brackets "Show brackets"
-        :settings-page/disable-sentry "Disable Sentry.io (for error tracking)"
+        :settings-page/disable-sentry "Send usage data and diagnostics to Logseq"
         :settings-page/preferred-outdenting "Enable logical outdenting"
         :settings-page/preferred-outdenting "Enable logical outdenting"
         :settings-page/custom-date-format "Preferred journal format"
         :settings-page/custom-date-format "Preferred journal format"
         :settings-page/preferred-file-format "Preferred file format"
         :settings-page/preferred-file-format "Preferred file format"

+ 18 - 5
src/main/frontend/handler.cljs

@@ -32,6 +32,16 @@
             [frontend.components.page :as page]
             [frontend.components.page :as page]
             [frontend.components.editor :as editor]))
             [frontend.components.editor :as editor]))
 
 
+(defn set-global-error-notification!
+  []
+  (set! js/window.onerror
+        (fn [message, source, lineno, colno, error]
+          (notification/show!
+           (str "message=" message "\nsource=" source "\nlineno=" lineno "\ncolno=" colno "\nerror=" error)
+           :error
+           ;; Don't auto-hide
+           false))))
+
 (defn- watch-for-date!
 (defn- watch-for-date!
   []
   []
   (let [f (fn []
   (let [f (fn []
@@ -138,19 +148,21 @@
         [{:url config/local-repo
         [{:url config/local-repo
           :example? true}]))))
           :example? true}]))))
 
 
-(defn init-sentry
+(defn init-sentry!
   []
   []
   (when-not (state/sentry-disabled?)
   (when-not (state/sentry-disabled?)
     (let [cfg
     (let [cfg
           {:dsn "https://[email protected]/5311485"
           {:dsn "https://[email protected]/5311485"
-           :release (util/format "logseq@%s" version/version)}]
+           :release (util/format "logseq@%s" version/version)
+           :environment (if config/dev? "development" "production")
+           :tracesSampleRate 1.0}]
       (.init js/window.Sentry (clj->js cfg)))))
       (.init js/window.Sentry (clj->js cfg)))))
 
 
 (defn on-load-events
 (defn on-load-events
   []
   []
-  (let [f (fn []
-            (when-not config/dev? (init-sentry)))]
-    (set! js/window.onload f)))
+  (set! js/window.onload
+        (fn []
+          (when-not config/dev? (init-sentry!)))))
 
 
 (defn clear-cache!
 (defn clear-cache!
   []
   []
@@ -166,6 +178,7 @@
 
 
 (defn start!
 (defn start!
   [render]
   [render]
+  (set-global-error-notification!)
   (let [{:keys [me logged? repos]} (get-me-and-repos)]
   (let [{:keys [me logged? repos]} (get-me-and-repos)]
     (when me (state/set-state! :me me))
     (when me (state/set-state! :me me))
     (register-components-fns!)
     (register-components-fns!)

+ 1 - 3
src/main/frontend/state.cljs

@@ -1231,9 +1231,7 @@
 (defn set-sentry-disabled!
 (defn set-sentry-disabled!
   [value]
   [value]
   (set-state! :sentry/disabled? value)
   (set-state! :sentry/disabled? value)
-  (storage/set "sentry-disabled" value)
-  (when value
-    (.close js/window.Sentry)))
+  (storage/set "sentry-disabled" value))
 
 
 (defn logical-outdenting?
 (defn logical-outdenting?
   []
   []