mirror of
https://github.com/taoensso/telemere.git
synced 2026-02-14 07:15:17 +00:00
[new] Add explicit :extra-kvs to signals
I.e. groups together all user-level kvs for convenience.
This commit is contained in:
parent
04725e4a47
commit
50378146c0
4 changed files with 28 additions and 27 deletions
|
|
@ -29,7 +29,7 @@ Default keys:
|
||||||
|
|
||||||
`:sample-rate` - ?rate ∈ℝ[0,1] for combined call AND handler sampling (0.75 => allow 75% of signals, nil => allow all)
|
`:sample-rate` - ?rate ∈ℝ[0,1] for combined call AND handler sampling (0.75 => allow 75% of signals, nil => allow all)
|
||||||
|
|
||||||
<user-kvs> - Arb user-level ?kvs given to signal call
|
<extra-kvs> - Arb user-level ?kvs given to signal call
|
||||||
|
|
||||||
If anything is unclear, please ping me (@ptaoussanis) so that I can improve these docs!
|
If anything is unclear, please ping me (@ptaoussanis) so that I can improve these docs!
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ Signal options (shared by `signal!`, `event!`, ...):
|
||||||
`:middleware` - ?[(fn [signal])=>modified-signal ...] call middleware
|
`:middleware` - ?[(fn [signal])=>modified-signal ...] call middleware
|
||||||
`:trace?` - Should tracing be enabled for `:run` form?
|
`:trace?` - Should tracing be enabled for `:run` form?
|
||||||
|
|
||||||
<user-kvs> - Arb user-level ?kvs to incl. in signal
|
<extra-kvs> - Arb user-level ?kvs to incl. in signal
|
||||||
|
|
||||||
If anything is unclear, please ping me (@ptaoussanis) so that I can improve these docs!
|
If anything is unclear, please ping me (@ptaoussanis) so that I can improve these docs!
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -197,7 +197,7 @@
|
||||||
location ns line column file,
|
location ns line column file,
|
||||||
sample-rate, kind id level, ctx parent,
|
sample-rate, kind id level, ctx parent,
|
||||||
data msg_ error run-form run-val,
|
data msg_ error run-form run-val,
|
||||||
end-instant run-nsecs])
|
end-instant run-nsecs extra-kvs])
|
||||||
|
|
||||||
(deftype #_defrecord WrappedSignal
|
(deftype #_defrecord WrappedSignal
|
||||||
;; Internal type to implement `sigs/IFilterableSignal`,
|
;; Internal type to implement `sigs/IFilterableSignal`,
|
||||||
|
|
@ -327,7 +327,7 @@
|
||||||
[instant uid,
|
[instant uid,
|
||||||
location ns line column file,
|
location ns line column file,
|
||||||
sample-rate, kind id level, ctx parent,
|
sample-rate, kind id level, ctx parent,
|
||||||
user-opts data msg_,
|
extra-kvs data msg_,
|
||||||
run-form run-result error]
|
run-form run-result error]
|
||||||
|
|
||||||
(let [signal
|
(let [signal
|
||||||
|
|
@ -349,15 +349,15 @@
|
||||||
sample-rate, kind id level, ctx parent,
|
sample-rate, kind id level, ctx parent,
|
||||||
data msg_,
|
data msg_,
|
||||||
run-err run-form run-val,
|
run-err run-form run-val,
|
||||||
end-instant run-nsecs))
|
end-instant run-nsecs extra-kvs))
|
||||||
|
|
||||||
(Signal. 1 instant uid,
|
(Signal. 1 instant uid,
|
||||||
location ns line column file,
|
location ns line column file,
|
||||||
sample-rate, kind id level, ctx parent,
|
sample-rate, kind id level, ctx parent,
|
||||||
data msg_, error nil nil instant nil))]
|
data msg_, error nil nil instant nil extra-kvs))]
|
||||||
|
|
||||||
(if user-opts
|
(if extra-kvs
|
||||||
(reduce-kv assoc signal user-opts)
|
(reduce-kv assoc signal extra-kvs)
|
||||||
(do signal))))
|
(do signal))))
|
||||||
|
|
||||||
(comment
|
(comment
|
||||||
|
|
@ -380,7 +380,7 @@
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id, ; Undocumented
|
[#_defaults #_elide? #_allow? #_expansion-id, ; Undocumented
|
||||||
elidable? location instant uid middleware,
|
elidable? location instant uid middleware,
|
||||||
sample-rate kind ns id level when rate-limit,
|
sample-rate kind ns id level when rate-limit,
|
||||||
ctx parent trace?, do let data msg error run & user-opts]}])
|
ctx parent trace?, do let data msg error run & extra-kvs]}])
|
||||||
|
|
||||||
:event! ; [id] [id level-or-opts] => allowed?
|
:event! ; [id] [id level-or-opts] => allowed?
|
||||||
'([id ]
|
'([id ]
|
||||||
|
|
@ -390,7 +390,7 @@
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
[#_defaults #_elide? #_allow? #_expansion-id,
|
||||||
elidable? location instant uid middleware,
|
elidable? location instant uid middleware,
|
||||||
sample-rate kind ns id level when rate-limit,
|
sample-rate kind ns id level when rate-limit,
|
||||||
ctx parent trace?, do let data msg error #_run & user-opts]}])
|
ctx parent trace?, do let data msg error #_run & extra-kvs]}])
|
||||||
|
|
||||||
:log! ; [msg] [level-or-opts msg] => allowed?
|
:log! ; [msg] [level-or-opts msg] => allowed?
|
||||||
'([ msg]
|
'([ msg]
|
||||||
|
|
@ -399,7 +399,7 @@
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
[#_defaults #_elide? #_allow? #_expansion-id,
|
||||||
elidable? location instant uid middleware,
|
elidable? location instant uid middleware,
|
||||||
sample-rate kind ns id level when rate-limit,
|
sample-rate kind ns id level when rate-limit,
|
||||||
ctx parent trace?, do let data msg error #_run & user-opts]}
|
ctx parent trace?, do let data msg error #_run & extra-kvs]}
|
||||||
msg])
|
msg])
|
||||||
|
|
||||||
:error! ; [error] [id-or-opts error] => given error
|
:error! ; [error] [id-or-opts error] => given error
|
||||||
|
|
@ -409,7 +409,7 @@
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
[#_defaults #_elide? #_allow? #_expansion-id,
|
||||||
elidable? location instant uid middleware,
|
elidable? location instant uid middleware,
|
||||||
sample-rate kind ns id level when rate-limit,
|
sample-rate kind ns id level when rate-limit,
|
||||||
ctx parent trace?, do let data msg error #_run & user-opts]}
|
ctx parent trace?, do let data msg error #_run & extra-kvs]}
|
||||||
error])
|
error])
|
||||||
|
|
||||||
(:trace! :spy!) ; [form] [id-or-opts form] => run result (value or throw)
|
(:trace! :spy!) ; [form] [id-or-opts form] => run result (value or throw)
|
||||||
|
|
@ -419,7 +419,7 @@
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
[#_defaults #_elide? #_allow? #_expansion-id,
|
||||||
elidable? location instant uid middleware,
|
elidable? location instant uid middleware,
|
||||||
sample-rate kind ns id level when rate-limit,
|
sample-rate kind ns id level when rate-limit,
|
||||||
ctx parent trace?, do let data msg error run & user-opts]}
|
ctx parent trace?, do let data msg error run & extra-kvs]}
|
||||||
form])
|
form])
|
||||||
|
|
||||||
:catch->error! ; [form] [id-or-opts form] => run result (value or throw)
|
:catch->error! ; [form] [id-or-opts form] => run result (value or throw)
|
||||||
|
|
@ -429,7 +429,7 @@
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id, rethrow? catch-val,
|
[#_defaults #_elide? #_allow? #_expansion-id, rethrow? catch-val,
|
||||||
elidable? location instant uid middleware,
|
elidable? location instant uid middleware,
|
||||||
sample-rate kind ns id level when rate-limit,
|
sample-rate kind ns id level when rate-limit,
|
||||||
ctx parent trace?, do let data msg error #_run & user-opts]}
|
ctx parent trace?, do let data msg error #_run & extra-kvs]}
|
||||||
form])
|
form])
|
||||||
|
|
||||||
:uncaught->error! ; [] [id-or-opts] => nil
|
:uncaught->error! ; [] [id-or-opts] => nil
|
||||||
|
|
@ -439,7 +439,7 @@
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
[#_defaults #_elide? #_allow? #_expansion-id,
|
||||||
elidable? location instant uid middleware,
|
elidable? location instant uid middleware,
|
||||||
sample-rate kind ns id level when rate-limit,
|
sample-rate kind ns id level when rate-limit,
|
||||||
ctx parent trace?, do let data msg error #_run & user-opts]}])
|
ctx parent trace?, do let data msg error #_run & extra-kvs]}])
|
||||||
|
|
||||||
(enc/unexpected-arg! macro-id))))
|
(enc/unexpected-arg! macro-id))))
|
||||||
|
|
||||||
|
|
@ -529,7 +529,7 @@
|
||||||
let-form (or let-form '[])
|
let-form (or let-form '[])
|
||||||
msg-form (parse-msg-form msg-form)
|
msg-form (parse-msg-form msg-form)
|
||||||
|
|
||||||
user-opts-form
|
extra-kvs-form
|
||||||
(not-empty
|
(not-empty
|
||||||
(dissoc opts
|
(dissoc opts
|
||||||
:elidable? :location :instant :uid :middleware,
|
:elidable? :location :instant :uid :middleware,
|
||||||
|
|
@ -544,7 +544,7 @@
|
||||||
(new-signal ~'__instant ~'__uid
|
(new-signal ~'__instant ~'__uid
|
||||||
~location ~ns ~line ~column ~file,
|
~location ~ns ~line ~column ~file,
|
||||||
~sample-rate-form, ~kind-form ~'__id ~level-form, ~ctx-form ~parent-form,
|
~sample-rate-form, ~kind-form ~'__id ~level-form, ~ctx-form ~parent-form,
|
||||||
~user-opts-form ~data-form ~msg-form,
|
~extra-kvs-form ~data-form ~msg-form,
|
||||||
'~run-form ~'__run-result ~error-form))))]
|
'~run-form ~'__run-result ~error-form))))]
|
||||||
|
|
||||||
#_ ; Sacrifice some perf to de-dupe (possibly large) `run-form`
|
#_ ; Sacrifice some perf to de-dupe (possibly large) `run-form`
|
||||||
|
|
|
||||||
|
|
@ -101,9 +101,10 @@
|
||||||
(is (> (inst-ms end) (inst-ms start)) "End instant is start + run-nsecs")
|
(is (> (inst-ms end) (inst-ms start)) "End instant is start + run-nsecs")
|
||||||
(is (< (inst-ms end) 1e6) "End instant is start + run-nsecs")])]))
|
(is (< (inst-ms end) 1e6) "End instant is start + run-nsecs")])]))
|
||||||
|
|
||||||
(testing "User opts assoced directly to signal"
|
(testing "Support arb extra user kvs"
|
||||||
(let [[rv [sv]] (ws (sig! {:level :info, :my-opt1 "v1", :my-opt2 "v2"}))]
|
(let [[rv [sv]] (ws (sig! {:level :info, :my-k1 "v1", :my-k2 "v2"}))]
|
||||||
(is (sm? sv {:level :info, :my-opt1 "v1", :my-opt2 "v2"}))))
|
(is (sm? sv {:level :info, :my-k1 "v1", :my-k2 "v2"
|
||||||
|
:extra-kvs {:my-k1 "v1", :my-k2 "v2"}}))))
|
||||||
|
|
||||||
(testing "`:msg` basics"
|
(testing "`:msg` basics"
|
||||||
(let [c (enc/counter)
|
(let [c (enc/counter)
|
||||||
|
|
@ -122,7 +123,7 @@
|
||||||
|
|
||||||
(testing "`:data` basics"
|
(testing "`:data` basics"
|
||||||
(vec
|
(vec
|
||||||
(for [dk [:data :my-opt]] ; User opts share same behaviour as data
|
(for [dk [:data :my-k1]] ; User kvs share same behaviour as data
|
||||||
(let [c (enc/counter)
|
(let [c (enc/counter)
|
||||||
[rv1 [sv1]] (ws (sig! {:level :info, :run (c), dk {:c1 (c)}}))
|
[rv1 [sv1]] (ws (sig! {:level :info, :run (c), dk {:c1 (c)}}))
|
||||||
[rv2 [sv2]] (ws (sig! {:level :info, :run (c), dk (delay {:c2 (c)})}))
|
[rv2 [sv2]] (ws (sig! {:level :info, :run (c), dk (delay {:c2 (c)})}))
|
||||||
|
|
@ -165,9 +166,9 @@
|
||||||
(is (= rv5 9)) (is (= (:msg_ sv5) nil))
|
(is (= rv5 9)) (is (= (:msg_ sv5) nil))
|
||||||
(is (= @c 12) "5x run + 4x let (1x suppressed) + 3x msg (1x suppressed)")]))
|
(is (= @c 12) "5x run + 4x let (1x suppressed) + 3x msg (1x suppressed)")]))
|
||||||
|
|
||||||
(testing "`:do` + `:let` + `:data`/`:my-opt`"
|
(testing "`:do` + `:let` + `:data`/`:my-k1`"
|
||||||
(vec
|
(vec
|
||||||
(for [dk [:data :my-opt]]
|
(for [dk [:data :my-k1]]
|
||||||
(let [c (enc/counter)
|
(let [c (enc/counter)
|
||||||
[rv1 [sv1]] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk {:n n, :c1 (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)})}))
|
[rv2 [sv2]] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk (delay {:n n, :c2 (c)})}))
|
||||||
|
|
@ -184,9 +185,9 @@
|
||||||
(is (= rv6 13)) (is (= (force (get sv6 dk)) [:n 15, :c6 17]))
|
(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)")]))))
|
(is (= @c 18) "6x run + 4x do (2x suppressed) + 4x let (2x suppressed) + 4x data (2x suppressed)")]))))
|
||||||
|
|
||||||
(testing "Manual `let` (unconditional) + `:data`/`:my-opt`"
|
(testing "Manual `let` (unconditional) + `:data`/`:my-k1`"
|
||||||
(vec
|
(vec
|
||||||
(for [dk [:data :my-opt]]
|
(for [dk [:data :my-k1]]
|
||||||
(let [c (enc/counter)
|
(let [c (enc/counter)
|
||||||
[rv1 [sv1]] (ws (let [n (c)] (sig! {:level :info, :run (c), dk {:n n, :c1 (c)}})))
|
[rv1 [sv1]] (ws (let [n (c)] (sig! {:level :info, :run (c), dk {:n n, :c1 (c)}})))
|
||||||
[rv2 [sv2]] (ws (let [n (c)] (sig! {:level :info, :run (c), dk (delay {:n n, :c2 (c)})})))
|
[rv2 [sv2]] (ws (let [n (c)] (sig! {:level :info, :run (c), dk (delay {:n n, :c2 (c)})})))
|
||||||
|
|
@ -318,9 +319,9 @@
|
||||||
(is (= @sv_ :nx))
|
(is (= @sv_ :nx))
|
||||||
(is (sm? @error_ {:handler-id :hid1, :error ex1-pred}))])
|
(is (sm? @error_ {:handler-id :hid1, :error ex1-pred}))])
|
||||||
|
|
||||||
(testing "Throwing user opt"
|
(testing "Throwing user kv"
|
||||||
(reset-state!)
|
(reset-state!)
|
||||||
[(is (true? (sig! {:level :info, :my-opt (ex1!)})))
|
[(is (true? (sig! {:level :info, :my-k1 (ex1!)})))
|
||||||
(is (= @sv_ :nx))
|
(is (= @sv_ :nx))
|
||||||
(is (sm? @error_ {:handler-id :hid1, :error ex1-pred}))])])])))
|
(is (sm? @error_ {:handler-id :hid1, :error ex1-pred}))])])])))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue