{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-} module Avers.Metrics where import Control.Concurrent import Control.Monad.State import Data.Text (Text) import Network.BSD import Database.InfluxDB import Database.InfluxDB.TH import Avers.Types data Point = Point { pointMachine :: String , pointComponent :: Text , pointValue :: Double } reportPoint :: Text -> Double -> Avers () reportPoint series value = do ac <- gets config case influxConfig ac of Nothing -> return () Just cfg -> void $ liftIO $ forkIO $ do h <- getHostName postWithPrecision cfg "rmx" SecondsPrecision $ withSeries series $ do writePoints $ Point h "api" value deriveSeriesData defaultOptions { fieldLabelModifier = stripPrefixLower "point" } ''Point