arbor-datadog-0.0.0.1: src/Arbor/Network/StatsD/Monad.hs
{-# LANGUAGE MultiParamTypeClasses #-}
module Arbor.Network.StatsD.Monad where
import Arbor.Network.StatsD.Datadog
import Control.Monad.Except
import Control.Monad.Reader
import Control.Monad.State
import Control.Monad.Trans.Identity
import Control.Monad.Trans.Maybe
import Control.Monad.Trans.Resource
class (Functor m, Applicative m, MonadIO m) => MonadStats m where
getStatsClient :: m StatsClient
instance MonadStats m => MonadStats (ExceptT e m) where
getStatsClient = lift getStatsClient
instance MonadStats m => MonadStats (IdentityT m) where
getStatsClient = lift getStatsClient
instance MonadStats m => MonadStats (MaybeT m) where
getStatsClient = lift getStatsClient
instance MonadStats m => MonadStats (ReaderT e m) where
getStatsClient = lift getStatsClient
instance MonadStats m => MonadStats (ResourceT m) where
getStatsClient = lift getStatsClient
instance MonadStats m => MonadStats (StateT s m) where
getStatsClient = lift getStatsClient
sendMetric :: MonadStats m => Metric -> m ()
sendMetric m = getStatsClient >>= flip sendSampled m
sendEvent :: MonadStats m => Event -> m ()
sendEvent e = getStatsClient >>= flip sendEvt e