mirror of
https://github.com/taoensso/telemere.git
synced 2025-12-17 01:51:10 +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)))))
|
(handler thread throwable)))))
|
||||||
nil))
|
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
|
;;;; Interop
|
||||||
|
|
||||||
#?(:clj
|
#?(:clj
|
||||||
|
|
|
||||||
|
|
@ -271,7 +271,7 @@
|
||||||
sigs/IFilterableSignal
|
sigs/IFilterableSignal
|
||||||
(allow-signal? [_ sig-filter] (sig-filter kind ns id level))
|
(allow-signal? [_ sig-filter] (sig-filter kind ns id level))
|
||||||
(signal-value [_ handler-sample-rate]
|
(signal-value [_ handler-sample-rate]
|
||||||
(let [sig-val @signal-value_]
|
(let [sig-val (force signal-value_)]
|
||||||
(or
|
(or
|
||||||
(when handler-sample-rate
|
(when handler-sample-rate
|
||||||
(when (map? sig-val)
|
(when (map? sig-val)
|
||||||
|
|
@ -282,6 +282,13 @@
|
||||||
(double (or (get sig-val :sample-rate) 1.0))))))
|
(double (or (get sig-val :sample-rate) 1.0))))))
|
||||||
sig-val))))
|
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
|
;;;; Handlers
|
||||||
|
|
||||||
(enc/defonce ^:dynamic *sig-handlers* "?[<wrapped-handler-fn>]" nil)
|
(enc/defonce ^:dynamic *sig-handlers* "?[<wrapped-handler-fn>]" nil)
|
||||||
|
|
@ -361,9 +368,10 @@
|
||||||
(if last-only?
|
(if last-only?
|
||||||
(vreset! vol_ sv)
|
(vreset! vol_ sv)
|
||||||
(vswap! vol_ #(conj (or % []) 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
|
;;;; Signal API helpers
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -671,6 +671,10 @@
|
||||||
(testing "Signals in go macros"
|
(testing "Signals in go macros"
|
||||||
[(async/go (tel/log! "hello"))]))
|
[(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
|
#?(:clj
|
||||||
(deftest _uncaught->handler!
|
(deftest _uncaught->handler!
|
||||||
(let [p (promise)]
|
(let [p (promise)]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue