2016-08-18 6 views
1

Я использую Riemann в своем проекте, чтобы вызвать оповещение по электронной почте. Возможно ли инициировать оповещение по электронной почте только для определенных дней, если можно сказать (только с пн-пт с 3 до 8 вечера).Возможно ли настроить оповещение по электронной почте в определенные дни и определенное время в Римане?

Если это может кто-нибудь помочь мне со ссылкой.

Мой обновленный код:

(tcp-server {:host "127.0.0.1" :port 5555}) 

(let [userindex1 (default :ttl 300 (update-index (index)))]) 
    (let [email (mailer {....email configuration})] 
      (streams 
     (where (service "log") 
      (smap 
       (fn [events] 
       (let [count-of-transaction (count (filter #(= "error" (:type %)) events))] 
        (event 
        { 
        :status "Failure" 
        :metric count-of-failures 
        :total-fail (< count-of-failures 2)}))) 

       (where (let [now (clj-time.core/now)] 
        (and (<= 3 (clj-time.core/hour now) 20) 
         (<= 1 (clj-time.core/day-of-week now) 5) 
         (= (:status event) "Failure") 
         (:total-fail event))) 
       (rollup 1 200 
       (email "[email protected]") 
       ))prn)))) 
+0

Я предполагаю, что это ошибка проводки, но в вашем примере the) самого лучшего, кто хочет, находится в неправильном месте. –

+0

Вы имели в виду эту строку '(let [userindex1 (default: ttl 300 (update-index (index))))) – Mangoski

ответ

0

Да! Вы можете поместить любой код, который вы хотите в условном positon в виде where пункта здесь пример конфигурации, которая зависит от времени суток и дня недели, чтобы решить, когда посылать «сигналы»:

; -*- mode: clojure; -*- 
>; vim: filetype=clojure 

(riemann.repl/start-server! {:port 5557 :host "0.0.0.0"}) ;; this is only safe in a docker container 


; Listen on the local interface over TCP (5555), UDP (5555), and websockets 
; (5556) 
(let [host "0.0.0.0"] 
    (tcp-server {:host host}) 
    (ws-server {:host host})) 

; Expire old events from the index every 5 seconds. 
(periodically-expire 5) 

(require '[clj-time [core :refer [now hour day-of-week]]]) 

(let [index (tap :index (index))] 
    (streams 
    (where (service "log") 
      (fixed-event-window 3 
          (smap 
           (fn [events] 
           (let [count-of-failures (count (filter #(= "error" (:type %)) events)) 
             new-event (assoc (first events) 
                 :status "Failure" 
                 :metric count-of-failures 
                 :ttl 300 
                 :total-fail (> count-of-failures 2))]          
            new-event)) 
           (where (fn [event] 
             (let [now (clj-time.core/now)] 
             (and (<= 0 (clj-time.core/hour now) 17) 
               (<= 2 (clj-time.core/day-of-week now) 6) 
               (= (:status event) "Failure") 
               (:total-fail event)))) 
            (throttle 1 200 
               #(println "emailing about" %) 
               index))))))) 

(tests 
    (deftest index-test 
    (let [workday (clj-time.format/parse "2142-01-01T00:00:00.000Z") 
      weekend (clj-time.format/parse "2142-01-03T00:00:00.000Z")] 
     (let [index-after-events (with-redefs [clj-time.core/now (constantly workday)] 
           (inject! [{:service "log" 
              :type "error" 
              :time 42} 
              {:service "log" 
              :type "error" 
              :time 43} 
              {:service "log" 
              :type "error" 
              :time 44}]))] 
     (is (= index-after-events 
       {:index [{:service "log", :type "error", :time 42, :status "Failure", :metric 3, :ttl 300, :total-fail true}]}))) 
     (let [index-after-events (with-redefs [clj-time.core/now (constantly weekend)] 
           (inject! [{:service "log" 
              :type "error" 
              :time 42} 
              {:service "log" 
              :type "error" 
              :time 43} 
              {:service "log" 
              :type "error" 
              :time 44}]))] 
     (is (= index-after-events 
       {:index []})))))) 

и запустить Тесты:

[email protected]:/test# riemann test sample.config 
INFO [2016-10-03 22:07:39,805] main - riemann.bin - Loading /test/sample.config 
INFO [2016-10-03 22:07:39,840] main - riemann.repl - REPL server {:port 5557, :host 0.0.0.0} online 

Testing riemann.config-test 
emailing about {:service log, :type error, :time 42, :status Failure, :metric 3, :ttl 300, :total-fail true} 

Ran 1 tests containing 2 assertions. 
0 failures, 0 errors. 

в этом примере я использовал fixed-event-window, потому что я не мог понять, как сделать фиксированное время окна работы в модульном тесте в Риману. Я думаю, что это заняло достаточно долго, чтобы понять, что я думал, что вам будет интересно увидеть решение до сих пор. Если вы измените его на фиксированное время, оно будет работать одинаково, за исключением того, что тесты не будут выполняться.

+0

Спасибо за ваш добрый ответ. Я попробую ваше предложение. У меня есть еще один вопрос, можем ли мы сравнивать события с предыдущими событиями временного интервала. Я поднял вопрос. http://stackoverflow.com/q/39019835/3484667 – Mangoski

+0

Я попробовал предложенный выше метод Arthur. Я получаю некоторую ошибку. Я обновил свой вопрос с кодом и ошибкой, которую я получаю от компиляции вышеуказанного кода. – Mangoski

+0

У меня отсутствует какая-либо важная функция здесь. – Mangoski