module Network.Statsd (
statsdClient,
fromURI,
Stat,
Type(..),
fmtDatagram,
increment,
decrement,
count,
gauge,
timing,
histogram,
) where
import Network.Statsd.UdpClient(UdpClient, fromURI, send)
import Control.Monad
import Data.Maybe
import Data.Time.Units
import Text.Printf
import Network.URI
type Stat = String
data Type = Count | Gauge | Timing | Histogram
instance Show Type where
show Count = "c"
show Gauge = "g"
show Timing = "ms"
show Histogram = "h"
statsdClient :: String -> IO UdpClient
statsdClient = fromURI . fromJust . parseURI
increment :: UdpClient -> Stat -> IO ()
increment client stat = count client stat 1
decrement :: UdpClient -> Stat -> IO ()
decrement client stat = count client stat (1)
count :: UdpClient -> Stat -> Int -> IO ()
count client stat value = void . send client $ fmtDatagram stat value Count
gauge :: UdpClient -> Stat -> Int -> IO ()
gauge client stat value = void . send client $ fmtDatagram stat value Gauge
timing :: UdpClient -> Stat -> Millisecond -> IO ()
timing client stat value = void . send client $ fmtDatagram stat (fromIntegral value) Timing
histogram :: UdpClient -> Stat -> Int -> IO ()
histogram client stat value = void . send client $ fmtDatagram stat value Histogram
fmtDatagram :: Stat -> Int -> Type -> String
fmtDatagram stat value statType = printf "%s:%s|%s" stat (show value) (show statType)