0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-10 09:08:31 -05:00

Improve error reporting on background tasks

This commit is contained in:
Andrey Antukh 2022-02-15 09:22:00 +01:00 committed by Andrés Moya
parent 321b2c7c23
commit 9b78b2a432
4 changed files with 19 additions and 18 deletions

View file

@ -10,7 +10,6 @@
[app.common.exceptions :as ex] [app.common.exceptions :as ex]
[app.common.logging :as l] [app.common.logging :as l]
[app.common.spec :as us] [app.common.spec :as us]
[app.common.uuid :as uuid]
[clojure.spec.alpha :as s] [clojure.spec.alpha :as s]
[cuerdas.core :as str])) [cuerdas.core :as str]))
@ -24,8 +23,7 @@
[request error] [request error]
(let [data (ex-data error)] (let [data (ex-data error)]
(merge (merge
{:id (uuid/next) {:path (:uri request)
:path (:uri request)
:method (:request-method request) :method (:request-method request)
:hint (ex-message error) :hint (ex-message error)
:params (:params request) :params (:params request)

View file

@ -27,10 +27,8 @@
(defonce enabled (atom true)) (defonce enabled (atom true))
(defn- persist-on-database! (defn- persist-on-database!
[{:keys [pool] :as cfg} {:keys [id] :as event}] [{:keys [pool]} {:keys [id] :as event}]
(db/with-atomic [conn pool] (db/insert! pool :server-error-report {:id id :content (db/tjson event)}))
(db/insert! conn :server-error-report
{:id id :content (db/tjson event)})))
(defn- parse-event-data (defn- parse-event-data
[event] [event]
@ -51,7 +49,7 @@
(assoc :host (cf/get :host)) (assoc :host (cf/get :host))
(assoc :public-uri (cf/get :public-uri)) (assoc :public-uri (cf/get :public-uri))
(assoc :version (:full cf/version)) (assoc :version (:full cf/version))
(update :id (fn [id] (or id (uuid/next)))))) (assoc :id (uuid/next))))
(defn handle-event (defn handle-event
[{:keys [executor] :as cfg} event] [{:keys [executor] :as cfg} event]
@ -59,12 +57,13 @@
(try (try
(let [event (parse-event event) (let [event (parse-event event)
uri (cf/get :public-uri)] uri (cf/get :public-uri)]
(l/debug :hint "registering error on database" :id (:id event) (l/debug :hint "registering error on database" :id (:id event)
:uri (str uri "/dbg/error/" (:id event))) :uri (str uri "/dbg/error/" (:id event)))
(persist-on-database! cfg event)) (persist-on-database! cfg event))
(catch Exception e (catch Exception cause
(l/warn :hint "unexpected exception on database error logger" (l/warn :hint "unexpected exception on database error logger" :cause cause)))))
:cause e)))))
(defmethod ig/pre-init-spec ::reporter [_] (defmethod ig/pre-init-spec ::reporter [_]
(s/keys :req-un [::wrk/executor ::db/pool ::receiver])) (s/keys :req-un [::wrk/executor ::db/pool ::receiver]))
@ -76,8 +75,7 @@
(defmethod ig/init-key ::reporter (defmethod ig/init-key ::reporter
[_ {:keys [receiver] :as cfg}] [_ {:keys [receiver] :as cfg}]
(l/info :msg "initializing database error persistence") (l/info :msg "initializing database error persistence")
(let [output (a/chan (a/sliding-buffer 5) (let [output (a/chan (a/sliding-buffer 5) (filter error-event?))]
(filter error-event?))]
(receiver :sub output) (receiver :sub output)
(a/go-loop [] (a/go-loop []
(let [msg (a/<! output)] (let [msg (a/<! output)]

View file

@ -302,3 +302,8 @@
(defmethod print-dup CronExpression (defmethod print-dup CronExpression
[o w] [o w]
(print-ctor o (fn [o w] (print-dup (.toString ^CronExpression o) w)) w)) (print-ctor o (fn [o w] (print-dup (.toString ^CronExpression o) w)) w))
(extend-protocol fez/IEdn
CronExpression
(-edn [o] (pr-str o)))

View file

@ -108,7 +108,7 @@
(and (instance? java.sql.SQLException val) (and (instance? java.sql.SQLException val)
(contains? #{"08003" "08006" "08001" "08004"} (.getSQLState ^java.sql.SQLException val))) (contains? #{"08003" "08006" "08001" "08004"} (.getSQLState ^java.sql.SQLException val)))
(do (do
(l/error :hint "connection error, trying resume in some instants") (l/warn :hint "connection error, trying resume in some instants")
(a/<! (a/timeout poll-interval)) (a/<! (a/timeout poll-interval))
(recur)) (recur))
@ -121,8 +121,8 @@
(instance? Exception val) (instance? Exception val)
(do (do
(l/error :cause val (l/warn :cause val
:hint "unexpected error ocurried on polling the database (will resume in some instants)") :hint "unexpected error ocurried on polling the database (will resume in some instants)")
(a/<! (a/timeout poll-ms)) (a/<! (a/timeout poll-ms))
(recur)) (recur))
@ -251,8 +251,7 @@
[error item] [error item]
(let [data (ex-data error)] (let [data (ex-data error)]
(merge (merge
{:id (uuid/next) {:hint (ex-message error)
:hint (ex-message error)
:spec-problems (some->> data ::s/problems (take 10) seq vec) :spec-problems (some->> data ::s/problems (take 10) seq vec)
:spec-value (some->> data ::s/value) :spec-value (some->> data ::s/value)
:data (some-> data (dissoc ::s/problems ::s/value ::s/spec)) :data (some-> data (dissoc ::s/problems ::s/value ::s/spec))
@ -424,6 +423,7 @@
(run-task conn)) (run-task conn))
(catch Throwable cause (catch Throwable cause
(l/error :hint "unhandled exception on scheduled task" (l/error :hint "unhandled exception on scheduled task"
::l/context (get-error-context cause task)
:task-id id :task-id id
:cause cause))))] :cause cause))))]
(try (try