Я должен проверить количество отсчетов, отображаемых в событии, с каждым интервалом каждые 30 секунд. Если значение счета больше 5, мне нужно вызвать электронное письмо.Счет событий в определенный промежуток времени в riemann
Я использую приведенный ниже код, но электронная почта не срабатывала.
(let [userindex1 (default :ttl 300 (update-index (index)))]
(streams
prn
userindex1))
(streams
(where (and (service "system_log")
(not (expired? event)))
; fixed-time-window sends a vector of events out every 30 seconds
(fixed-time-window
30
; smap passes those events into a function
(smap
(fn [events]
;Calculate the no of count of events for failure
(let [numberofFailure (count (filter #(="IE" (:description %)) events))]
{:status "login failures"
:metric numberofFailure
:totalFail (boolean(numberofFailure > 5))}
(streams
prn
numberofFailure))))
;check if the variable status is true if condition satisfied then trigger an email
(let [email (mailer {:host "smtp.gmail.com"
:port 25
:user "aaaaa"
:pass "bbbbb"
:auth "true"
:subject (fn [events]
(clojure.string/join ", "
(map :service events)))
:from "[email protected]"})]
(streams
(where (and (:status "login failures")
(:totalFail true))
(email "[email protected]")))))))
Куда я иду не так?
Есть довольно много недостающих частей на этом фрагменте, но независимо от того, что есть некоторые очевидные неправильные выражения как '(и (: статус «неудачи входа») (: totalFail true)) '(он всегда будет производить nil).Я предлагаю вам проверить строку за строкой в REPL и использовать другой поток, чтобы периодически проверять значение счетчика, заключенное в [atom] (https://clojuredocs.org/clojure.core/atom) –