0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-11 23:31:21 -05:00

Minor improvements on error reporting mechanism.

This commit is contained in:
Andrey Antukh 2022-01-13 00:01:02 +01:00 committed by Andrés Moya
parent ef17af38a1
commit ffdd539233
6 changed files with 59 additions and 45 deletions

View file

@ -13,7 +13,7 @@
}
pre {
margin: 0px;
line-height: 17px;
line-height: 16px;
}
main {
@ -51,6 +51,7 @@
.table-row {
display: flex;
padding-bottom: 15px;
/* width: 100%; */
/* border: 1px solid red; */
}
@ -71,7 +72,7 @@
}
.multiline {
margin-top: 30px;
margin-top: 15px;
flex-direction: column;
}
@ -85,27 +86,33 @@
</style>
</head>
<body>
<nav>
<div>[<a href="/dbg/error"><<</a>]</div>
<div>[<a href="#context">context</a>]</div>
<div>[<a href="#params">params</a>]</div>
<div>[<a href="#params">request params</a>]</div>
{% if spec-problems %}
<div>[<a href="#edata">spec</a>]</div>
<div>[<a href="#spec-problems">spec problems</a>]</div>
{% endif %}
{% if spec-value %}
<div>[<a href="#spec-value">spec value</a>]</div>
{% endif %}
{% if data %}
<div>[<a href="#edata">data</a>]</div>
<div>[<a href="#edata">error data</a>]</div>
{% endif %}
{% if trace %}
<div>[<a href="#trace">trace</a>]</div>
<div>[<a href="#trace">error trace</a>]</div>
{% endif %}
</nav>
<main>
<div class="table">
<div class="table-row multiline">
<div id="context" class="table-key">CONTEXT: </div>
<div class="table-val">
<h1>{{hint}}</h1>
</div>
<div class="table-val">
<pre>{{context}}</pre>
</div>
@ -113,14 +120,13 @@
{% if params %}
<div class="table-row multiline">
<div id="params" class="table-key">PARAMS: </div>
<div id="params" class="table-key">REQUEST PARAMS: </div>
<div class="table-val">
<pre>{{params}}</pre>
</div>
</div>
{% endif %}
<!-- NOTE: this is legacy, for old error data saved on the database -->
{% if data %}
<div class="table-row multiline">
<div id="edata" class="table-key">ERROR DATA: </div>
@ -139,6 +145,15 @@
</div>
{% endif %}
{% if spec-value %}
<div class="table-row multiline">
<div id="spec-value" class="table-key">SPEC VALUE: </div>
<div class="table-val">
<pre>{{spec-value}}</pre>
</div>
</div>
{% endif %}
{% if trace %}
<div class="table-row multiline">
<div id="trace" class="table-key">TRACE:</div>

View file

@ -112,13 +112,16 @@
(render-template [report]
(binding [ppr/*print-right-margin* 300]
(let [context (dissoc report :trace :cause :params :data :spec-prob :spec-problems :error :explain)
(let [context (dissoc report :trace :cause :params :data :spec-problems :spec-value :error :explain :hint :message)
params {:context (with-out-str (ppr/pprint context))
:data (:data report)
:trace (or (:cause report)
(:trace report)
(some-> report :error :trace))
:params (:params report)}]
:hint (:hint report)
:spec-problems (:spec-problems report)
:spec-value (:spec-value report)
:data (:data report)
:trace (or (:cause report)
(:trace report)
(some-> report :error :trace))
:params (:params report)}]
(-> (io/resource "error-report.tmpl")
(tmpl/render params)))))
]

View file

@ -27,10 +27,11 @@
{:id (uuid/next)
:path (:uri request)
:method (:request-method request)
:hint (or (:hint data) (ex-message error))
:params (l/stringify-data (:params request))
:hint (ex-message error)
:params (:params request)
:spec-problems (some-> data ::s/problems)
:data (some-> data (dissoc ::s/problems))
:spec-value (some-> data ::s/value)
:data (some-> data (dissoc ::s/problems ::s/value :hint))
:ip-addr (parse-client-ip request)
:profile-id (:profile-id request)}
@ -55,17 +56,17 @@
(defmethod handle-exception :validation
[err _]
(let [edata (ex-data err)]
{:status 400 :body (dissoc edata ::s/problems)}))
{:status 400 :body (dissoc edata ::s/problems ::s/value)}))
(defmethod handle-exception :assertion
[error request]
(let [edata (ex-data error)]
(l/with-context (get-error-context request error)
(l/error :hint (ex-message error) :cause error))
(l/error ::l/raw (ex-message error) :cause error))
{:status 500
:body {:type :server-error
:code :assertion
:data (dissoc edata ::s/problems)}}))
:data (dissoc edata ::s/problems ::s/value)}}))
(defmethod handle-exception :not-found
[err _]
@ -84,7 +85,7 @@
(handle-exception (:handling edata) request)
(do
(l/with-context (get-error-context request error)
(l/error :hint (ex-message error) :cause error))
(l/error ::l/raw (ex-message error) :cause error))
{:status 500
:body {:type :server-error
@ -97,10 +98,7 @@
(let [state (.getSQLState ^java.sql.SQLException error)]
(l/with-context (get-error-context request error)
(l/error :hint "psql exception"
:error-message (ex-message error)
:state state
:cause error))
(l/error ::l/raw (ex-message error) :cause error))
(cond
(= state "57014")

View file

@ -12,26 +12,23 @@
(s/def ::type keyword?)
(s/def ::code keyword?)
(s/def ::message string?)
(s/def ::hint string?)
(s/def ::cause #?(:clj #(instance? Throwable %)
:cljs #(instance? js/Error %)))
(s/def ::error-params
(s/keys :req-un [::type]
:opt-un [::code
::hint
::message
::cause]))
(defn error
[& {:keys [message hint cause] :as params}]
[& {:keys [hint cause ::data] :as params}]
(s/assert ::error-params params)
(let [message (or message hint "")
payload (-> params
(dissoc :cause)
(dissoc :message)
(assoc :hint message))]
(ex-info message payload cause)))
(let [payload (-> params
(dissoc :cause ::data)
(merge data))]
(ex-info hint payload cause)))
(defmacro raise
[& args]

View file

@ -175,14 +175,15 @@
level-sym (gensym "log")]
`(let [~logger-sym (get-logger ~logger)
~level-sym (get-level ~level)]
(if (enabled? ~logger-sym ~level-sym)
(when (enabled? ~logger-sym ~level-sym)
~(if async
`(let [cdata# (ThreadContext/getImmutableContext)]
(send-off logging-agent
(fn [_#]
(with-context (into {:cause ~cause} cdata#)
(->> (or ~raw (build-map-message ~props))
(write-log! ~logger-sym ~level-sym ~cause))))))
`(->> (ThreadContext/getImmutableContext)
(send-off logging-agent
(fn [_# cdata#]
(with-context (into {:cause ~cause} cdata#)
(->> (or ~raw (build-map-message ~props))
(write-log! ~logger-sym ~level-sym ~cause))))))
`(let [message# (or ~raw (build-map-message ~props))]
(write-log! ~logger-sym ~level-sym ~cause message#))))))))

View file

@ -217,8 +217,8 @@
(ex/raise :type :assertion
:code :spec-validation
:hint hint
:ctx ctx
:value val
::ex/data ctx
::s/value val
::s/problems (::s/problems data)))))