avers-0.0.7: src/Avers/Metrics.hs
module Avers.Metrics where
import Control.Monad.State
import Control.Exception.Base
import System.Clock
import Avers.Types
import Avers.Metrics.Measurements
measureDuration :: Measurement -> Avers a -> Avers a
measureDuration m a = do
start <- liftIO $ getTime Monotonic
ret <- a >>= liftIO . evaluate
end <- liftIO $ getTime Monotonic
reportMeasurement m
(fromIntegral (timeSpecAsNanoSecs (diffTimeSpec start end)) / 1000000000)
return ret
reportMeasurement :: Measurement -> Double -> Avers ()
reportMeasurement m value = do
conf <- gets config
liftIO $ emitMeasurement conf m value