Запрос 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". Это начинает работать сейчас.

Другие вопросы по тегам