module Network.Metrics.Graphite (
Metric(..)
, open
, emit
, I.Handle
, I.close
) where
import Network.Socket
import Data.Time.Clock.POSIX
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy.Char8 as BL
import qualified Network.Metrics.Internal as I
data Metric = Metric
{ metricBucket :: BS.ByteString
, metricValue :: BS.ByteString
} deriving (Show)
open :: String -> String -> IO I.Handle
open = I.open Stream
emit :: Metric -> I.Handle -> IO I.Handle
emit Metric{..} handle = do
time <- getPOSIXTime
I.emit (encoded time) handle
where
encoded n = BL.fromChunks [metricBucket, metricValue, timestamp n]
timestamp n = BS.pack $ show (truncate n :: Integer)