2015-11-03 3 views
1

J'essaie de montrer un graphique sur riemann-dashboard en utilisant la requête "pingDelay> 0".Clojure Dashboard query

J'ai déjà indexé mes données en utilisant le code suivant

(let [index (index)] 
    (defn write-dht-metric [e] 
    (let [dhtstate (re-find #"dht_status: health\.(\S+), msg count (\d+) \((\d+) bytes\).*peak \{ping = (\d+)" (:pgmsg e))] 
     (if (not= dhtstate nil) 
     (do 
      (prn "RESULT>" dhtstate) 
      (index {:host "dht-info" 
        :service (:service e) 
        :time (unix-time) 
        :dhtStatus (get dhtstate 1) 
        :msgCount (get dhtstate 2) 
        :pingDelay (get dhtstate 3)} 
      ) 
     ) 
     ) 
    ) 
    ) 
) 

Cependant, je ne reçois pas quoi que ce soit sur le graphique. Auparavant, je pensais que c'est peut-être parce que mon "pingDelay" est dans la chaîne "12345", donc, j'ai aussi essayé ": pingDelay # (Long. (Get dhtstate 3))" sans succès.

Quelqu'un peut-il s'il vous plaît aidez-moi sur ce que je dois faire pour le faire fonctionner?

Cordialement

Répondre

1

La définition de formulaires de niveau supérieur dans les appels de fonction est un peu étrange. Cela ne fonctionne que parce que la définition d'une var renvoie var à l'appel. Il est plus typique de l'écrire comme:

(defn write-dht-metric [e] 
    (let [dhtstate (re-find #"dht_status: health\.(\S+), msg count (\d+) \((\d+) bytes\).*peak \{ping = (\d+)" (:pgmsg e))] 
    (if (not= dhtstate nil) 
     (do 
     (prn "RESULT>" dhtstate) 
     (index {:host "dht-info" 
       :service (:service e) 
       :time (unix-time) 
       :dhtStatus (get dhtstate 1) 
       :msgCount (get dhtstate 2) 
       :pingDelay (get dhtstate 3)}))))) 

(let [index (index)] 
    (streams 
    write-dht-metric)) 

il y a plusieurs autres façons de l'écrire:

(defn write-dht-metric [e] 
    (let [dhstate (:dhstate e)] 
     (prn "RESULT>" dhtstate) 
     (index {:host "dht-info" 
       :service (:service e) 
       :time (unix-time) 
       :dhtStatus (get dhtstate 1) 
       :msgCount (get dhtstate 2) 
       :pingDelay (get dhtstate 3)}))) 

(let [index (index)] 
    (streams 
    (with :dhstate (re-find #"dht_status: health\.(\S+), msg count (\d+) \((\d+) bytes\).*peak \{ping = (\d+)" (:pgmsg event)) 
     (when :dhstate 
     write-dht-metric))) 
0

Il est avéré que je devais écrire la valeur de mon pingDelay dans « : champ métrique ». Ça commence à marcher maintenant.