فهرست منبع

enhance(mobile): collect db-worker logs as well

rcmerci 3 ماه پیش
والد
کامیت
a290ef004d

+ 2 - 1
shadow-cljs.edn

@@ -81,7 +81,8 @@
                                            "externs.js"]
                                  :warnings {:fn-deprecated false
                                             :redef false}}
-              :closure-defines {goog.debug.LOGGING_ENABLED true}
+              :closure-defines {goog.debug.LOGGING_ENABLED true
+                                lambdaisland.glogi.console/colorize "false"}
               :devtools {:watch-path "/static"
                          :preloads [devtools.preload
                                     shadow.remote.runtime.cljs.browser]

+ 5 - 0
src/main/frontend/worker/db_worker.cljs

@@ -773,6 +773,10 @@
       (when @conn
         {:available? (some? (d/entity @conn :logseq.class/Tag))}))))
 
+(def-thread-api :thread-api/mobile-logs
+  []
+  @worker-state/*log)
+
 (comment
   (def-thread-api :general/dangerousRemoveAllDbs
     []
@@ -899,6 +903,7 @@
                       bean/->js)]
     (glogi-console/install!)
     (log/set-levels {:glogi/root :info})
+    (log/add-handler worker-state/log-append!)
     (check-worker-scope!)
     (outliner-register-op-handlers!)
     (<ratelimit-file-writes!)

+ 3 - 2
src/main/frontend/worker/rtc/core.cljs

@@ -249,9 +249,10 @@
                (:remote-update :remote-asset-block-update)
                (try (r.remote-update/apply-remote-update graph-uuid repo conn date-formatter event add-log-fn)
                     (catch :default e
-                      (when (= ::r.remote-update/need-pull-remote-data (:type (ex-data e)))
+                      (if (= ::r.remote-update/need-pull-remote-data (:type (ex-data e)))
                         (m/? (r.client/new-task--pull-remote-data
-                              repo conn graph-uuid major-schema-version date-formatter get-ws-create-task add-log-fn)))))
+                              repo conn graph-uuid major-schema-version date-formatter get-ws-create-task add-log-fn))
+                        (throw e))))
 
                :local-update-check
                (m/? (r.client/new-task--push-local-ops

+ 10 - 0
src/main/frontend/worker/state.cljs

@@ -56,6 +56,7 @@
 ;; repo -> pool
 (defonce *opfs-pools (atom nil))
 
+;;; ================================================================
 (defn get-sqlite-conn
   ([repo] (get-sqlite-conn repo :db))
   ([repo which-db]
@@ -127,3 +128,12 @@
 (defn get-id-token
   []
   (:auth/id-token @*state))
+
+
+;;; ========================== mobile log ======================================
+(defonce *log (atom []))
+(defn log-append!
+  [record]
+  (swap! *log conj record)
+  (when (> (count @*log) 1000)
+    (reset! *log (subvec @*log 800))))

+ 29 - 11
src/main/mobile/components/header.cljs

@@ -1,6 +1,8 @@
 (ns mobile.components.header
   "App top header"
-  (:require [frontend.components.repo :as repo]
+  (:require [clojure.string :as string]
+            [frontend.common.missionary :as c.m]
+            [frontend.components.repo :as repo]
             [frontend.components.rtc.indicator :as rtc-indicator]
             [frontend.date :as date]
             [frontend.db :as db]
@@ -15,6 +17,7 @@
             [logseq.db :as ldb]
             [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
+            [missionary.core :as m]
             [mobile.components.ui :as ui-component]
             [mobile.components.ui-silk :as ui-silk]
             [mobile.state :as mobile-state]
@@ -83,9 +86,15 @@
 
 (rum/defc log
   []
-  (let [log-str (mobile-state/log->str)
-        [error-only? set-error-only!] (hooks/use-state false)
-        [reversed? set-reversed!] (hooks/use-state false)]
+  (let [[error-only? set-error-only!] (hooks/use-state false)
+        [reversed? set-reversed!] (hooks/use-state false)
+        [show-worker-log? set-show-worker-log!] (hooks/use-state false)
+        [worker-records set-worker-records!] (hooks/use-state [])]
+    (hooks/use-effect!
+     #(c.m/run-task*
+       (m/sp
+         (set-worker-records! (c.m/<? (state/<invoke-db-worker :thread-api/mobile-logs)))))
+     [])
     [:div.flex.flex-col.gap-1.p-2.ls-debug-log
      [:div.flex.flex-row.justify-between
       [:div.text-lg.font-medium.mb-2 "Full log: "]
@@ -94,7 +103,7 @@
        {:variant :ghost
         :size :sm
         :on-click (fn []
-                    (util/copy-to-clipboard! log-str))}
+                    (util/copy-to-clipboard! (string/join @mobile-state/*log "\n\n")))}
        "Copy")]
 
      [:div.flex.flex-row.gap-2
@@ -112,17 +121,26 @@
                     (set-reversed! (not reversed?)))}
        (if reversed?
          "New record first"
-         "Old record first"))]
+         "Old record first"))
 
-     (let [records (cond->> @mobile-state/*log
+      (shui/button
+       {:size :sm
+        :on-click (fn []
+                    (set-show-worker-log! (not show-worker-log?)))}
+       (if show-worker-log?
+         "Show UI logs"
+         "Show worker logs"))]
+
+     (let [records (cond->> (if show-worker-log? worker-records @mobile-state/*log)
                      error-only?
                      (filter (fn [record] (contains? #{:error :severe} (:level record))))
                      reversed?
                      reverse)]
-       (when (seq records)
-         [:ul
-          (for [record records]
-            [:li (str record)])]))]))
+       [:p
+        [:ul
+         (for [record records]
+           [:li (:message record)])]
+        [:br]])]))
 
 (rum/defc header
   [tab login?]

+ 1 - 4
src/main/mobile/core.cljs

@@ -74,15 +74,12 @@
    ;; set to false to enable HistoryAPI
    {:use-fragment true}))
 
-(log/add-handler (fn [record]
-                   (mobile-state/log-append! record)))
-
 (defn ^:export init []
   ;; init is called ONCE when the page loads
   ;; this is called in the index.html and must be exported
   ;; so it is available even in :advanced release builds
   (prn "[Mobile] init!")
-
+  (log/add-handler mobile-state/log-append!)
   (set-router!)
   (init/init!)
   (fhandler/start! render!))

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

@@ -54,7 +54,9 @@
 (defonce *log (atom []))
 (defn log-append!
   [record]
-  (swap! *log conj record))
+  (swap! *log conj record)
+  (when (> (count @*log) 1000)
+    (reset! *log (subvec @*log 800))))
 
 (defn log->str
   []