我正在尝试使用riemann在电子邮件的正文部分创建自定义消息。 我无法动态追加该字段。
黎曼配置:
(let [email (mailer
{:host "XXXXX" :port XX :user "XXX" :pass "XXX" :auth "true"
:subject (fn [events] "Team")
:body (fn [events]
(apply str "Hello Team, now the time is" (:timestamp event) "Thank You!"))
:from "xxx@gmail.com"})]
我的输出:
Hello Team, now the time is Thank You!
我的预期输出:
Hello Team, now the time is 12:13:45 Thank You!.
我的时间戳没有附加在:body中。
答案 0 :(得分:0)
来自the docs:
These formatting functions take a sequence of events and return a string.
所以问题是您想要从序列中的哪个事件获取时间戳?如果您在序列中查找关键字,而不是该序列的其中一个成员,则默认情况下会返回nil
:
core> (:asdf '(1 2 3))
nil
如果你apply str
进入其他几个字符串,它将无效,因为str
会忽略它。这是您输出的来源。这是一个类似的示例函数:
core> (let [body-fn (fn [events]
(apply str "Hello Team, now the time is"
(:timestamp events)
"Thank You!"))]
(body-fn [{:timestamp 42} {:timestamp 43}]))
"Hello Team, now the time isThank You!"
如果我们从第一个事件中选择时间戳:
core> (let [body-fn (fn [events]
(apply str "Hello Team, now the time is"
(:timestamp (first events))
"Thank You!"))]
(body-fn [{:timestamp 42} {:timestamp 43}]))
"Hello Team, now the time is42Thank You!"
当通过黎曼警告我的个人意见是将被提醒的事物包装到固定时间窗口并使用该窗口开始时的时间戳,尽管这主要是因为个人偏好。