1. Steve Losh
  2. metrics-clojure


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

Steve Losh 26d62ce 
Steve Losh 2bf9a78 
Steve Losh 26d62ce 

Steve Losh 95391b4 
Steve Losh 9f89ac1 
Steve Losh da9ae58 

Steve Losh 9f89ac1 
Steve Losh 2bf9a78 

Ian Eure 27c731b 
Steve Losh 26d62ce 

Michael Klishin 9004e81 

Steve Losh 26d62ce 

(ns metrics.meters
  (:use [metrics.utils :only (metric-name desugared-title)])
  (:import (com.yammer.metrics Metrics))
  (:import (com.yammer.metrics.core Meter))
  (:import (java.util.concurrent TimeUnit)))

; 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 \"default.default.foo\" 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))