Search code examples
clojureriemannriemann-dashboard

Clojure Dashboard query


I am trying to show a graph on riemann-dashboard using query "pingDelay > 0" .

I already have indexed my data using following code

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

However, I am not getting anything on graph. Earlier, I thought that perhaps its because my "pingDelay" is in string "12345", so, i also tried ":pingDelay #(Long. (get dhtstate 3))" without any success.

Can anyone please help me about what I must do to make it work?

Regards


Solution

  • defining top level forms in function calls is a little odd. It works only because defining a var returns that var to the calling form. It's more typical to write it like:

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

    there are several other ways of writing it:

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