[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:
Peter Taoussanis 2025-02-26 19:08:44 +01:00
parent 1f99f7186b
commit fda22ce80c
10 changed files with 141 additions and 129 deletions

View file

@ -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"]

View file

@ -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

View file

@ -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})))

View file

@ -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)))))

View file

@ -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

View file

@ -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))))))

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -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