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