mirror of
https://github.com/taoensso/telemere.git
synced 2025-12-17 09:51:12 +00:00
[mod] Signal options: drop :location, add :coords
This is the input-side change related to [1], and only
affects folks who've been providing custom callsite info to
Telemere signals (usually in the context of wrapper macros).
To provide custom callsite info BEFORE this commit:
(tel/signal! {:location {:ns "my-ns", :line 10, :column 20}})
To provide custom callsite info AFTER this commit:
(tel/signal! {:ns "my-ns", :coords [10 20]})
Motivation for the new override API:
- It's shorter and cleaner.
- It's less likely to cause confusion since it avoids the
redundant signal keys (signals previously contained callsite
info in 2 duplicate places).
- The underlying implementation is simpler.
- The util for manually getting coords is easier to use and doesn't
require macro-time environment info, making it easier for folks
to write wrapper macros that include line + column info.
- When embedded, the new callsite info is shorter and easier for
Cljs advanced compilation to de-duplicate (so helps reduce .js
build size).
[1] Commit 1f99f7186b
This commit is contained in:
parent
1f99f7186b
commit
fda22ce80c
10 changed files with 141 additions and 129 deletions
|
|
@ -10,8 +10,7 @@
|
||||||
:scm {:name "git" :url "https://github.com/taoensso/telemere"}
|
:scm {:name "git" :url "https://github.com/taoensso/telemere"}
|
||||||
|
|
||||||
:dependencies
|
:dependencies
|
||||||
[[com.taoensso/truss "2.0.0-SNAPSHOT"]
|
[[com.taoensso/encore "3.135.0-SNAPSHOT"]]
|
||||||
[com.taoensso/encore "3.132.0"]]
|
|
||||||
|
|
||||||
:test-paths ["test" #_"src"]
|
:test-paths ["test" #_"src"]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,12 @@ All options are available for all signal creators:
|
||||||
|
|
||||||
`:parent` ------ Custom ?{:keys [id uid]} to override auto (dynamic) parent signal tracing info
|
`:parent` ------ Custom ?{:keys [id uid]} to override auto (dynamic) parent signal tracing info
|
||||||
`:root` -------- Custom ?{:keys [id uid]} to override auto (dynamic) root signal tracing info
|
`:root` -------- Custom ?{:keys [id uid]} to override auto (dynamic) root signal tracing info
|
||||||
`:location` ---- Custom ?{:keys [ns line column file]} to override auto signal creator callsite location
|
|
||||||
`:ctx` --------- Custom ?val to override auto (dynamic `*ctx*`) in signal, as per `with-ctx`
|
`:ctx` --------- Custom ?val to override auto (dynamic `*ctx*`) in signal, as per `with-ctx`
|
||||||
`:ctx+` -------- Custom ?val to update auto (dynamic `*ctx*`) in signal, as per `with-ctx+`
|
`:ctx+` -------- Custom ?val to update auto (dynamic `*ctx*`) in signal, as per `with-ctx+`
|
||||||
|
|
||||||
|
`:ns` ---------- Custom ?str namespace to override auto signal creator callsite
|
||||||
|
`:coords` ------ Custom ?[line column] to override auto signal creator callsite
|
||||||
|
|
||||||
`:elidable?` --- Should signal be subject to compile-time elision? (Default: true)
|
`:elidable?` --- Should signal be subject to compile-time elision? (Default: true)
|
||||||
`:sample-rate` - ?rate ∈ℝ[0,1] for signal sampling (0.75 => allow 75% of signals, nil => allow all)
|
`:sample-rate` - ?rate ∈ℝ[0,1] for signal sampling (0.75 => allow 75% of signals, nil => allow all)
|
||||||
`:when` -------- Arb ?form; when present, form must return truthy to allow signal
|
`:when` -------- Arb ?form; when present, form must return truthy to allow signal
|
||||||
|
|
|
||||||
|
|
@ -31,14 +31,14 @@
|
||||||
(remove-ns (symbol (str *ns*)))
|
(remove-ns (symbol (str *ns*)))
|
||||||
(:api (enc/interns-overview)))
|
(:api (enc/interns-overview)))
|
||||||
|
|
||||||
(enc/assert-min-encore-version [3 132 0])
|
(enc/assert-min-encore-version [3 135 0])
|
||||||
|
|
||||||
;;;; Shared signal API
|
;;;; Shared signal API
|
||||||
|
|
||||||
(sigs/def-api
|
(sigs/def-api
|
||||||
{:sf-arity 4
|
{:sf-arity 4
|
||||||
:ct-sig-filter impl/ct-sig-filter
|
:ct-call-filter impl/ct-call-filter
|
||||||
:*rt-sig-filter* impl/*rt-sig-filter*
|
:*rt-call-filter* impl/*rt-call-filter*
|
||||||
:*sig-handlers* impl/*sig-handlers*
|
:*sig-handlers* impl/*sig-handlers*
|
||||||
:lib-dispatch-opts
|
:lib-dispatch-opts
|
||||||
(assoc sigs/default-handler-dispatch-opts
|
(assoc sigs/default-handler-dispatch-opts
|
||||||
|
|
@ -209,8 +209,8 @@
|
||||||
;; - uncaught->error! - ?id => nil
|
;; - uncaught->error! - ?id => nil
|
||||||
|
|
||||||
#?(:clj
|
#?(:clj
|
||||||
(defn- merge-or-assoc-opts [m &form &env k v]
|
(defn- merge-or-assoc-opts [m macro-form k v]
|
||||||
(let [m (assoc m :location* (enc/get-source &form &env))]
|
(let [m (assoc m :coords (truss/callsite-coords macro-form))]
|
||||||
(if (map? v)
|
(if (map? v)
|
||||||
(merge m v)
|
(merge m v)
|
||||||
(assoc m k v)))))
|
(assoc m k v)))))
|
||||||
|
|
@ -221,8 +221,8 @@
|
||||||
"id + ?level => allowed? Note unique arg order: [x opts] rather than [opts x]!"
|
"id + ?level => allowed? Note unique arg order: [x opts] rather than [opts x]!"
|
||||||
{:doc (impl/signal-docstring :event!)
|
{:doc (impl/signal-docstring :event!)
|
||||||
:arglists (impl/signal-arglists :event!)}
|
:arglists (impl/signal-arglists :event!)}
|
||||||
([ opts-or-id] `(impl/signal! ~(merge-or-assoc-opts base-opts &form &env :id opts-or-id)))
|
([ opts-or-id] `(impl/signal! ~(merge-or-assoc-opts base-opts &form :id opts-or-id)))
|
||||||
([id opts-or-level] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form &env :level opts-or-level) :id id))))))
|
([id opts-or-level] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form :level opts-or-level) :id id))))))
|
||||||
|
|
||||||
(comment (with-signal (event! ::my-id :info)))
|
(comment (with-signal (event! ::my-id :info)))
|
||||||
|
|
||||||
|
|
@ -232,8 +232,8 @@
|
||||||
"?level + msg => allowed?"
|
"?level + msg => allowed?"
|
||||||
{:doc (impl/signal-docstring :log!)
|
{:doc (impl/signal-docstring :log!)
|
||||||
:arglists (impl/signal-arglists :log!)}
|
:arglists (impl/signal-arglists :log!)}
|
||||||
([opts-or-msg ] `(impl/signal! ~(merge-or-assoc-opts base-opts &form &env :msg opts-or-msg)))
|
([opts-or-msg ] `(impl/signal! ~(merge-or-assoc-opts base-opts &form :msg opts-or-msg)))
|
||||||
([opts-or-level msg] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form &env :level opts-or-level) :msg msg))))))
|
([opts-or-level msg] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form :level opts-or-level) :msg msg))))))
|
||||||
|
|
||||||
(comment (with-signal (log! :info "My msg")))
|
(comment (with-signal (log! :info "My msg")))
|
||||||
|
|
||||||
|
|
@ -243,8 +243,8 @@
|
||||||
"?id + run => unconditional run result (value or throw)."
|
"?id + run => unconditional run result (value or throw)."
|
||||||
{:doc (impl/signal-docstring :trace!)
|
{:doc (impl/signal-docstring :trace!)
|
||||||
:arglists (impl/signal-arglists :trace!)}
|
:arglists (impl/signal-arglists :trace!)}
|
||||||
([opts-or-run] `(impl/signal! ~(merge-or-assoc-opts base-opts &form &env :run opts-or-run)))
|
([opts-or-run] `(impl/signal! ~(merge-or-assoc-opts base-opts &form :run opts-or-run)))
|
||||||
([opts-or-id run] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form &env :id opts-or-id) :run run))))))
|
([opts-or-id run] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form :id opts-or-id) :run run))))))
|
||||||
|
|
||||||
(comment (with-signal (trace! ::my-id (+ 1 2))))
|
(comment (with-signal (trace! ::my-id (+ 1 2))))
|
||||||
|
|
||||||
|
|
@ -254,8 +254,8 @@
|
||||||
"?level + run => unconditional run result (value or throw)."
|
"?level + run => unconditional run result (value or throw)."
|
||||||
{:doc (impl/signal-docstring :spy!)
|
{:doc (impl/signal-docstring :spy!)
|
||||||
:arglists (impl/signal-arglists :spy!)}
|
:arglists (impl/signal-arglists :spy!)}
|
||||||
([opts-or-run] `(impl/signal! ~(merge-or-assoc-opts base-opts &form &env :run opts-or-run)))
|
([opts-or-run] `(impl/signal! ~(merge-or-assoc-opts base-opts &form :run opts-or-run)))
|
||||||
([opts-or-level run] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form &env :level opts-or-level) :run run))))))
|
([opts-or-level run] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form :level opts-or-level) :run run))))))
|
||||||
|
|
||||||
(comment (with-signals (spy! :info (+ 1 2))))
|
(comment (with-signals (spy! :info (+ 1 2))))
|
||||||
|
|
||||||
|
|
@ -265,9 +265,9 @@
|
||||||
"?id + error => unconditional given error."
|
"?id + error => unconditional given error."
|
||||||
{:doc (impl/signal-docstring :error!)
|
{:doc (impl/signal-docstring :error!)
|
||||||
:arglists (impl/signal-arglists :error!)}
|
:arglists (impl/signal-arglists :error!)}
|
||||||
([opts-or-id error] `(error! ~(assoc (merge-or-assoc-opts base-opts &form &env :id opts-or-id) :error error)))
|
([opts-or-id error] `(error! ~(assoc (merge-or-assoc-opts base-opts &form :id opts-or-id) :error error)))
|
||||||
([opts-or-error]
|
([opts-or-error]
|
||||||
(let [opts (merge-or-assoc-opts base-opts &form &env :error opts-or-error)
|
(let [opts (merge-or-assoc-opts base-opts &form :error opts-or-error)
|
||||||
gs-error (gensym "error")]
|
gs-error (gensym "error")]
|
||||||
`(let [~gs-error ~(get opts :error)]
|
`(let [~gs-error ~(get opts :error)]
|
||||||
(impl/signal! ~(assoc opts :error gs-error))
|
(impl/signal! ~(assoc opts :error gs-error))
|
||||||
|
|
@ -281,9 +281,9 @@
|
||||||
"?id + run => unconditional run value or ?catch-val."
|
"?id + run => unconditional run value or ?catch-val."
|
||||||
{:doc (impl/signal-docstring :catch->error!)
|
{:doc (impl/signal-docstring :catch->error!)
|
||||||
:arglists (impl/signal-arglists :catch->error!)}
|
:arglists (impl/signal-arglists :catch->error!)}
|
||||||
([opts-or-id run] `(catch->error! ~(assoc (merge-or-assoc-opts base-opts &form &env :id opts-or-id) :run run)))
|
([opts-or-id run] `(catch->error! ~(assoc (merge-or-assoc-opts base-opts &form :id opts-or-id) :run run)))
|
||||||
([opts-or-run]
|
([opts-or-run]
|
||||||
(let [opts (merge-or-assoc-opts base-opts &form &env :run opts-or-run)
|
(let [opts (merge-or-assoc-opts base-opts &form :run opts-or-run)
|
||||||
rethrow? (not (contains? opts :catch-val))
|
rethrow? (not (contains? opts :catch-val))
|
||||||
catch-val (get opts :catch-val)
|
catch-val (get opts :catch-val)
|
||||||
run-form (get opts :run)
|
run-form (get opts :run)
|
||||||
|
|
@ -325,7 +325,7 @@
|
||||||
{:arglists (impl/signal-arglists :uncaught->error!)}
|
{:arglists (impl/signal-arglists :uncaught->error!)}
|
||||||
([ ] (enc/keep-callsite `(uncaught->error! {})))
|
([ ] (enc/keep-callsite `(uncaught->error! {})))
|
||||||
([opts-or-id]
|
([opts-or-id]
|
||||||
(let [opts (merge-or-assoc-opts base-opts &form &env :id opts-or-id)]
|
(let [opts (merge-or-assoc-opts base-opts &form :id opts-or-id)]
|
||||||
`(uncaught->handler!
|
`(uncaught->handler!
|
||||||
(fn [~'__thread-arg ~'__throwable-arg]
|
(fn [~'__thread-arg ~'__throwable-arg]
|
||||||
(impl/signal! ~opts))))))))
|
(impl/signal! ~opts))))))))
|
||||||
|
|
@ -384,7 +384,7 @@
|
||||||
{:kind :error
|
{:kind :error
|
||||||
:level :error
|
:level :error
|
||||||
:error error
|
:error error
|
||||||
:location {:ns "taoensso.encore.signals"}
|
:ns "taoensso.encore.signals"
|
||||||
:id :taoensso.encore.signals/handler-error
|
:id :taoensso.encore.signals/handler-error
|
||||||
:msg "Error executing wrapped handler fn"
|
:msg "Error executing wrapped handler fn"
|
||||||
:data (dissoc m :error)})))
|
:data (dissoc m :error)})))
|
||||||
|
|
@ -394,7 +394,7 @@
|
||||||
(impl/signal!
|
(impl/signal!
|
||||||
{:kind :event
|
{:kind :event
|
||||||
:level :warn
|
:level :warn
|
||||||
:location {:ns "taoensso.encore.signals"}
|
:ns "taoensso.encore.signals"
|
||||||
:id :taoensso.encore.signals/handler-back-pressure
|
:id :taoensso.encore.signals/handler-back-pressure
|
||||||
:msg "Back pressure on wrapped handler fn"
|
:msg "Back pressure on wrapped handler fn"
|
||||||
:data data})))
|
:data data})))
|
||||||
|
|
|
||||||
|
|
@ -52,9 +52,9 @@
|
||||||
id-filter (enc/get-env {:as :edn} :taoensso.telemere/ct-id-filter<.platform><.edn>)
|
id-filter (enc/get-env {:as :edn} :taoensso.telemere/ct-id-filter<.platform><.edn>)
|
||||||
min-level (enc/get-env {:as :edn} :taoensso.telemere/ct-min-level<.platform><.edn>)]
|
min-level (enc/get-env {:as :edn} :taoensso.telemere/ct-min-level<.platform><.edn>)]
|
||||||
|
|
||||||
(enc/defonce ct-sig-filter
|
(enc/defonce ct-call-filter
|
||||||
"`SigFilter` used for compile-time elision, or nil."
|
"`SpecFilter` used for compile-time elision, or nil."
|
||||||
(sigs/sig-filter
|
(sigs/spec-filter
|
||||||
{:kind-filter (or kind-filter (get base :kind-filter))
|
{:kind-filter (or kind-filter (get base :kind-filter))
|
||||||
:ns-filter (or ns-filter (get base :ns-filter))
|
:ns-filter (or ns-filter (get base :ns-filter))
|
||||||
:id-filter (or id-filter (get base :id-filter))
|
:id-filter (or id-filter (get base :id-filter))
|
||||||
|
|
@ -66,9 +66,9 @@
|
||||||
id-filter (enc/get-env {:as :edn} :taoensso.telemere/rt-id-filter<.platform><.edn>)
|
id-filter (enc/get-env {:as :edn} :taoensso.telemere/rt-id-filter<.platform><.edn>)
|
||||||
min-level (enc/get-env {:as :edn, :default :info} :taoensso.telemere/rt-min-level<.platform><.edn>)]
|
min-level (enc/get-env {:as :edn, :default :info} :taoensso.telemere/rt-min-level<.platform><.edn>)]
|
||||||
|
|
||||||
(enc/defonce ^:dynamic *rt-sig-filter*
|
(enc/defonce ^:dynamic *rt-call-filter*
|
||||||
"`SigFilter` used for runtime filtering, or nil."
|
"`SpecFilter` used for runtime filtering, or nil."
|
||||||
(sigs/sig-filter
|
(sigs/spec-filter
|
||||||
{:kind-filter (or kind-filter (get base :kind-filter))
|
{:kind-filter (or kind-filter (get base :kind-filter))
|
||||||
:ns-filter (or ns-filter (get base :ns-filter))
|
:ns-filter (or ns-filter (get base :ns-filter))
|
||||||
:id-filter (or id-filter (get base :id-filter))
|
:id-filter (or id-filter (get base :id-filter))
|
||||||
|
|
@ -276,11 +276,9 @@
|
||||||
(pr-str (assoc (MyRec. :x) :y :y)))))
|
(pr-str (assoc (MyRec. :x) :y :y)))))
|
||||||
|
|
||||||
(deftype #_defrecord WrappedSignal
|
(deftype #_defrecord WrappedSignal
|
||||||
;; Internal type to implement `sigs/IFilterableSignal`,
|
|
||||||
;; incl. lazy + cached `signal-value_` field.
|
|
||||||
[kind ns id level signal-value_]
|
[kind ns id level signal-value_]
|
||||||
sigs/IFilterableSignal
|
sigs/ISignalHandling
|
||||||
(allow-signal? [_ sig-filter] (sig-filter kind ns id level))
|
(allow-signal? [_ spec-filter] (spec-filter kind ns id level))
|
||||||
(signal-debug [_] {:kind kind, :ns ns, :id id, :level level})
|
(signal-debug [_] {:kind kind, :ns ns, :id id, :level level})
|
||||||
(signal-value [_ handler-sample-rate]
|
(signal-value [_ handler-sample-rate]
|
||||||
(sigs/signal-with-combined-sample-rate handler-sample-rate
|
(sigs/signal-with-combined-sample-rate handler-sample-rate
|
||||||
|
|
@ -396,16 +394,16 @@
|
||||||
:signal! ; opts => allowed? / unconditional run result (value or throw)
|
:signal! ; opts => allowed? / unconditional run result (value or throw)
|
||||||
'( [& opts-kvs]
|
'( [& opts-kvs]
|
||||||
[{:as opts-map :keys
|
[{:as opts-map :keys
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id, ; Undocumented
|
[#_defaults #_elide? #_allow? #_callsite-id, ; Undocumented
|
||||||
elidable? location #_location* inst uid middleware middleware+,
|
elidable? coords inst uid middleware middleware+,
|
||||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||||
ctx ctx+ parent root trace?, do let data msg error run & kvs]}])
|
ctx ctx+ parent root trace?, do let data msg error run & kvs]}])
|
||||||
|
|
||||||
:signal-allowed? ; opts => allowed?
|
:signal-allowed? ; opts => allowed?
|
||||||
'( [& opts-kvs]
|
'( [& opts-kvs]
|
||||||
[{:as opts-map :keys
|
[{:as opts-map :keys
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id, ; Undocumented
|
[#_defaults #_elide? #_allow? #_callsite-id, ; Undocumented
|
||||||
elidable? location #_location* #_inst #_uid #_middleware #_middleware+,
|
elidable? coords #_inst #_uid #_middleware #_middleware+,
|
||||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||||
#_ctx #_ctx+ #_parent #_root #_trace?, #_do #_let #_data #_msg #_error #_run #_& #_kvs]}])
|
#_ctx #_ctx+ #_parent #_root #_trace?, #_do #_let #_data #_msg #_error #_run #_& #_kvs]}])
|
||||||
|
|
||||||
|
|
@ -414,8 +412,8 @@
|
||||||
[id level]
|
[id level]
|
||||||
[id
|
[id
|
||||||
{:as opts-map :keys
|
{:as opts-map :keys
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||||
elidable? location #_location* inst uid middleware middleware+,
|
elidable? coords inst uid middleware middleware+,
|
||||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||||
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}])
|
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}])
|
||||||
|
|
||||||
|
|
@ -423,8 +421,8 @@
|
||||||
'([opts-or-msg]
|
'([opts-or-msg]
|
||||||
[level msg]
|
[level msg]
|
||||||
[{:as opts-map :keys
|
[{:as opts-map :keys
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||||
elidable? location #_location* inst uid middleware middleware+,
|
elidable? coords inst uid middleware middleware+,
|
||||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||||
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}
|
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}
|
||||||
msg])
|
msg])
|
||||||
|
|
@ -433,8 +431,8 @@
|
||||||
'([opts-or-run]
|
'([opts-or-run]
|
||||||
[id run]
|
[id run]
|
||||||
[{:as opts-map :keys
|
[{:as opts-map :keys
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||||
elidable? location #_location* inst uid middleware middleware+,
|
elidable? coords inst uid middleware middleware+,
|
||||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||||
ctx ctx+ parent root trace?, do let data msg error run & kvs]}
|
ctx ctx+ parent root trace?, do let data msg error run & kvs]}
|
||||||
run])
|
run])
|
||||||
|
|
@ -443,8 +441,8 @@
|
||||||
'([opts-or-run]
|
'([opts-or-run]
|
||||||
[level run]
|
[level run]
|
||||||
[{:as opts-map :keys
|
[{:as opts-map :keys
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||||
elidable? location #_location* inst uid middleware middleware+,
|
elidable? coords inst uid middleware middleware+,
|
||||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||||
ctx ctx+ parent root trace?, do let data msg error run & kvs]}
|
ctx ctx+ parent root trace?, do let data msg error run & kvs]}
|
||||||
run])
|
run])
|
||||||
|
|
@ -453,8 +451,8 @@
|
||||||
'([opts-or-error]
|
'([opts-or-error]
|
||||||
[id error]
|
[id error]
|
||||||
[{:as opts-map :keys
|
[{:as opts-map :keys
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||||
elidable? location #_location* inst uid middleware middleware+,
|
elidable? coords inst uid middleware middleware+,
|
||||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||||
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}
|
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}
|
||||||
error])
|
error])
|
||||||
|
|
@ -463,8 +461,8 @@
|
||||||
'([opts-or-run]
|
'([opts-or-run]
|
||||||
[id run]
|
[id run]
|
||||||
[{:as opts-map :keys
|
[{:as opts-map :keys
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id, catch-val,
|
[#_defaults #_elide? #_allow? #_callsite-id, catch-val,
|
||||||
elidable? location #_location* inst uid middleware middleware+,
|
elidable? coords inst uid middleware middleware+,
|
||||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||||
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}
|
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}
|
||||||
run])
|
run])
|
||||||
|
|
@ -473,8 +471,8 @@
|
||||||
'([]
|
'([]
|
||||||
[opts-or-id]
|
[opts-or-id]
|
||||||
[{:as opts-map :keys
|
[{:as opts-map :keys
|
||||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||||
elidable? location #_location* inst uid middleware middleware+,
|
elidable? coords inst uid middleware middleware+,
|
||||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||||
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}])
|
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}])
|
||||||
|
|
||||||
|
|
@ -524,6 +522,9 @@
|
||||||
clj? (not cljs?)
|
clj? (not cljs?)
|
||||||
{run-form :run} opts
|
{run-form :run} opts
|
||||||
|
|
||||||
|
ns-form* (get opts :ns :auto)
|
||||||
|
ns-form (auto-> ns-form* (str *ns*))
|
||||||
|
|
||||||
show-run-val (get opts :run-val '_run-val)
|
show-run-val (get opts :run-val '_run-val)
|
||||||
show-run-form
|
show-run-form
|
||||||
(when run-form
|
(when run-form
|
||||||
|
|
@ -535,15 +536,16 @@
|
||||||
(list (first run-form) '...)
|
(list (first run-form) '...)
|
||||||
(do run-form))))
|
(do run-form))))
|
||||||
|
|
||||||
{:keys [#_expansion-id location elide? allow?]}
|
{:keys [#_callsite-id elide? allow?]}
|
||||||
(sigs/filterable-expansion
|
(sigs/filter-call
|
||||||
{:sf-arity 4
|
{:cljs? cljs?
|
||||||
:ct-sig-filter ct-sig-filter
|
:sf-arity 4
|
||||||
:*rt-sig-filter* `*rt-sig-filter*}
|
:ct-call-filter ct-call-filter
|
||||||
|
:*rt-call-filter* `*rt-call-filter*}
|
||||||
|
|
||||||
(assoc opts
|
(assoc opts
|
||||||
:location* (get opts :location* (enc/get-source &form &env))
|
:ns ns-form
|
||||||
:bound-forms
|
:local-forms
|
||||||
{:kind '__kind
|
{:kind '__kind
|
||||||
:ns '__ns
|
:ns '__ns
|
||||||
:id '__id
|
:id '__id
|
||||||
|
|
@ -551,12 +553,11 @@
|
||||||
|
|
||||||
(if elide?
|
(if elide?
|
||||||
run-form
|
run-form
|
||||||
(let [{ns-form :ns
|
(let [coords
|
||||||
line-form :line
|
(get opts :coords
|
||||||
column-form :column
|
(when (= ns-form* :auto)
|
||||||
file-form :file} location
|
;; Auto coords iff auto ns
|
||||||
|
(truss/callsite-coords &form)))
|
||||||
coords (when line-form [line-form column-form])
|
|
||||||
|
|
||||||
{inst-form :inst
|
{inst-form :inst
|
||||||
level-form :level
|
level-form :level
|
||||||
|
|
@ -605,10 +606,10 @@
|
||||||
kvs-form
|
kvs-form
|
||||||
(not-empty
|
(not-empty
|
||||||
(dissoc opts
|
(dissoc opts
|
||||||
:elidable? :location :location* :inst :uid :middleware :middleware+,
|
:elidable? :coords :inst :uid :middleware :middleware+,
|
||||||
:sample-rate :ns :kind :id :level :filter :when #_:rate-limit #_:rate-limit-by,
|
:sample-rate :ns :kind :id :level :filter :when #_:rate-limit #_:rate-limit-by,
|
||||||
:ctx :ctx+ :parent #_:trace?, :do :let :data :msg :error,
|
:ctx :ctx+ :parent #_:trace?, :do :let :data :msg :error,
|
||||||
:run :run-form :run-val, :elide? :allow? #_:expansion-id :otel/context))
|
:run :run-form :run-val, :elide? :allow? #_:callsite-id :otel/context))
|
||||||
|
|
||||||
_ ; Compile-time validation
|
_ ; Compile-time validation
|
||||||
(do
|
(do
|
||||||
|
|
@ -616,7 +617,8 @@
|
||||||
(truss/ex-info! "Signals cannot have both `:run` and `:error` opts at the same time"
|
(truss/ex-info! "Signals cannot have both `:run` and `:error` opts at the same time"
|
||||||
{:run-form run-form
|
{:run-form run-form
|
||||||
:error-form error-form
|
:error-form error-form
|
||||||
:location location
|
:ns ns-form
|
||||||
|
:coords coords
|
||||||
:other-opts (dissoc opts :run :error)}))
|
:other-opts (dissoc opts :run :error)}))
|
||||||
|
|
||||||
(when-let [e (find opts :msg_)] ; Common typo/confusion
|
(when-let [e (find opts :msg_)] ; Common typo/confusion
|
||||||
|
|
@ -782,13 +784,14 @@
|
||||||
defaults (get opts :defaults)
|
defaults (get opts :defaults)
|
||||||
opts (merge defaults (dissoc opts :defaults))
|
opts (merge defaults (dissoc opts :defaults))
|
||||||
|
|
||||||
{:keys [#_expansion-id #_location elide? allow?]}
|
{:keys [#_callsite-id elide? allow?]}
|
||||||
(sigs/filterable-expansion
|
(sigs/filter-call
|
||||||
{:sf-arity 4
|
{:cljs? (boolean (:ns &env))
|
||||||
:ct-sig-filter ct-sig-filter
|
:sf-arity 4
|
||||||
:*rt-sig-filter* `*rt-sig-filter*}
|
:ct-call-filter ct-call-filter
|
||||||
(assoc opts :location*
|
:*rt-call-filter* `*rt-call-filter*}
|
||||||
(get opts :location* (enc/get-source &form &env))))]
|
(assoc opts :ns
|
||||||
|
(get opts :ns (str *ns*))))]
|
||||||
|
|
||||||
(if elide? false `(if ~allow? true false)))))
|
(if elide? false `(if ~allow? true false)))))
|
||||||
|
|
||||||
|
|
@ -825,7 +828,7 @@
|
||||||
(defn test-interop! [msg test-fn]
|
(defn test-interop! [msg test-fn]
|
||||||
(let [msg (str "Interop test: " msg " (" (enc/uuid-str) ")")
|
(let [msg (str "Interop test: " msg " (" (enc/uuid-str) ")")
|
||||||
signal
|
signal
|
||||||
(binding [*rt-sig-filter* nil] ; Without runtime filters
|
(binding [*rt-call-filter* nil] ; Without runtime filters
|
||||||
(with-signal :raw :trap (test-fn msg)))]
|
(with-signal :raw :trap (test-fn msg)))]
|
||||||
|
|
||||||
(= (force (get signal :msg_)) msg)))))
|
(= (force (get signal :msg_)) msg)))))
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,7 @@
|
||||||
*err* (or prev-*err* orig-*err*)]
|
*err* (or prev-*err* orig-*err*)]
|
||||||
|
|
||||||
(impl/signal!
|
(impl/signal!
|
||||||
{:location nil
|
{:ns nil
|
||||||
:ns nil
|
|
||||||
:kind kind
|
:kind kind
|
||||||
:level level
|
:level level
|
||||||
:id id
|
:id id
|
||||||
|
|
|
||||||
|
|
@ -118,20 +118,23 @@
|
||||||
([ form] (enc/keep-callsite `(spy :debug nil ~form)))
|
([ form] (enc/keep-callsite `(spy :debug nil ~form)))
|
||||||
([level form] (enc/keep-callsite `(spy ~level nil ~form)))
|
([level form] (enc/keep-callsite `(spy ~level nil ~form)))
|
||||||
([level form-name form]
|
([level form-name form]
|
||||||
(let [location* (enc/get-source &form &env)
|
(let [ns (str *ns*)
|
||||||
|
coords (truss/callsite-coords &form)
|
||||||
msg
|
msg
|
||||||
(if form-name
|
(if form-name
|
||||||
`(fn [_form# value# error# nsecs#] (impl/default-trace-msg ~form-name value# error# nsecs#))
|
`(fn [_form# value# error# nsecs#] (impl/default-trace-msg ~form-name value# error# nsecs#))
|
||||||
`(fn [_form# value# error# nsecs#] (impl/default-trace-msg '~form value# error# nsecs#)))]
|
`(fn [_form# value# error# nsecs#] (impl/default-trace-msg '~form value# error# nsecs#)))]
|
||||||
|
|
||||||
`(tel/spy!
|
`(tel/spy!
|
||||||
{:location* ~location*
|
{:ns ~ns
|
||||||
|
:coords ~coords
|
||||||
:id shim-id
|
:id shim-id
|
||||||
:level ~level
|
:level ~level
|
||||||
:msg ~msg}
|
:msg ~msg}
|
||||||
|
|
||||||
(tel/catch->error!
|
(tel/catch->error!
|
||||||
{:location* ~location*
|
{:ns ~ns
|
||||||
|
:coords ~coords
|
||||||
:id shim-id}
|
:id shim-id}
|
||||||
~form))))))
|
~form))))))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
(enabled? [_ level]
|
(enabled? [_ level]
|
||||||
(when-debug (println [:tools-logging/enabled? level logger-name]))
|
(when-debug (println [:tools-logging/enabled? level logger-name]))
|
||||||
(impl/signal-allowed?
|
(impl/signal-allowed?
|
||||||
{:location {:ns logger-name}
|
{:ns logger-name
|
||||||
:kind :tools-logging
|
:kind :tools-logging
|
||||||
:level level}))
|
:level level}))
|
||||||
|
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
(when-debug (println [:tools-logging/write! level logger-name]))
|
(when-debug (println [:tools-logging/write! level logger-name]))
|
||||||
(impl/signal!
|
(impl/signal!
|
||||||
{:allow? true ; Pre-filtered by `enabled?` call
|
{:allow? true ; Pre-filtered by `enabled?` call
|
||||||
:location {:ns logger-name}
|
:ns logger-name
|
||||||
:kind :tools-logging
|
:kind :tools-logging
|
||||||
:level level
|
:level level
|
||||||
:error throwable
|
:error throwable
|
||||||
|
|
|
||||||
|
|
@ -602,11 +602,11 @@
|
||||||
(when (and parent (not= parent root)) (af " parent: " (vf (format-parent ns parent)))) ; {:keys [id uid]}
|
(when (and parent (not= parent root)) (af " parent: " (vf (format-parent ns parent)))) ; {:keys [id uid]}
|
||||||
(when root (af " root: " (vf (format-parent ns root)))) ; {:keys [id uid]}
|
(when root (af " root: " (vf (format-parent ns root)))) ; {:keys [id uid]}
|
||||||
|
|
||||||
#?(:clj (when (enc/and* host incl-host?) (af " host: " (vf host)))) ; {:keys [ name ip]}
|
#?(:clj (when (enc/and? host incl-host?) (af " host: " (vf host)))) ; {:keys [ name ip]}
|
||||||
#?(:clj (when (enc/and* thread incl-thread?) (af " thread: " (vf thread)))) ; {:keys [group name id]}
|
#?(:clj (when (enc/and? thread incl-thread?) (af " thread: " (vf thread)))) ; {:keys [group name id]}
|
||||||
(when (enc/not-empty-coll data) (af " data: " (vf data)))
|
(when (enc/not-empty-coll data) (af " data: " (vf data)))
|
||||||
(when (enc/not-empty-coll ctx) (af " ctx: " (vf ctx)))
|
(when (enc/not-empty-coll ctx) (af " ctx: " (vf ctx)))
|
||||||
(when (enc/and* kvs incl-kvs?) (af " kvs: " (vf kvs))))
|
(when (enc/and? kvs incl-kvs?) (af " kvs: " (vf kvs))))
|
||||||
|
|
||||||
(let [{:keys [run-form error]} signal]
|
(let [{:keys [run-form error]} signal]
|
||||||
(when run-form
|
(when run-form
|
||||||
|
|
|
||||||
|
|
@ -40,21 +40,21 @@
|
||||||
(defn ex1! [] (throw ex1))
|
(defn ex1! [] (throw ex1))
|
||||||
(defn ex1? [x] (= (truss/ex-root x) ex1)))
|
(defn ex1? [x] (= (truss/ex-root x) ex1)))
|
||||||
|
|
||||||
(let [rt-sig-filter_ (atom nil)
|
(let [rt-call-filter_ (atom nil)
|
||||||
sig-handlers_ (atom nil)]
|
sig-handlers_ (atom nil)]
|
||||||
|
|
||||||
(test/use-fixtures :once
|
(test/use-fixtures :once
|
||||||
(enc/test-fixtures
|
(enc/test-fixtures
|
||||||
{:before
|
{:before
|
||||||
(fn []
|
(fn []
|
||||||
(reset! rt-sig-filter_ impl/*rt-sig-filter*)
|
(reset! rt-call-filter_ impl/*rt-call-filter*)
|
||||||
(reset! sig-handlers_ impl/*sig-handlers*)
|
(reset! sig-handlers_ impl/*sig-handlers*)
|
||||||
(enc/set-var-root! impl/*sig-handlers* nil)
|
(enc/set-var-root! impl/*sig-handlers* nil)
|
||||||
(enc/set-var-root! impl/*rt-sig-filter* nil))
|
(enc/set-var-root! impl/*rt-call-filter* nil))
|
||||||
|
|
||||||
:after
|
:after
|
||||||
(fn []
|
(fn []
|
||||||
(enc/set-var-root! impl/*rt-sig-filter* @rt-sig-filter_)
|
(enc/set-var-root! impl/*rt-call-filter* @rt-call-filter_)
|
||||||
(enc/set-var-root! impl/*sig-handlers* @sig-handlers_))})))
|
(enc/set-var-root! impl/*sig-handlers* @sig-handlers_))})))
|
||||||
|
|
||||||
;;;;
|
;;;;
|
||||||
|
|
@ -125,6 +125,12 @@
|
||||||
(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 "Callsite overrides"
|
||||||
|
[(is (sm? (with-sig (sig! { })) {:ns "taoensso.telemere-tests", :coords coords?}))
|
||||||
|
(is (sm? (with-sig (sig! {:ns "custom-ns" })) {:ns "custom-ns", :coords nil}) "Custom ns clears coords")
|
||||||
|
(is (sm? (with-sig (sig! { :coords [1 2]})) {:ns "taoensso.telemere-tests", :coords [1 2]}) "Custom coords")
|
||||||
|
(is (sm? (with-sig (sig! {:ns "custom-ns", :coords [1 2]})) {:ns "custom-ns", :coords [1 2]}) "Custom ns + coords")])
|
||||||
|
|
||||||
(testing "Support arb extra user kvs"
|
(testing "Support arb extra user kvs"
|
||||||
(let [sv (with-sig (sig! {:level :info, :my-k1 "v1", :my-k2 "v2"}))]
|
(let [sv (with-sig (sig! {:level :info, :my-k1 "v1", :my-k2 "v2"}))]
|
||||||
(is (sm? sv {:level :info, :my-k1 "v1", :my-k2 "v2"
|
(is (sm? sv {:level :info, :my-k1 "v1", :my-k2 "v2"
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,7 @@
|
||||||
[logger-name level]
|
[logger-name level]
|
||||||
(when-debug (println [:slf4j/allowed? (sig-level level) logger-name]))
|
(when-debug (println [:slf4j/allowed? (sig-level level) logger-name]))
|
||||||
(impl/signal-allowed?
|
(impl/signal-allowed?
|
||||||
{:location {:ns logger-name} ; Typically source class name
|
{:ns logger-name ; Typically source class name
|
||||||
:kind :slf4j
|
:kind :slf4j
|
||||||
:level (sig-level level)}))
|
:level (sig-level level)}))
|
||||||
|
|
||||||
|
|
@ -117,7 +117,7 @@
|
||||||
(when-debug (println [:slf4j/normalized-log! (sig-level level) logger-name]))
|
(when-debug (println [:slf4j/normalized-log! (sig-level level) logger-name]))
|
||||||
(impl/signal!
|
(impl/signal!
|
||||||
{:allow? true ; Pre-filtered by `allowed?` call
|
{:allow? true ; Pre-filtered by `allowed?` call
|
||||||
:location {:ns logger-name} ; Typically source class name
|
:ns logger-name ; Typically source class name
|
||||||
:kind :slf4j
|
:kind :slf4j
|
||||||
:level (sig-level level)
|
:level (sig-level level)
|
||||||
:inst inst
|
:inst inst
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue