2016-08-18 4 views
1

私はプロジェクトでRiemannを使用して電子メールアラートをトリガーしています。特定の日のみの電子メールアラートをトリガーすることは可能ですか(月曜の午前3時から午後8時まで)。Riemannの特定の日時や特定の時刻に電子メールアラートを設定することはできますか?

もしそうなら誰でも参考に手伝ってください。

私の更新されたコード:

(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

私はそれが投稿エラーであると仮定していますが、あなたの例では)最悪の場所は間違った場所にあります。 –

+0

あなたはこの行を意味しましたか?(あなたは[userindex1(default:ttl 300(update-index(index))]) ' – Mangoski

答えて

0

はい!

; -*- 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 []})))))) 

し、実行:あなたはここでwhere句の条件付き位置決幅の中に「警告」を送信するタイミングを決定する曜日と時間に依存例の設定ですが、あなたが望む任意のコードを置くことができますテスト:私はリーマンでのユニットテストでは、固定時間窓を機能させるために方法を見つけ出すことができなかったので、私はfixed-event-windowを使用この例では

[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. 

。これまでに解決策を見ることに興味があると思っていたことを理解するのに十分な時間がかかったと思います。固定時間ウィンドウに変更すると、テストは実行されないことを除いて、同じ動作をします。

+0

お返事ありがとうございます。私はあなたの提案を試みます。以前の時間間隔イベントとイベントを比較できるかどうかという疑問がもう1つあります。私は質問を提起した。 http://stackoverflow.com/q/39019835/3484667 – Mangoski

+0

私は上記の方法Arthurを試しました。私はいくつかのエラーが発生しています。私は上記のコードをコンパイルすることで得られるエラーとコードで私の質問を更新しました。 – Mangoski

+0

重要な機能はありません。 – Mangoski

関連する問題