metrics-clojure / metrics-clojure-core / src / metrics / meters.clj

Full commit
Steve Losh 26d62ce 
Michael Klishin b864fa7 
Steve Losh 2bf9a78 
Michael Klishin 76c089a 

Steve Losh 26d62ce 

Steve Losh 95391b4 
Steve Losh 9f89ac1 
Steve Losh da9ae58 

Steve Losh 9f89ac1 
Steve Losh 2bf9a78 
Michael Klishin 9d38bf2 
Ian Eure 27c731b 
Steve Losh 26d62ce 

Michael Klishin 9004e81 

Steve Losh 26d62ce 

(ns metrics.meters
  (:refer-clojure :exclude [count])
  (:use [metrics.utils :only (metric-name desugared-title)])
  (:import com.yammer.metrics.Metrics

; Create ----------------------------------------------------------------------
(defn meter [title event-type]
  (Metrics/newMeter (metric-name title)

(defmacro defmeter
  "Define a new Meter metric with a given title and event type.

  The title uses some basic desugaring to let you concisely define metrics:

    ; Define a meter titled \"\" into var foo
    (defmeter foo ,,,)
    (defmeter \"foo\" ,,,)

    ; Define a meter titled \"a.b.c\" into var c
    (defmeter [a b c] ,,,)
    (defmeter [\"a\" \"b\" \"c\"] ,,,)
    (defmeter [a \"b\" c] ,,,)
  [title event-type]
  (let [[s title] (desugared-title title)]
    `(def ~s (meter '~title ~event-type))))

; Read ------------------------------------------------------------------------
(defn rates [^Meter m]
  {1 (.oneMinuteRate m)
   5 (.fiveMinuteRate m)
   15 (.fifteenMinuteRate m)})

(defn rate-one [^Meter m]
  (.oneMinuteRate m))

(defn rate-five [^Meter m]
  (.fiveMinuteRate m))

(defn rate-fifteen [^Meter m]
  (.fifteenMinuteRate m))

(defn rate-mean [^Meter m]
  (.meanRate m))

(defn count
  [^Meter m]
  (.count m))

; Write -----------------------------------------------------------------------
(defn mark!
  ([^Meter m]
   (mark! m 1))
  ([^Meter m n]
   (.mark m (long n))