[new] Add :end-with-newline opt to signal formatters

Instead allow format-signal-fn to decide whether or not to end with a newline
This commit is contained in:
Peter Taoussanis 2024-05-03 08:32:17 +02:00
parent 49b6da2cf2
commit c5333faa03
4 changed files with 43 additions and 22 deletions

View file

@ -42,7 +42,7 @@
(let [^java.io.Writer stream (let [^java.io.Writer stream
(or stream (if (error-signal? signal) *err* *out*))] (or stream (if (error-signal? signal) *err* *out*))]
(when-let [output (format-signal-fn signal)] (when-let [output (format-signal-fn signal)]
(.write stream (str output nl)) (.write stream (str output))
(.flush stream)))))))) (.flush stream))))))))
:cljs :cljs
@ -71,7 +71,7 @@
([signal] ([signal]
(when-let [output (format-signal-fn signal)] (when-let [output (format-signal-fn signal)]
(let [logger (js-console-logger (get signal :level))] (let [logger (js-console-logger (get signal :level))]
(.call logger logger (str output nl))))))))))) (.call logger logger (str output)))))))))))
#?(:cljs #?(:cljs
(defn- logger-fn [logger] (defn- logger-fn [logger]

View file

@ -363,8 +363,7 @@
([] (locking lock (fw))) ; Close writer ([] (locking lock (fw))) ; Close writer
([signal] ([signal]
(when-let [output (format-signal-fn signal)] (when-let [output (format-signal-fn signal)]
(let [output-str (str output utils/newline) (let [new-interval? (when interval (new-interval!?))
new-interval? (when interval (new-interval!?))
>max-file-size? (when max-file-size (>max-file-size?)) >max-file-size? (when max-file-size (>max-file-size?))
reset-stream? (or new-interval? >max-file-size?)] reset-stream? (or new-interval? >max-file-size?)]
@ -387,7 +386,7 @@
max-num-parts gzip-archives? nil))) max-num-parts gzip-archives? nil)))
(when reset-stream? (fw :writer/reset!)) (when reset-stream? (fw :writer/reset!))
(do (fw output-str)))))))))) (do (fw output))))))))))
(comment (comment
(manage-test-files! :create) (manage-test-files! :create)

View file

@ -47,7 +47,7 @@
([] (sw)) ; Shut down ([] (sw)) ; Shut down
([signal] ([signal]
(when-let [output (format-signal-fn signal)] (when-let [output (format-signal-fn signal)]
(sw (str output utils/newline)))))))) (sw output)))))))
(defn handler:udp-socket (defn handler:udp-socket
"Experimental, subject to change. Feedback welcome! "Experimental, subject to change. Feedback welcome!
@ -90,7 +90,7 @@
([] (.close socket)) ; Shut down ([] (.close socket)) ; Shut down
([signal] ([signal]
(when-let [output (format-signal-fn signal)] (when-let [output (format-signal-fn signal)]
(let [ba (enc/str->utf8-ba (str output utils/newline)) (let [ba (enc/str->utf8-ba (str output))
ba-len (alength ba) ba-len (alength ba)
packet (DatagramPacket. ba (min ba-len max-packet-bytes))] packet (DatagramPacket. ba (min ba-len max-packet-bytes))]

View file

@ -545,14 +545,20 @@
- Takes a Telemere signal. - Takes a Telemere signal.
- Returns edn string of the (minified) signal." - Returns edn string of the (minified) signal."
([] (format-signal->edn-fn nil)) ([] (format-signal->edn-fn nil))
([{:keys [pr-edn-fn prep-fn] ([{:keys [pr-edn-fn prep-fn end-with-newline?]
:or :or
{pr-edn-fn pr-edn {pr-edn-fn pr-edn
prep-fn (comp error-in-signal->maps minify-signal)}}] prep-fn (comp error-in-signal->maps minify-signal)
end-with-newline? true}}]
(fn format-signal->edn [signal] (let [nl newline]
(let [signal* (if prep-fn (prep-fn signal) signal)] (fn format-signal->edn [signal]
(pr-edn-fn signal*))))) (let [signal* (if prep-fn (prep-fn signal) signal)
output (pr-edn-fn signal*)]
(if end-with-newline?
(str output nl)
(do output)))))))
(comment ((format-signal->edn-fn) {:level :info, :msg "msg"})) (comment ((format-signal->edn-fn) {:level :info, :msg "msg"}))
@ -562,20 +568,31 @@
- Takes a Telemere signal. - Takes a Telemere signal.
- Returns JSON string of the (minified) signal. - Returns JSON string of the (minified) signal.
(Clj only): An appropriate `:pr-json-fn` MUST be provided." (Clj only): An appropriate `:pr-json-fn` MUST be provided.
jsonista is one good option, Ref. <https://github.com/metosin/jsonista>:
(require '[jsonista.core :as jsonista])
(format-signal->json-fn {:pr-json-fn jsonista/write-value-as-string ...})"
([] (format-signal->json-fn nil)) ([] (format-signal->json-fn nil))
([{:keys [pr-json-fn prep-fn] ([{:keys [pr-json-fn prep-fn end-with-newline?]
:or :or
{#?@(:cljs [pr-json-fn pr-json]) {#?@(:cljs [pr-json-fn pr-json])
prep-fn (comp error-in-signal->maps minify-signal)}}] prep-fn (comp error-in-signal->maps minify-signal)
end-with-newline? true}}]
(when-not pr-json-fn (when-not pr-json-fn
(throw (throw
(ex-info (str "No `" `format-signal->json-fn "` `:pr-json-fn` was provided") {}))) (ex-info (str "No `" `format-signal->json-fn "` `:pr-json-fn` was provided") {})))
(fn format-signal->json [signal] (let [nl newline]
(let [signal* (if prep-fn (prep-fn signal) signal)] (fn format-signal->json [signal]
(pr-json-fn signal*))))) (let [signal* (if prep-fn (prep-fn signal) signal)
output (pr-json-fn signal*)]
(if end-with-newline?
(str output nl)
(do output)))))))
(comment ((format-signal->json-fn) {:level :info, :msg "msg"})) (comment ((format-signal->json-fn) {:level :info, :msg "msg"}))
@ -585,15 +602,19 @@
- Takes a Telemere signal. - Takes a Telemere signal.
- Returns a formatted string intended for text consoles, etc." - Returns a formatted string intended for text consoles, etc."
([] (format-signal->str-fn nil)) ([] (format-signal->str-fn nil))
([{:keys [format-signal->prelude-fn ([{:keys
format-nsecs-fn format-error-fn] [format-signal->prelude-fn
format-nsecs-fn format-error-fn
end-with-newline?]
:or :or
{format-signal->prelude-fn (format-signal->prelude-fn) ; (fn [signal]) {format-signal->prelude-fn (format-signal->prelude-fn) ; (fn [signal])
format-nsecs-fn (format-nsecs-fn) ; (fn [nanosecs]) format-nsecs-fn (format-nsecs-fn) ; (fn [nanosecs])
format-error-fn (format-error-fn) ; (fn [error]) format-error-fn (format-error-fn) ; (fn [error])
}}] end-with-newline? true}}]
(let [signal-content-handler ; (fn [signal hf vf] (let [nl newline
signal-content-handler ; (fn [signal hf vf]
(signal-content-handler (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})]
@ -605,6 +626,7 @@
(when-let [ff format-signal->prelude-fn] (s+ (ff signal))) ; Prelude (when-let [ff format-signal->prelude-fn] (s+ (ff signal))) ; Prelude
(signal-content-handler signal s++ enc/pr-edn*) ; Content (signal-content-handler signal s++ enc/pr-edn*) ; Content
(when end-with-newline? (enc/sb-append sb nl))
(str sb)))))) (str sb))))))
(comment (comment