mirror of
https://github.com/taoensso/telemere.git
synced 2025-12-18 18:11:12 +00:00
[nop] Misc housekeeping
This commit is contained in:
parent
cca8bb33ff
commit
7eb46ff555
8 changed files with 232 additions and 301 deletions
|
|
@ -37,7 +37,8 @@ Examples:
|
|||
(spy! ::my-id (+ 1 2)) ; %> {... :id ::my-id ...}
|
||||
(spy!
|
||||
{:let [x "x"] ; Available to `:data` and `:msg`
|
||||
:data {:x x}}
|
||||
:data {:x x}
|
||||
:msg ["My message:" x]}
|
||||
|
||||
(+ 1 2)) ; %> {... :data {x "x"}, :msg_ "My msg: x" ...}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,8 @@ Examples:
|
|||
(trace! ::my-id (+ 1 2)) ; %> {... :id ::my-id ...}
|
||||
(trace!
|
||||
{:let [x "x"] ; Available to `:data` and `:msg`
|
||||
:data {:x x}}
|
||||
:data {:x x}
|
||||
:msg ["My message:" x]}
|
||||
|
||||
(+ 1 2)) ; %> {... :data {x "x"}, :msg_ "My msg: x" ...}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,10 +32,6 @@
|
|||
|
||||
(enc/assert-min-encore-version [3 132 0])
|
||||
|
||||
;;;; TODO
|
||||
;; - Update Tufte (signal API, config API, signal keys, etc.)
|
||||
;; - Update Timbre (signal API, config API, signal keys, backport improvements)
|
||||
|
||||
;;;; Shared signal API
|
||||
|
||||
(sigs/def-api
|
||||
|
|
@ -383,7 +379,6 @@
|
|||
|
||||
(comment (dispatch-signal! (assoc (with-signal :trap (log! "hello")) :level :warn)))
|
||||
|
||||
|
||||
;;;; Interop
|
||||
|
||||
#?(:clj
|
||||
|
|
|
|||
|
|
@ -39,8 +39,8 @@
|
|||
([signal]
|
||||
(let [^java.io.Writer stream
|
||||
(case stream
|
||||
:*out* *out*
|
||||
:*err* *err*
|
||||
(:out :*out*) *out*
|
||||
(:err :*err*) *err*
|
||||
:auto (if (error-signal? signal) *err* *out*)
|
||||
stream)]
|
||||
|
||||
|
|
|
|||
|
|
@ -268,28 +268,20 @@
|
|||
(deftype #_defrecord WrappedSignal
|
||||
;; Internal type to implement `sigs/IFilterableSignal`,
|
||||
;; incl. lazy + cached `signal-value_` field.
|
||||
[ns kind id level signal-value_]
|
||||
[kind ns id level signal-value_]
|
||||
sigs/IFilterableSignal
|
||||
(allow-signal? [_ sig-filter] (sig-filter kind ns id level))
|
||||
(signal-debug [_] {:kind kind, :ns ns, :id id, :level level})
|
||||
(signal-value [_ handler-sample-rate]
|
||||
(let [sig-val (force signal-value_)]
|
||||
(or
|
||||
(when handler-sample-rate
|
||||
(when (map? sig-val)
|
||||
;; Replace call sample rate with combined (call * handler) sample rate
|
||||
(assoc sig-val :sample-rate
|
||||
(*
|
||||
(double handler-sample-rate)
|
||||
(double (or (get sig-val :sample-rate) 1.0))))))
|
||||
sig-val))))
|
||||
(sigs/signal-with-combined-sample-rate handler-sample-rate
|
||||
(force signal-value_))))
|
||||
|
||||
(defn wrap-signal
|
||||
"Used by `taoensso.telemere/dispatch-signal!`."
|
||||
[signal]
|
||||
(when (map? signal)
|
||||
(let [{:keys [ns kind id level]} signal]
|
||||
(WrappedSignal. ns kind id level signal))))
|
||||
(let [{:keys [kind ns id level]} signal]
|
||||
(WrappedSignal. kind ns id level signal))))
|
||||
|
||||
;;;; Handlers
|
||||
|
||||
|
|
@ -320,7 +312,7 @@
|
|||
Should delayed `:msg_` in returned signal be retained as-is?
|
||||
Delay is otherwise replaced by realized string.
|
||||
|
||||
See also `with-signals`."
|
||||
See also `with-signals` for more advanced options."
|
||||
([ form] `(with-signal false false ~form))
|
||||
([ trap-signals? form] `(with-signal false ~trap-signals? ~form))
|
||||
([raw-msg? trap-signals? form]
|
||||
|
|
@ -336,7 +328,7 @@
|
|||
(defmacro ^:public with-signals
|
||||
"Experimental, subject to change.
|
||||
Like `with-signal` but returns [[<form-value> <form-error>] [<signal1> ...]].
|
||||
Useful for tests/debugging."
|
||||
Useful for more advanced tests/debugging."
|
||||
([ form] `(with-signals false false ~form))
|
||||
([ trap-signals? form] `(with-signals false ~trap-signals? ~form))
|
||||
([raw-msgs? trap-signals? form]
|
||||
|
|
@ -567,7 +559,11 @@
|
|||
"Generic low-level signal call, also aliased in Encore."
|
||||
{:doc (signal-docstring :signal!)
|
||||
:arglists (signal-arglists :signal!)}
|
||||
[opts]
|
||||
|
||||
;; TODO Maybe later, once we're sure we don't want additional arities?
|
||||
;; Remember to also update signal-arglists, shell, etc.
|
||||
;; ([arg1 & more] (enc/keep-callsite `(signal! ~(apply hash-map arg1 more))))
|
||||
([opts]
|
||||
(have? map? opts) ; We require const map keys, but vals may require eval
|
||||
(let [defaults (enc/merge {:kind :generic, :level :info} (get opts :defaults))
|
||||
opts (enc/merge defaults (dissoc opts :defaults))
|
||||
|
|
@ -647,7 +643,7 @@
|
|||
|
||||
middleware-form
|
||||
(if-let [middleware+ (get opts :middleware+)]
|
||||
`(taoensso.telemere/comp-middleware taoensso.telemere/*middleware* ~middleware+)
|
||||
`(taoensso.encore/comp-middleware taoensso.telemere/*middleware* ~middleware+)
|
||||
(get opts :middleware `taoensso.telemere/*middleware*))
|
||||
|
||||
kvs-form
|
||||
|
|
@ -789,7 +785,7 @@
|
|||
;; Unconditionally send same wrapped signal to all handlers.
|
||||
;; Each handler will use wrapper for handler filtering,
|
||||
;; unwrapping (realizing) only allowed signals.
|
||||
(WrappedSignal. ~'__ns ~'__kind ~'__id ~'__level signal#))
|
||||
(WrappedSignal. ~'__kind ~'__ns ~'__id ~'__level signal#))
|
||||
|
||||
(if ~'__run-result
|
||||
( ~'__run-result signal#)
|
||||
|
|
@ -798,7 +794,7 @@
|
|||
(if-let [iife-wrap? true #_cljs?]
|
||||
;; Small perf hit to improve compatibility within `go` and other IOC-style bodies
|
||||
`((fn [] ~final-form))
|
||||
(do final-form)))))))
|
||||
(do final-form))))))))
|
||||
|
||||
(comment
|
||||
(with-signal (signal! {:level :warn :let [x :x] :msg ["Test" "message" x] :data {:a :A :x x} :run (+ 1 2)}))
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@
|
|||
"Email handler using `postal`,
|
||||
Ref. <https://github.com/drewr/postal>."
|
||||
(:require
|
||||
[taoensso.encore :as enc :refer [have have?]]
|
||||
[taoensso.encore :as enc]
|
||||
[taoensso.encore.signals :as sigs]
|
||||
[taoensso.telemere.utils :as utils]
|
||||
[postal.core :as postal]))
|
||||
|
||||
|
|
@ -32,9 +33,9 @@
|
|||
sb (enc/str-builder)
|
||||
s+spc (enc/sb-appender sb " ")]
|
||||
|
||||
(when level (s+spc (utils/format-level level)))
|
||||
(when kind (s+spc (utils/upper-qn kind)))
|
||||
(when id (s+spc (utils/format-id nil id)))
|
||||
(when level (s+spc (sigs/format-level level)))
|
||||
(when kind (s+spc (sigs/upper-qn kind)))
|
||||
(when id (s+spc (sigs/format-id nil id)))
|
||||
(when-let [msg (force msg_)] (s+spc "- " msg))
|
||||
|
||||
(enc/substr (str sb) 0 max-len))))))
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@
|
|||
(:require
|
||||
[clojure.string :as str]
|
||||
#?(:clj [clojure.java.io :as jio])
|
||||
[taoensso.encore :as enc :refer [have have?]]
|
||||
[taoensso.encore :as enc]
|
||||
[taoensso.encore.signals :as sigs]
|
||||
[taoensso.telemere.impl :as impl]))
|
||||
|
||||
(comment
|
||||
|
|
@ -12,61 +13,9 @@
|
|||
(remove-ns (symbol (str *ns*)))
|
||||
(:api (enc/interns-overview)))
|
||||
|
||||
;;;; Private
|
||||
;;;;
|
||||
|
||||
(enc/def* ^:no-doc upper-qn
|
||||
"Private, don't use.
|
||||
`:foo/bar` -> \"FOO/BAR\", etc."
|
||||
{:tag #?(:clj 'String :cljs 'string)}
|
||||
(enc/fmemoize (fn [x] (str/upper-case (enc/as-qname x)))))
|
||||
|
||||
(comment (upper-qn :foo/bar))
|
||||
|
||||
(enc/def* ^:no-doc format-level
|
||||
"Private, don't use.
|
||||
`:info` -> \"INFO\",
|
||||
`5` -> \"LEVEL:5\", etc."
|
||||
{:tag #?(:clj 'String :cljs 'string)}
|
||||
(enc/fmemoize
|
||||
(fn [x]
|
||||
(if (keyword? x)
|
||||
(upper-qn x)
|
||||
(str "LEVEL:" x)))))
|
||||
|
||||
(comment (format-level :info))
|
||||
|
||||
(enc/def* ^:no-doc format-id
|
||||
"Private, don't use.
|
||||
`:foo.bar/baz` -> \"::baz\", etc."
|
||||
{:tag #?(:clj 'String :cljs 'string)}
|
||||
(enc/fmemoize
|
||||
(fn [ns x]
|
||||
(if (keyword? x)
|
||||
(if (= (namespace x) ns)
|
||||
(str "::" (name x))
|
||||
(str x))
|
||||
(str x)))))
|
||||
|
||||
(comment
|
||||
(format-id (str *ns*) ::id1)
|
||||
(format-id nil ::id1))
|
||||
|
||||
(enc/def* ^:private format-location
|
||||
"Private, don't use.
|
||||
Returns \"<ns/file>(<line>,<column>)\", etc."
|
||||
{:tag #?(:clj 'String :cljs 'string)}
|
||||
(enc/fmemoize
|
||||
(fn [ns line column file]
|
||||
(when-let [base (or ns file)]
|
||||
(if line
|
||||
(if column
|
||||
(str base "(" line "," column ")")
|
||||
(str base "(" line ")"))
|
||||
base)))))
|
||||
|
||||
(comment
|
||||
(format-location "my-ns" 120 8 nil)
|
||||
(format-location nil 120 8 *file*))
|
||||
;; (enc/defalias sigs/upper-qn sigs/format-level sigs/format-id sigs/format-location)
|
||||
|
||||
;;;; Unique IDs (UIDs)
|
||||
|
||||
|
|
@ -573,9 +522,9 @@
|
|||
s+spc (enc/sb-appender sb " ")]
|
||||
|
||||
(when inst (when-let [ff format-inst-fn] (s+spc (ff inst))))
|
||||
(when level (s+spc (format-level level)))
|
||||
(when level (s+spc (sigs/format-level level)))
|
||||
|
||||
(if kind (s+spc (upper-qn kind)) (s+spc "DEFAULT"))
|
||||
(if kind (s+spc (sigs/upper-qn kind)) (s+spc "DEFAULT"))
|
||||
#?(:clj (s+spc (hostname)))
|
||||
|
||||
;; As `format-location`
|
||||
|
|
@ -587,7 +536,7 @@
|
|||
(when-let [c (get signal :column)] (s+ "," c))
|
||||
(s+ ")"))))
|
||||
|
||||
(when id (s+spc (format-id ns id)))
|
||||
(when id (s+spc (sigs/format-id ns id)))
|
||||
(when-let [msg (force msg_)] (s+spc "- " msg))
|
||||
|
||||
(when-not (zero? (enc/sb-length sb))
|
||||
|
|
@ -595,13 +544,11 @@
|
|||
|
||||
(comment ((signal-preamble-fn) (tel/with-signal (tel/event! ::ev-id))))
|
||||
|
||||
(defn- not-empty-coll [x] (when x (if (coll? x) (not-empty x) x)))
|
||||
|
||||
(defn signal-content-fn
|
||||
"Experimental, subject to change.
|
||||
Returns a (fn content [signal]) that:
|
||||
- Takes a Telemere signal (map).
|
||||
- Returns a signal content ?string (incl. data, ctx, etc.).
|
||||
- Returns a human-readable signal content ?string (incl. data, ctx, etc.).
|
||||
|
||||
Options:
|
||||
`:raw-error?` - Retain unformatted error? (default false)
|
||||
|
|
@ -644,9 +591,9 @@
|
|||
(when (and parent root) (af " root: " (vf (dissoc root :inst)))) ; {:keys [id uid]}
|
||||
#?(:clj (when (and host incl-host?) (af " host: " (vf host)))) ; {:keys [ name ip]}
|
||||
#?(:clj (when (and thread incl-thread?) (af " thread: " (vf thread)))) ; {:keys [group name id]}
|
||||
(when (not-empty-coll data) (af " data: " (vf data)))
|
||||
(when (enc/not-empty-coll data) (af " data: " (vf data)))
|
||||
(when (and kvs incl-kvs?) (af " kvs: " (vf kvs)))
|
||||
(when (not-empty-coll ctx) (af " ctx: " (vf ctx))))
|
||||
(when (enc/not-empty-coll ctx) (af " ctx: " (vf ctx))))
|
||||
|
||||
(let [{:keys [run-form error]} signal]
|
||||
(when run-form
|
||||
|
|
|
|||
|
|
@ -785,17 +785,7 @@
|
|||
;;;; Utils
|
||||
|
||||
(deftest _utils
|
||||
[(testing "Basic utils"
|
||||
[(is (= (utils/upper-qn :foo/bar) "FOO/BAR"))
|
||||
|
||||
(is (= (utils/format-level :info) "INFO"))
|
||||
(is (= (utils/format-level 8) "LEVEL:8"))
|
||||
|
||||
(is (= (utils/format-id "foo.bar" :foo.bar/qux) "::qux"))
|
||||
(is (= (utils/format-id "foo.baz" :foo.bar/qux) ":foo.bar/qux"))
|
||||
(is (= (utils/format-id nil :foo.bar/qux) ":foo.bar/qux"))])
|
||||
|
||||
(testing "error-signal?"
|
||||
[(testing "error-signal?"
|
||||
[(is (= (utils/error-signal? {:error nil}) false))
|
||||
(is (= (utils/error-signal? {:error ex1}) true))
|
||||
(is (= (utils/error-signal? {:kind :error}) true))
|
||||
|
|
|
|||
Loading…
Reference in a new issue