packages feed

statsdi-0.1.0.0: src/Control/Monad/Stats/MTL.hs

{-# LANGUAGE ConstraintKinds       #-}
{-# LANGUAGE FlexibleContexts      #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell       #-}
module Control.Monad.Stats.MTL
    ( MonadStats
    , StatsT(..)
    , runStatsT
    , runNoStatsT
    , tick
    , tickBy
    , setCounter
    , setGauge
    , time
    , histoSample
    , addSetMember
    , reportEvent
    , reportServiceCheck
    , MTLStatsT, mtlStatsT
    ) where

import           Control.Monad.Ether
import           Control.Monad.IO.Class
import qualified Control.Monad.Stats.Monad as Ethereal
import           Control.Monad.Stats.Types
import           Data.Time.Clock           (NominalDiffTime)

ethereal "MTLStatsT" "mtlStatsT"

type MonadStats m = (Monad m, MonadIO m, Ethereal.MonadStats MTLStatsT m)
type StatsT = Ethereal.StatsT MTLStatsT

runStatsT :: (MonadIO m) => StatsT m a -> StatsTConfig -> m a
runStatsT = Ethereal.runStatsT mtlStatsT

runNoStatsT :: (MonadIO m) => StatsT m a -> m a
runNoStatsT = Ethereal.runNoStatsT mtlStatsT

tick :: (MonadStats m) => Counter -> m ()
tick = Ethereal.tick mtlStatsT

tickBy :: (MonadStats m) => Int -> Counter -> m ()
tickBy = Ethereal.tickBy mtlStatsT

setCounter :: (MonadStats m) => Int -> Counter -> m ()
setCounter = Ethereal.setCounter mtlStatsT

setGauge :: (MonadStats m) => Int -> Gauge -> m ()
setGauge = Ethereal.setGauge mtlStatsT

time :: (MonadStats m) => NominalDiffTime -> Timer -> m ()
time = Ethereal.time mtlStatsT

histoSample  :: (MonadStats m) => Int -> Histogram -> m ()
histoSample = Ethereal.histoSample mtlStatsT

addSetMember :: (MonadStats m) => Int -> Set -> m ()
addSetMember = Ethereal.addSetMember mtlStatsT

reportEvent :: (MonadStats m) => Event -> m ()
reportEvent = Ethereal.reportEvent mtlStatsT

reportServiceCheck :: (MonadStats m) => ServiceCheck -> ServiceCheckValue -> m ()
reportServiceCheck = Ethereal.reportServiceCheck mtlStatsT