Пользовательское основное сообщение в электронной почте riemann

Я пытаюсь создать собственное сообщение в основном разделе электронной почты с помощью 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 "[email protected]"})]

Мой вывод:

Hello Team, now the time is Thank You!

Мой ожидаемый результат:

Hello Team, now the time is 12:13:45 Thank You!.

Моя временная метка не добавляется в :body.


person Mangoski    schedule 20.11.2015    source источник
comment
ваш параметр есть events, и вы читаете из event (отсутствует s). сначала начните с (pr-str events), чтобы посмотреть, что получится.   -  person cfrick    schedule 20.11.2015
comment
Я пробовал с (pr-str events) Я получаю событие :timestamp. Но когда я пробовал это с (apply str "Hello Team, now the time is" (:timestamp events) "Thank You!"))., я не получаю значение :timestamp, которое добавляется к моей строке.   -  person Mangoski    schedule 20.11.2015
comment
пожалуйста, добавьте pr-str к вопросу   -  person cfrick    schedule 20.11.2015


Ответы (1)


из документов:

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!"

При оповещении через riemann мое личное мнение состоит в том, чтобы заключить оповещения в фиксированные временные окна и использовать метку времени с начала этого окна, хотя это в первую очередь из-за личных предпочтений.

person Arthur Ulfeldt    schedule 20.11.2015
comment
Я обновил свой код с помощью этого метода (:timestamp (first events)), но все равно не получаю значения, которое передаю Риману. - person Mangoski; 21.11.2015
comment
вы все еще получаете электронные письма, отправленные со строкой Hello Team, сейчас время Спасибо! ? (что указывало бы на то, что он по-прежнему равен нулю) или вы вообще не получаете электронные письма? - person Arthur Ulfeldt; 22.11.2015
comment
Я получаю электронное письмо, но я все еще получаю только эту строку. Привет, команда, сейчас время Спасибо!, мое значение :timestamp в пользовательском поле не было добавлено к моему сообщению. - person Mangoski; 23.11.2015