1 | (ns statsd-client
|
2 | "a simple StatsD client written in Clojure
|
3 |
|
4 | Usage:
|
5 | statsd-client/increment 'foo
|
6 | statsd-client/decrement 'foo
|
7 | statsd-client/increment 'foo 1
|
8 | statsd-client/decrement 'foo 1
|
9 | statsd-client/gauge 'foo 1
|
10 | statsd-client/timing 'foo 1
|
11 | "
|
12 | (:import (java.net InetAddress DatagramPacket DatagramSocket)))
|
13 |
|
14 | (def server-address "127.0.0.1")
|
15 | (def server-port 8125)
|
16 |
|
17 |
|
18 | (defn make-socket
|
19 | ([] (new DatagramSocket))
|
20 | ([port] (new DatagramSocket port)))
|
21 |
|
22 | (defn send-data [send-socket ip port data]
|
23 | (let [ipaddress (InetAddress/getByName ip),
|
24 | send-packet (new DatagramPacket (.getBytes data) (.length data) ipaddress port)]
|
25 | (.send send-socket send-packet)))
|
26 |
|
27 | (defn make-send [ip port]
|
28 | (let [send-socket (make-socket)]
|
29 | (fn [data] (send-data send-socket ip port data))))
|
30 |
|
31 | (def send-msg (make-send server-address server-port))
|
32 |
|
33 |
|
34 | (defn increment
|
35 | ([metric] (increment metric 1))
|
36 | ([metric value]
|
37 | (send-msg (str metric ":" value "|c"))))
|
38 |
|
39 | (defn decrement
|
40 | ([metric] (increment metric -1))
|
41 | ([metric value]
|
42 | (send-msg (str metric ":" value "|c"))))
|
43 |
|
44 | (defn timing [metric value]
|
45 | (send-msg (str metric ":" value "|ms")))
|
46 |
|
47 | (defn gauge [metric value]
|
48 | (send-msg (str metric ":" value "|g")))
|
49 |
|