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:
parent
321b2c7c23
commit
9b78b2a432
4 changed files with 19 additions and 18 deletions
|
@ -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)
|
||||||
|
|
|
@ -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)]
|
||||||
|
|
|
@ -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)))
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue