From 50378146c033d33e1839825f516b03f5f7eeb86d Mon Sep 17 00:00:00 2001 From: Peter Taoussanis Date: Thu, 14 Mar 2024 12:49:46 +0100 Subject: [PATCH] [new] Add explicit `:extra-kvs` to signals I.e. groups together all user-level kvs for convenience. --- .../signal-docstrings/signal-content.txt | 2 +- .../signal-docstrings/signal-options.txt | 2 +- src/taoensso/telemere/impl.cljc | 30 +++++++++---------- test/taoensso/telemere_tests.cljc | 21 ++++++------- 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/resources/signal-docstrings/signal-content.txt b/resources/signal-docstrings/signal-content.txt index 2aa7105..07c7935 100644 --- a/resources/signal-docstrings/signal-content.txt +++ b/resources/signal-docstrings/signal-content.txt @@ -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) - - Arb user-level ?kvs given to signal call + - Arb user-level ?kvs given to signal call If anything is unclear, please ping me (@ptaoussanis) so that I can improve these docs! diff --git a/resources/signal-docstrings/signal-options.txt b/resources/signal-docstrings/signal-options.txt index b48d458..427b398 100644 --- a/resources/signal-docstrings/signal-options.txt +++ b/resources/signal-docstrings/signal-options.txt @@ -25,7 +25,7 @@ Signal options (shared by `signal!`, `event!`, ...): `:middleware` - ?[(fn [signal])=>modified-signal ...] call middleware `:trace?` - Should tracing be enabled for `:run` form? - - Arb user-level ?kvs to incl. in signal + - Arb user-level ?kvs to incl. in signal If anything is unclear, please ping me (@ptaoussanis) so that I can improve these docs! diff --git a/src/taoensso/telemere/impl.cljc b/src/taoensso/telemere/impl.cljc index 7760012..b91d8fa 100644 --- a/src/taoensso/telemere/impl.cljc +++ b/src/taoensso/telemere/impl.cljc @@ -197,7 +197,7 @@ location ns line column file, sample-rate, kind id level, ctx parent, data msg_ error run-form run-val, - end-instant run-nsecs]) + end-instant run-nsecs extra-kvs]) (deftype #_defrecord WrappedSignal ;; Internal type to implement `sigs/IFilterableSignal`, @@ -327,7 +327,7 @@ [instant uid, location ns line column file, sample-rate, kind id level, ctx parent, - user-opts data msg_, + extra-kvs data msg_, run-form run-result error] (let [signal @@ -349,15 +349,15 @@ sample-rate, kind id level, ctx parent, data msg_, run-err run-form run-val, - end-instant run-nsecs)) + end-instant run-nsecs extra-kvs)) (Signal. 1 instant uid, location ns line column file, 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 - (reduce-kv assoc signal user-opts) + (if extra-kvs + (reduce-kv assoc signal extra-kvs) (do signal)))) (comment @@ -380,7 +380,7 @@ [#_defaults #_elide? #_allow? #_expansion-id, ; Undocumented elidable? location instant uid middleware, 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? '([id ] @@ -390,7 +390,7 @@ [#_defaults #_elide? #_allow? #_expansion-id, elidable? location instant uid middleware, 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? '([ msg] @@ -399,7 +399,7 @@ [#_defaults #_elide? #_allow? #_expansion-id, elidable? location instant uid middleware, 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]) :error! ; [error] [id-or-opts error] => given error @@ -409,7 +409,7 @@ [#_defaults #_elide? #_allow? #_expansion-id, elidable? location instant uid middleware, 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]) (:trace! :spy!) ; [form] [id-or-opts form] => run result (value or throw) @@ -419,7 +419,7 @@ [#_defaults #_elide? #_allow? #_expansion-id, elidable? location instant uid middleware, 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]) :catch->error! ; [form] [id-or-opts form] => run result (value or throw) @@ -429,7 +429,7 @@ [#_defaults #_elide? #_allow? #_expansion-id, rethrow? catch-val, elidable? location instant uid middleware, 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]) :uncaught->error! ; [] [id-or-opts] => nil @@ -439,7 +439,7 @@ [#_defaults #_elide? #_allow? #_expansion-id, elidable? location instant uid middleware, 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)))) @@ -529,7 +529,7 @@ let-form (or let-form '[]) msg-form (parse-msg-form msg-form) - user-opts-form + extra-kvs-form (not-empty (dissoc opts :elidable? :location :instant :uid :middleware, @@ -544,7 +544,7 @@ (new-signal ~'__instant ~'__uid ~location ~ns ~line ~column ~file, ~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))))] #_ ; Sacrifice some perf to de-dupe (possibly large) `run-form` diff --git a/test/taoensso/telemere_tests.cljc b/test/taoensso/telemere_tests.cljc index 12f7cea..c8981ef 100644 --- a/test/taoensso/telemere_tests.cljc +++ b/test/taoensso/telemere_tests.cljc @@ -101,9 +101,10 @@ (is (> (inst-ms end) (inst-ms start)) "End instant is start + run-nsecs") (is (< (inst-ms end) 1e6) "End instant is start + run-nsecs")])])) - (testing "User opts assoced directly to signal" - (let [[rv [sv]] (ws (sig! {:level :info, :my-opt1 "v1", :my-opt2 "v2"}))] - (is (sm? sv {:level :info, :my-opt1 "v1", :my-opt2 "v2"})))) + (testing "Support arb extra user kvs" + (let [[rv [sv]] (ws (sig! {:level :info, :my-k1 "v1", :my-k2 "v2"}))] + (is (sm? sv {:level :info, :my-k1 "v1", :my-k2 "v2" + :extra-kvs {:my-k1 "v1", :my-k2 "v2"}})))) (testing "`:msg` basics" (let [c (enc/counter) @@ -122,7 +123,7 @@ (testing "`:data` basics" (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) [rv1 [sv1]] (ws (sig! {:level :info, :run (c), dk {:c1 (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 (= @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 - (for [dk [:data :my-opt]] + (for [dk [:data :my-k1]] (let [c (enc/counter) [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)})})) @@ -184,9 +185,9 @@ (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`" + (testing "Manual `let` (unconditional) + `:data`/`:my-k1`" (vec - (for [dk [:data :my-opt]] + (for [dk [:data :my-k1]] (let [c (enc/counter) [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)})}))) @@ -318,9 +319,9 @@ (is (= @sv_ :nx)) (is (sm? @error_ {:handler-id :hid1, :error ex1-pred}))]) - (testing "Throwing user opt" + (testing "Throwing user kv" (reset-state!) - [(is (true? (sig! {:level :info, :my-opt (ex1!)}))) + [(is (true? (sig! {:level :info, :my-k1 (ex1!)}))) (is (= @sv_ :nx)) (is (sm? @error_ {:handler-id :hid1, :error ex1-pred}))])])])))