Запрос Clojure Dashboard
Я пытаюсь показать график на приборной панели riemann, используя запрос "pingDelay > 0" .
Я уже проиндексировал свои данные, используя следующий код
(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)}
)
)
)
)
)
)
Тем не менее, я не получаю ничего на графике. Ранее я думал, что, возможно, потому, что мой pingDelay находится в строке "12345", поэтому я также попытался ":pingDelay #(Long. (Get dhtstate 3))" без какого-либо успеха.
Может кто-нибудь помочь мне с тем, что я должен сделать, чтобы это работало?
С уважением
2 ответа
Определение форм верхнего уровня в вызовах функций немного странно. Это работает только потому, что определение var возвращает эту переменную в форму вызова. Это более типично написать так:
(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))
Есть несколько других способов написания этого:
(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)))
Оказалось, что мне нужно было записать значение моего pingDelay в поле ":metric". Это начинает работать сейчас.