mirror of
https://github.com/taoensso/telemere.git
synced 2025-12-24 04:18:26 +00:00
[new] Add (conditional) :do support to signals
This commit is contained in:
parent
722c6abb67
commit
ab00cb4f64
2 changed files with 34 additions and 38 deletions
|
|
@ -315,7 +315,7 @@
|
|||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? location instant uid middleware,
|
||||
sample-rate ns kind id level filter when rate-limit,
|
||||
ctx parent trace?, let data msg error run & user-opts]}])
|
||||
ctx parent trace?, do let data msg error run & user-opts]}])
|
||||
|
||||
:log! ; [msg] [level-or-opts msg] => <allowed?>
|
||||
'([ msg]
|
||||
|
|
@ -324,7 +324,7 @@
|
|||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? location instant uid middleware,
|
||||
sample-rate ns kind id level filter when rate-limit,
|
||||
ctx parent trace?, let data msg error #_run & user-opts]}
|
||||
ctx parent trace?, do let data msg error #_run & user-opts]}
|
||||
msg])
|
||||
|
||||
:event! ; [id] [level-or-opts id] => <allowed?>
|
||||
|
|
@ -334,7 +334,7 @@
|
|||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? location instant uid middleware,
|
||||
sample-rate ns kind id level filter when rate-limit,
|
||||
ctx parent trace?, let data msg error #_run & user-opts]}
|
||||
ctx parent trace?, do let data msg error #_run & user-opts]}
|
||||
id])
|
||||
|
||||
:error! ; [error] [id-or-opts error] => <error>
|
||||
|
|
@ -344,7 +344,7 @@
|
|||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? location instant uid middleware,
|
||||
sample-rate ns kind id level filter when rate-limit,
|
||||
ctx parent trace?, let data msg error #_run & user-opts]}
|
||||
ctx parent trace?, do let data msg error #_run & user-opts]}
|
||||
error])
|
||||
|
||||
(:trace! :spy!) ; [form] [id-or-opts form] => <run result> (value or throw)
|
||||
|
|
@ -354,7 +354,7 @@
|
|||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? location instant uid middleware,
|
||||
sample-rate ns kind id level filter when rate-limit,
|
||||
ctx parent trace?, let data msg error run & user-opts]}
|
||||
ctx parent trace?, do let data msg error run & user-opts]}
|
||||
form])
|
||||
|
||||
:catch->error! ; [form] [level-or-opts form] => <run result> (value or throw)
|
||||
|
|
@ -364,7 +364,7 @@
|
|||
[#_defaults #_elide? #_allow? #_callsite-id, rethrow? catch-val,
|
||||
elidable? location instant uid middleware,
|
||||
sample-rate ns kind id level filter when rate-limit,
|
||||
ctx parent trace?, let data msg error #_run & user-opts]}
|
||||
ctx parent trace?, do let data msg error #_run & user-opts]}
|
||||
form])
|
||||
|
||||
:uncaught->error! ; [] [id-or-opts] => nil
|
||||
|
|
@ -374,7 +374,7 @@
|
|||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? location instant uid middleware,
|
||||
sample-rate ns kind id level filter when rate-limit,
|
||||
ctx parent trace?, let data msg error #_run & user-opts]}])
|
||||
ctx parent trace?, do let data msg error #_run & user-opts]}])
|
||||
|
||||
(enc/unexpected-arg! macro-id))))
|
||||
|
||||
|
|
@ -452,38 +452,34 @@
|
|||
(catch :any ~'__t (RunResult. nil ~'__t (- (enc/now-nano*) ~'__t0)))))))
|
||||
|
||||
signal-form
|
||||
(let [{let-form :let
|
||||
(let [{do-form :do
|
||||
let-form :let
|
||||
data-form :data
|
||||
msg-form :msg
|
||||
error-form :error
|
||||
sample-rate-form :sample-rate}
|
||||
opts
|
||||
|
||||
let-form (or let-form '[])
|
||||
msg-form (parse-msg-form msg-form)
|
||||
|
||||
;; No, better leave it to user re: whether or not to delay-wrap
|
||||
;; data-form
|
||||
;; (when data-form
|
||||
;; (if (enc/call-in-form? data-form)
|
||||
;; `(delay ~data-form)
|
||||
;; (do data-form)))
|
||||
let-form (or let-form '[])
|
||||
msg-form (parse-msg-form msg-form)
|
||||
|
||||
user-opts-form
|
||||
(not-empty
|
||||
(dissoc opts
|
||||
:elidable? :location :instant :uid :middleware,
|
||||
:sample-rate :ns :kind :id :level :filter :when #_:rate-limit,
|
||||
:ctx :parent #_:trace?, :let :data :msg :error :run
|
||||
:ctx :parent #_:trace?, :do :let :data :msg :error :run
|
||||
:elide? :allow? :callsite-id))]
|
||||
|
||||
;; Eval let bindings AFTER call filtering but BEFORE data, msg
|
||||
`(let ~let-form ; Allow to throw during `signal-value_` deref
|
||||
(new-signal ~'__instant ~'__uid
|
||||
~callsite-id ~location ~ns ~line ~column ~file,
|
||||
~sample-rate-form, ~kind-form ~'__id ~level-form, ~ctx-form ~parent-form,
|
||||
~user-opts-form ~data-form ~msg-form,
|
||||
'~run-form ~'__run-result ~error-form)))]
|
||||
`(do
|
||||
~do-form
|
||||
(let ~let-form ; Allow to throw during `signal-value_` deref
|
||||
(new-signal ~'__instant ~'__uid
|
||||
~callsite-id ~location ~ns ~line ~column ~file,
|
||||
~sample-rate-form, ~kind-form ~'__id ~level-form, ~ctx-form ~parent-form,
|
||||
~user-opts-form ~data-form ~msg-form,
|
||||
'~run-form ~'__run-result ~error-form))))]
|
||||
|
||||
#_ ; Sacrifice some perf to de-dupe (possibly large) `run-form`
|
||||
(let [~'__run-fn ~run-fn-form]
|
||||
|
|
|
|||
|
|
@ -163,24 +163,24 @@
|
|||
(is (= rv5 9)) (is (= (:msg_ sv5) nil))
|
||||
(is (= @c 12) "5x run + 4x let (1x suppressed) + 3x msg (1x suppressed)")]))
|
||||
|
||||
(testing "`:let` + `:data`"
|
||||
(testing "`:do` + `:let` + `:data`/`:my-opt`"
|
||||
(vec
|
||||
(for [dk [:data :my-opt]]
|
||||
(let [c (enc/counter)
|
||||
[rv1 sv1] (ws (sig! {:level :info, :run (c), :let [n (c)], dk {:n n, :c1 (c)}}))
|
||||
[rv2 sv2] (ws (sig! {:level :info, :run (c), :let [n (c)], dk (delay {:n n, :c2 (c)})}))
|
||||
[rv3 sv3] (ws (sig! {:level :info, :run (c), :let [n (c)], dk {:n n, :c3 (c)}, :allow? false}))
|
||||
[rv4 sv4] (ws (sig! {:level :info, :run (c), :let [n (c)], dk (delay {:n n, :c4 (c)}), :allow? false}))
|
||||
[rv5 sv5] (ws (sig! {:level :info, :run (c), :let [n (c)], dk [:n n, :c5 (c)]}))
|
||||
[rv6 sv6] (ws (sig! {:level :info, :run (c), :let [n (c)], dk (delay [:n n, :c6 (c)])}))]
|
||||
[rv1 sv1] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk {:n n, :c1 (c)}}))
|
||||
[rv2 sv2] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk (delay {:n n, :c2 (c)})}))
|
||||
[rv3 sv3] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk {:n n, :c3 (c)}, :allow? false}))
|
||||
[rv4 sv4] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk (delay {:n n, :c4 (c)}), :allow? false}))
|
||||
[rv5 sv5] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk [:n n, :c5 (c)]}))
|
||||
[rv6 sv6] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk (delay [:n n, :c6 (c)])}))]
|
||||
|
||||
[(is (= rv1 0)) (is (= (get sv1 dk) {:n 1, :c1 2}))
|
||||
(is (= rv2 3)) (is (= (force (get sv2 dk)) {:n 4, :c2 12}))
|
||||
(is (= rv3 5)) (is (= (get sv3 dk) nil))
|
||||
(is (= rv4 6)) (is (= (force (get sv4 dk)) nil))
|
||||
(is (= rv5 7)) (is (= (get sv5 dk) [:n 8, :c5 9]))
|
||||
(is (= rv6 10)) (is (= (force (get sv6 dk)) [:n 11, :c6 13]))
|
||||
(is (= @c 14) "6x run + 4x let (2x suppressed) + 4x data (2x suppressed)")]))))
|
||||
[(is (= rv1 0)) (is (= (get sv1 dk) {:n 2, :c1 3}))
|
||||
(is (= rv2 4)) (is (= (force (get sv2 dk)) {:n 6, :c2 16}))
|
||||
(is (= rv3 7)) (is (= (get sv3 dk) nil))
|
||||
(is (= rv4 8)) (is (= (force (get sv4 dk)) nil))
|
||||
(is (= rv5 9)) (is (= (get sv5 dk) [:n 11, :c5 12]))
|
||||
(is (= rv6 13)) (is (= (force (get sv6 dk)) [:n 15, :c6 17]))
|
||||
(is (= @c 18) "6x run + 4x do (2x suppressed) + 4x let (2x suppressed) + 4x data (2x suppressed)")]))))
|
||||
|
||||
(testing "Manual `let` (unconditional) + `:data`/`:my-opt`"
|
||||
(vec
|
||||
|
|
|
|||
Loading…
Reference in a new issue