module Network.Metricsd.Client
( initMetricsdClient
, initMetricsdClient'
, sendCounter
, sendGauge
, sendHistogram
, sendMeter
, MetricsdClientHandle
) where
import Control.Applicative
import Network.Socket
newtype MetricsdClientHandle = MetricsdClientHandle
{ _unMCH :: (Socket, SockAddr) }
defaultHost :: String
defaultHost = "127.0.0.1"
defaultPort :: PortNumber
defaultPort = 8125
initMetricsdClient :: IO MetricsdClientHandle
initMetricsdClient = initMetricsdClient' defaultHost defaultPort
initMetricsdClient' :: String -> PortNumber -> IO MetricsdClientHandle
initMetricsdClient' host port = do
s <- socket AF_INET Datagram defaultProtocol
sockAddr <- SockAddrInet port <$> inet_addr host
return $ MetricsdClientHandle (s, sockAddr)
sendCounter :: MetricsdClientHandle -> String -> Integer -> IO ()
sendCounter h name value = sendMetric h $ name ++ ":" ++ show value ++ "|c\n"
sendGauge :: MetricsdClientHandle -> String -> Integer -> IO ()
sendGauge h name value = sendMetric h $ name ++ ":" ++ show value ++ "|g\n"
sendHistogram :: MetricsdClientHandle -> String -> Integer -> IO ()
sendHistogram h name value = sendMetric h $ name ++ ":" ++ show value ++ "|h\n"
sendMeter :: MetricsdClientHandle -> String -> IO ()
sendMeter h name = sendMetric h name
sendMetric :: MetricsdClientHandle -> String -> IO ()
sendMetric (MetricsdClientHandle (s, sockAddr)) msg =
sendTo s msg sockAddr >> return ()