2016-08-08 89 views
0

Ich habe Riemann-Code, um eine E-Mail auszulösen, wenn beide Bedingungen erfüllt sind. Also habe ich einen unteren Code geschrieben.Wie funktioniert der UND-Vorgang in Riemann?

(let [email (mailer {....email configuration})] 
     (streams 
    (where (service "log") 
     (smap 
      (fn [events] 
      (let [count-of-failures (count (filter #(= "failed" (:Status %)) events) and (filter #(= "UK" (:Country %)) events))] ;Calculate the count for matched value 
       (event 
       { 
       :status "Failure" 
       :metric count-of-failures 
       :total-fail (>= count-of-failures 2)}))) 

      (where (and (= (:status event) "Failure") 
         (:total-fail event)) 


      (email "[email protected]") 
      )prn)))) 

ich unten Störung erhalte, wenn ich clojure.lang.ArityException: Wrong number of args (3) passed to:

Kann jemand bitte machen Sie mir einen richtigen Weg zu nutzen und bedienen hier ausführen gestartet.

Vielen Dank im Voraus

Antwort

0

Sie geben 3 args count - also Sie den Fehler.

wieso würden Sie die Fehlerausgabe abschneiden, bevor die wesentlichen Informationen ... args (3) passed to: count über mich hinaus sind.

(let [email (mailer {....email configuration})] 
    (streams 
    (where (service "log") 
      (smap 
      (fn [events] 
      (let [count-of-failures (count ; <--- count only takes one argument 
             (filter #(= "failed" (:Status %)) events) 
             and 
             (filter #(= "UK" (:Country %)) events))] ;Calculate the count for matched value 
       (event 
       {:status "Failure" 
       :metric count-of-failures 
       :total-fail (>= count-of-failures 2)}))) 

      (where (and (= (:status event) "Failure") 
         (:total-fail event)) 
        (email "[email protected]")) prn)))) 

Es ist nicht klar, aus Ihrer Beschreibung, haben Sie vor zu tun:

(count (and (filter ...) (filter ...)) 

, die die die letzten nicht-nil Sammlung zählt?


Ich möchte zwei Zustand überprüfen mein Status fehlgeschlagen sein sollte und mein Land sollte in Großbritannien sein. Wenn dann eine E-Mail ausgelöst werden sollte

Hilft das? :

(def event {:Status "failed" :Country "UK"}) ; example1 
(some #(and (= "failed" (:Status %)) (= (:Country %) "UK")) [event]) 
; => true 
(def event {:Status "failed" :Country "US"}) ; example2 
(some #(and (= "failed" (:Status %)) (= (:Country %) "UK")) [event]) 
; => nil 
+0

'(let [Count-of-Ausfälle ( (Filter # (= "nicht bestanden"(Anzahl: Status%)) Ereignisse)) und (count (Filter # (= "UK"(: Country%)) events))] '. Funktioniert diese Methode? – Mangoski

+0

Ich möchte zwei Bedingungen überprüfen, mein' Status' sollte 'Failed' sein und mein' Land' sollte 'UK' sein, wenn dann eine Email ausgelöst werden soll – Mangoski