2016-08-08 1 views
0

J'ai un code riemann pour déclencher un e-mail lorsque les deux conditions ont été remplies. J'ai donc écrit un code ci-dessous.Comment utiliser l'opération ET dans 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)))) 

Je reçois ci-dessous erreur une fois que je commencé à exécuter clojure.lang.ArityException: Wrong number of args (3) passed to:

Quelqu'un peut-il s'il vous plaît me suggérer une bonne façon d'utiliser et le fonctionnement ici.

Merci à l'avance

Répondre

0

vous donner 3 à args count - donc vous obtenez l'erreur. Pourquoi vous tronqueriez la sortie d'erreur juste avant que les informations essentielles ... args (3) passed to: count ne me dépassent.

(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)))) 

On ne sait pas de votre description, avez-vous l'intention de faire:

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

qui compte le la dernière collection sans nul?


Je veux vérifier deux conditions mon statut doit être échoué et mon pays devrait être au Royaume-Uni. Si alors un email devrait être déclenché

Est-ce que cela aide? :

(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

'(laisser [décompte des-échecs (compte (filtre # (= "échoué"(: Etat%)) événements)) et (count (filtre # (= "UK"(: Country%)) events))]] Cette méthode fonctionne-t-elle? – Mangoski

+0

Je veux vérifier deux conditions: mon 'Status' devrait être' Failed' et mon 'country' devrait être' UK'. – Mangoski