1

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

Tahir Rauf
  • 484
  • 6
  • 16

2 Answers2

1

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)))
Arthur Ulfeldt
  • 90,827
  • 27
  • 201
  • 284
0

It turned out that I had to write value of my pingDelay in ":metric field". It starts working now.

Tahir Rauf
  • 484
  • 6
  • 16