mirror of
https://github.com/taoensso/telemere.git
synced 2025-12-16 17:41:12 +00:00
[new] Add dispatch-signal! util
This commit is contained in:
parent
9965450f5b
commit
5ac872566a
3 changed files with 34 additions and 3 deletions
|
|
@ -362,6 +362,25 @@
|
|||
(handler thread throwable)))))
|
||||
nil))
|
||||
|
||||
;;;;
|
||||
|
||||
(defn dispatch-signal!
|
||||
"Dispatches given signal to registered handlers, supports `with-signal/s`.
|
||||
Normally called automatically (internally) by signal creators, this util
|
||||
is provided publicly since it's also handy for manually re/dispatching
|
||||
custom/modified signals, etc.:
|
||||
|
||||
(let [original-signal (with-signal :trap (event! ::my-id1))
|
||||
modified-signal (assoc original-signal :id ::my-id2)]
|
||||
(dispatch-signal! modified-signal))"
|
||||
|
||||
[signal]
|
||||
(when-let [wrapped-signal (impl/wrap-signal signal)]
|
||||
(impl/dispatch-signal! wrapped-signal)))
|
||||
|
||||
(comment (dispatch-signal! (assoc (with-signal :trap (log! "hello")) :level :warn)))
|
||||
|
||||
|
||||
;;;; Interop
|
||||
|
||||
#?(:clj
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@
|
|||
sigs/IFilterableSignal
|
||||
(allow-signal? [_ sig-filter] (sig-filter kind ns id level))
|
||||
(signal-value [_ handler-sample-rate]
|
||||
(let [sig-val @signal-value_]
|
||||
(let [sig-val (force signal-value_)]
|
||||
(or
|
||||
(when handler-sample-rate
|
||||
(when (map? sig-val)
|
||||
|
|
@ -282,6 +282,13 @@
|
|||
(double (or (get sig-val :sample-rate) 1.0))))))
|
||||
sig-val))))
|
||||
|
||||
(defn wrap-signal
|
||||
"Used by `taoensso.telemere/dispatch-signal!`."
|
||||
[signal]
|
||||
(when (map? signal)
|
||||
(let [{:keys [ns kind id level]} signal]
|
||||
(WrappedSignal. ns kind id level signal))))
|
||||
|
||||
;;;; Handlers
|
||||
|
||||
(enc/defonce ^:dynamic *sig-handlers* "?[<wrapped-handler-fn>]" nil)
|
||||
|
|
@ -361,9 +368,10 @@
|
|||
(if last-only?
|
||||
(vreset! vol_ sv)
|
||||
(vswap! vol_ #(conj (or % []) sv))))
|
||||
(when trap? :stop))
|
||||
(when trap? :trapped))
|
||||
|
||||
(sigs/call-handlers! *sig-handlers* signal)))
|
||||
(sigs/call-handlers! *sig-handlers* signal)
|
||||
:dispatched))
|
||||
|
||||
;;;; Signal API helpers
|
||||
|
||||
|
|
|
|||
|
|
@ -671,6 +671,10 @@
|
|||
(testing "Signals in go macros"
|
||||
[(async/go (tel/log! "hello"))]))
|
||||
|
||||
(deftest _dispatch-signal!
|
||||
[(sm? (tel/with-signal (tel/dispatch-signal! (assoc (tel/with-signal :trap (tel/log! "hello")) :level :warn)))
|
||||
{:kind :log, :level :warn, :line :submap/some})])
|
||||
|
||||
#?(:clj
|
||||
(deftest _uncaught->handler!
|
||||
(let [p (promise)]
|
||||
|
|
|
|||
Loading…
Reference in a new issue