mirror of
https://github.com/taoensso/telemere.git
synced 2025-12-17 09:51:12 +00:00
[mod] Postal handler now uses default preamble fn for email subject
This commit is contained in:
parent
55323f1f54
commit
706a8b6d37
1 changed files with 16 additions and 37 deletions
|
|
@ -12,36 +12,6 @@
|
||||||
(remove-ns (symbol (str *ns*)))
|
(remove-ns (symbol (str *ns*)))
|
||||||
(:api (enc/interns-overview)))
|
(:api (enc/interns-overview)))
|
||||||
|
|
||||||
(defn signal-subject-fn
|
|
||||||
"Experimental, subject to change.
|
|
||||||
Returns a (fn format [signal]) that:
|
|
||||||
- Takes a Telemere signal (map).
|
|
||||||
- Returns an email subject string like:
|
|
||||||
\"INFO EVENT :taoensso.telemere.postal/ev-id1 - msg\""
|
|
||||||
([] (signal-subject-fn nil))
|
|
||||||
([{:keys [max-len subject-signal-key]
|
|
||||||
:or
|
|
||||||
{max-len 128
|
|
||||||
subject-signal-key :postal/subject}}]
|
|
||||||
|
|
||||||
(fn signal-subject [signal]
|
|
||||||
(or
|
|
||||||
(get signal subject-signal-key) ; Custom subject
|
|
||||||
|
|
||||||
;; Simplified `utils/signal-preamble-fn`
|
|
||||||
(let [{:keys [level kind #_ns id msg_]} signal
|
|
||||||
sb (enc/str-builder)
|
|
||||||
s+spc (enc/sb-appender sb " ")]
|
|
||||||
|
|
||||||
(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))))))
|
|
||||||
|
|
||||||
(comment ((signal-subject-fn) (tel/with-signal (tel/event! ::ev-id1 #_{:postal/subject "My subject"}))))
|
|
||||||
|
|
||||||
(def default-dispatch-opts
|
(def default-dispatch-opts
|
||||||
{:min-level :info
|
{:min-level :info
|
||||||
:rate-limit
|
:rate-limit
|
||||||
|
|
@ -89,6 +59,8 @@
|
||||||
:X-MyHeader \"A custom header\"}
|
:X-MyHeader \"A custom header\"}
|
||||||
|
|
||||||
`:subject-fn` - (fn [signal]) => email subject string
|
`:subject-fn` - (fn [signal]) => email subject string
|
||||||
|
`:subject-max-len` - Truncate subjects beyond this length (default 90)
|
||||||
|
|
||||||
`:body-fn` - (fn [signal]) => email body content string,
|
`:body-fn` - (fn [signal]) => email body content string,
|
||||||
see `format-signal-fn` or `pr-signal-fn`
|
see `format-signal-fn` or `pr-signal-fn`
|
||||||
|
|
||||||
|
|
@ -98,15 +70,22 @@
|
||||||
Use appropriate handler dispatch options for async handling and rate limiting, etc."
|
Use appropriate handler dispatch options for async handling and rate limiting, etc."
|
||||||
|
|
||||||
;; ([] (handler:postal nil))
|
;; ([] (handler:postal nil))
|
||||||
([{:keys [conn-opts msg-opts, subject-fn body-fn]
|
([{:keys [conn-opts msg-opts, subject-fn subject-max-len body-fn]
|
||||||
:or
|
:or
|
||||||
{subject-fn (signal-subject-fn)
|
{body-fn (utils/format-signal-fn)
|
||||||
body-fn (utils/format-signal-fn)}}]
|
subject-fn (utils/signal-preamble-fn {:format-inst-fn nil})
|
||||||
|
subject-max-len 128}}]
|
||||||
|
|
||||||
(when-not (map? conn-opts) (throw (ex-info "Expected `:conn-opts` map" (enc/typed-val conn-opts))))
|
(when-not (map? conn-opts) (throw (ex-info "Expected `:conn-opts` map" (enc/typed-val conn-opts))))
|
||||||
(when-not (map? msg-opts) (throw (ex-info "Expected `:msg-opts` map" (enc/typed-val msg-opts))))
|
(when-not (map? msg-opts) (throw (ex-info "Expected `:msg-opts` map" (enc/typed-val msg-opts))))
|
||||||
|
|
||||||
(let [handler-fn
|
(let [subject-fn
|
||||||
|
(if-let [n subject-max-len]
|
||||||
|
(comp
|
||||||
|
(fn [s] (when s (enc/substr (str s) 0 n)))
|
||||||
|
subject-fn))
|
||||||
|
|
||||||
|
handler-fn
|
||||||
(fn a-handler:postal
|
(fn a-handler:postal
|
||||||
([ ]) ; Stop => noop
|
([ ]) ; Stop => noop
|
||||||
([signal]
|
([signal]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue