[nop] Handler housekeeping

This commit is contained in:
Peter Taoussanis 2024-04-04 16:12:44 +02:00
parent 97ddc93775
commit 15577ab106
3 changed files with 45 additions and 39 deletions

View file

@ -373,13 +373,13 @@
;;;; Handlers ;;;; Handlers
(enc/defaliases handlers/console-handler-fn (enc/defaliases handlers/console-handler
#?(:cljs handlers/raw-console-handler-fn)) #?(:cljs handlers/raw-console-handler))
(defonce ^:no-doc __add-default-handlers (defonce ^:no-doc __add-default-handlers
(do (do
(add-handler! :default-console-handler (add-handler! :default-console-handler
(console-handler-fn)) (console-handler))
nil)) nil))
;;;; Flow benchmarks ;;;; Flow benchmarks
@ -416,7 +416,7 @@
;;;; ;;;;
(comment (comment
(with-handler :hid1 (handlers/console-handler-fn) {} (log! "Message")) (with-handler :hid1 (handlers/console-handler) {} (log! "Message"))
(let [sig (let [sig
(with-signal (with-signal
@ -426,7 +426,7 @@
(ex-info "Ex2" {:b :B} (ex-info "Ex2" {:b :B}
(ex-info "Ex1" {:a :A}))}))] (ex-info "Ex1" {:a :A}))}))]
(do ((handlers/console-handler-fn) sig)) #?(:cljs (let [hf (handlers/raw-console-handler)] (hf sig) (hf)))
#?(:cljs ((handlers/raw-console-handler-fn) sig)))) (do (let [hf (handlers/console-handler)] (hf sig) (hf)))))
;;;; ;;;;

View file

@ -11,7 +11,7 @@
(:api (enc/interns-overview))) (:api (enc/interns-overview)))
#?(:clj #?(:clj
(defn console-handler-fn (defn console-handler
"Experimental, subject to change. "Experimental, subject to change.
Returns a (fn handler [signal]) that: Returns a (fn handler [signal]) that:
@ -29,7 +29,7 @@
See each format builder for options, etc." See each format builder for options, etc."
([] (console-handler-fn nil)) ([] (console-handler nil))
([{:keys [format-signal-fn stream] ([{:keys [format-signal-fn stream]
:or {format-signal-fn (utils/format-signal->str-fn)}}] :or {format-signal-fn (utils/format-signal->str-fn)}}]
@ -37,15 +37,17 @@
error-signal? utils/error-signal? error-signal? utils/error-signal?
nl utils/newline] nl utils/newline]
(fn console-handler [signal] (fn a-console-handler
(let [^java.io.Writer stream ([]) ; Shut down (no-op)
(or stream (if (error-signal? signal) *err* *out*))] ([signal]
(when-let [output (format-signal-fn signal)] (let [^java.io.Writer stream
(.write stream (str output nl)) (or stream (if (error-signal? signal) *err* *out*))]
(.flush stream))))))) (when-let [output (format-signal-fn signal)]
(.write stream (str output nl))
(.flush stream))))))))
:cljs :cljs
(defn console-handler-fn (defn console-handler
"Experimental, subject to change. "Experimental, subject to change.
If `js/console` exists, returns a (fn handler [signal]) that: If `js/console` exists, returns a (fn handler [signal]) that:
@ -60,7 +62,7 @@
See each format builder for options, etc." See each format builder for options, etc."
([] (console-handler-fn nil)) ([] (console-handler nil))
([{:keys [format-signal-fn] ([{:keys [format-signal-fn]
:or {format-signal-fn (utils/format-signal->str-fn)}}] :or {format-signal-fn (utils/format-signal->str-fn)}}]
@ -68,10 +70,12 @@
(let [js-console-logger utils/js-console-logger (let [js-console-logger utils/js-console-logger
nl utils/newline] nl utils/newline]
(fn console-handler [signal] (fn a-console-handler
(when-let [output (format-signal-fn signal)] ([]) ; Shut down (no-op)
(let [logger (js-console-logger (get signal :level))] ([signal]
(.call logger logger (str output nl)))))))))) (when-let [output (format-signal-fn signal)]
(let [logger (js-console-logger (get signal :level))]
(.call logger logger (str output nl)))))))))))
#?(:cljs #?(:cljs
(defn- logger-fn [logger] (defn- logger-fn [logger]
@ -83,7 +87,7 @@
([x1 x2 x3 & more] (apply logger x1 x2 x3 more))))) ([x1 x2 x3 & more] (apply logger x1 x2 x3 more)))))
#?(:cljs #?(:cljs
(defn raw-console-handler-fn (defn raw-console-handler
"Experimental, subject to change. "Experimental, subject to change.
If `js/console` exists, returns a (fn handler [signal]) that: If `js/console` exists, returns a (fn handler [signal]) that:
@ -93,7 +97,7 @@
Intended for use with browser formatting tools like `binaryage/devtools`, Intended for use with browser formatting tools like `binaryage/devtools`,
Ref. <https://github.com/binaryage/cljs-devtools>." Ref. <https://github.com/binaryage/cljs-devtools>."
([] (raw-console-handler-fn nil)) ([] (raw-console-handler nil))
([{:keys [format-signal-prelude-fn format-nsecs-fn] :as opts ([{:keys [format-signal-prelude-fn format-nsecs-fn] :as opts
:or :or
{format-signal-prelude-fn (utils/format-signal-prelude-fn) ; (fn [signal]) {format-signal-prelude-fn (utils/format-signal-prelude-fn) ; (fn [signal])
@ -102,21 +106,23 @@
(when (and (exists? js/console) (exists? js/console.group)) (when (and (exists? js/console) (exists? js/console.group))
(let [js-console-logger utils/js-console-logger (let [js-console-logger utils/js-console-logger
handle-signal-content-fn ; (fn [signal hf vf] signal-content-handler ; (fn [signal hf vf]
(utils/handle-signal-content-fn (utils/signal-content-handler
{:format-nsecs-fn format-nsecs-fn {:format-nsecs-fn format-nsecs-fn
:format-error-fn nil :format-error-fn nil
:raw-error? true})] :raw-error? true})]
(fn raw-console-handler [signal] (fn a-raw-console-handler
(let [{:keys [level error]} signal ([]) ; Shut down (no-op)
logger (js-console-logger level)] ([signal]
(let [{:keys [level error]} signal
logger (js-console-logger level)]
;; Unfortunately groups have no level ;; Unfortunately groups have no level
(.group js/console (format-signal-prelude-fn signal)) (.group js/console (format-signal-prelude-fn signal))
(handle-signal-content-fn signal (logger-fn logger) identity) (signal-content-handler signal (logger-fn logger) identity)
(when-let [stack (and error (.-stack (enc/ex-root error)))] (when-let [stack (and error (.-stack (enc/ex-root error)))]
(.call logger logger stack)) (.call logger logger stack))
(.groupEnd js/console)))))))) (.groupEnd js/console)))))))))

View file

@ -236,11 +236,11 @@
(comment ((format-signal-prelude-fn) (tel/with-signal (tel/event! ::ev-id)))) (comment ((format-signal-prelude-fn) (tel/with-signal (tel/event! ::ev-id))))
(defn ^:no-doc handle-signal-content-fn (defn ^:no-doc signal-content-handler
"Private, don't use. "Private, don't use.
Returns a (fn handle [signal handle-fn value-fn]) for internal use. Returns a (fn handle [signal handle-fn value-fn]) for internal use.
Content equivalent to `format-signal-prelude-fn`." Content equivalent to `format-signal-prelude-fn`."
([] (handle-signal-content-fn nil)) ([] (signal-content-handler nil))
([{:keys [format-nsecs-fn format-error-fn raw-error?] ([{:keys [format-nsecs-fn format-error-fn raw-error?]
:or :or
{format-nsecs-fn (format-nsecs-fn) ; (fn [nanosecs]) {format-nsecs-fn (format-nsecs-fn) ; (fn [nanosecs])
@ -250,7 +250,7 @@
(let [err-start (str newline "<<< error <<<" newline) (let [err-start (str newline "<<< error <<<" newline)
err-stop (str newline ">>> error >>>")] err-stop (str newline ">>> error >>>")]
(fn handle-signal-content [signal hf vf] (fn a-signal-content-handler [signal hf vf]
(let [{:keys [uid parent data extra-kvs ctx sample-rate]} signal] (let [{:keys [uid parent data extra-kvs ctx sample-rate]} signal]
(when sample-rate (hf "sample: " (vf sample-rate))) (when sample-rate (hf "sample: " (vf sample-rate)))
(when uid (hf " uid: " (vf uid))) (when uid (hf " uid: " (vf uid)))
@ -338,8 +338,8 @@
format-error-fn (format-error-fn) ; (fn [error]) format-error-fn (format-error-fn) ; (fn [error])
}}] }}]
(let [handle-signal-content-fn ; (fn [signal hf vf] (let [signal-content-handler ; (fn [signal hf vf]
(handle-signal-content-fn (signal-content-handler
{:format-nsecs-fn format-nsecs-fn {:format-nsecs-fn format-nsecs-fn
:format-error-fn format-error-fn})] :format-error-fn format-error-fn})]
@ -349,7 +349,7 @@
s++ (partial enc/sb-append sb (str newline " "))] s++ (partial enc/sb-append sb (str newline " "))]
(when-let [ff format-signal-prelude-fn] (s+ (ff signal))) ; Prelude (when-let [ff format-signal-prelude-fn] (s+ (ff signal))) ; Prelude
(handle-signal-content-fn signal s++ enc/pr-edn) ; Content (signal-content-handler signal s++ enc/pr-edn) ; Content
(str sb)))))) (str sb))))))
(comment (comment