Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Freckle.App.Stats
Description
An intentionally-leaky StatsD interface to Datadog
Synopsis
- data StatsSettings
- defaultStatsSettings :: StatsSettings
- setStatsSettingsTags :: [(Text, Text)] -> StatsSettings -> StatsSettings
- envParseStatsSettings :: Parser Error StatsSettings
- data StatsClient
- tagsL :: Lens' StatsClient [(Text, Text)]
- withStatsClient :: (MonadMask m, MonadUnliftIO m) => StatsSettings -> (StatsClient -> m a) -> m a
- class HasStatsClient env where
- statsClientL :: Lens' env StatsClient
- data Gauges
- data Gauge
- dbConnections :: Gauges -> Gauge
- dbEnqueuedAndProcessing :: Gauges -> Gauge
- withGauge :: (MonadReader app m, HasStatsClient app, MonadUnliftIO m) => (Gauges -> Gauge) -> m a -> m a
- lookupGauge :: (MonadReader app m, HasStatsClient app) => (Gauges -> Gauge) -> m Gauge
- incGauge :: (MonadReader app m, HasStatsClient app, MonadUnliftIO m) => Gauge -> m ()
- decGauge :: (MonadReader app m, HasStatsClient app, MonadUnliftIO m) => Gauge -> m ()
- tagged :: (MonadReader env m, HasStatsClient env) => [(Text, Text)] -> m a -> m a
- increment :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env) => Text -> m ()
- counter :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env) => Text -> Int -> m ()
- gauge :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env) => Text -> Double -> m ()
- histogram :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env, ToMetricValue n) => Text -> n -> m ()
- histogramSince :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env) => Text -> UTCTime -> m ()
- histogramSinceMs :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env) => Text -> UTCTime -> m ()
Documentation
Usage
- Use
envParseStatsSettings
to configure things
data AppSettings = AppSettings
{ -- ...
, appStatsSettings :: StatsSettings
}
loadSettings :: IO AppSettings
loadSettings = Env.parse id $ AppSettings
$ -- ...
* envParseStatsSettings
This will read,
DOGSTATSD_ENABLED=x
DOGSTATSD_HOST=127.0.0.1
DOGSTATSD_PORT=8125
DOGSTATSD_TAGS=[key:value,...]
- Optionally
DD_ENV
,DD_SERVICE
, andDD_VERSION
- Give your
App
aHasStatsClient
instance
data App = App { -- ... , appStatsClient ::StatsClient
} instanceHasStatsClient
App wherestatsClientL
= lens appStatsClient $ x y -> { appStatsClient = y }
- Use
withStatsClient
to build and store a client on yourApp
when you run it
withStatsClient
appStatsSettings $ client -> do app <- App $ ... * pure clientrunApp
app $ ...
- Throughout your application code, emit metrics as desired
import qualified Freckle.App.Stats as Stats myFunction :: (MonadIO m, MonadReader env m,HasStatsClient
env) => m () myFunction = do start <- liftIO getCurrentTime result <- myAction Stats.increment
"action.attempt" Stats.histogramSinceMs
"action.duration" start case result of Left err -> do Stats.increment
"action.failure" -- ... Right x -. do Stats.increment
"action.success" -- ...
data StatsSettings Source #
setStatsSettingsTags :: [(Text, Text)] -> StatsSettings -> StatsSettings Source #
Client
data StatsClient Source #
Instances
HasStatsClient StatsClient Source # | |
Defined in Freckle.App.Stats Methods |
withStatsClient :: (MonadMask m, MonadUnliftIO m) => StatsSettings -> (StatsClient -> m a) -> m a Source #
class HasStatsClient env where Source #
Methods
statsClientL :: Lens' env StatsClient Source #
Instances
HasStatsClient StatsClient Source # | |
Defined in Freckle.App.Stats Methods | |
HasStatsClient site => HasStatsClient (HandlerData child site) Source # | |
Defined in Freckle.App.Stats Methods statsClientL :: Lens' (HandlerData child site) StatsClient Source # |
Gauges
dbConnections :: Gauges -> Gauge Source #
withGauge :: (MonadReader app m, HasStatsClient app, MonadUnliftIO m) => (Gauges -> Gauge) -> m a -> m a Source #
lookupGauge :: (MonadReader app m, HasStatsClient app) => (Gauges -> Gauge) -> m Gauge Source #
incGauge :: (MonadReader app m, HasStatsClient app, MonadUnliftIO m) => Gauge -> m () Source #
decGauge :: (MonadReader app m, HasStatsClient app, MonadUnliftIO m) => Gauge -> m () Source #
Reporting
tagged :: (MonadReader env m, HasStatsClient env) => [(Text, Text)] -> m a -> m a Source #
Include the given tags on all metrics emitted from a block
increment :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env) => Text -> m () Source #
Synonym for counter
1
counter :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env) => Text -> Int -> m () Source #
gauge :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env) => Text -> Double -> m () Source #
histogram :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env, ToMetricValue n) => Text -> n -> m () Source #
Emit an elapsed duration (which Datadog calls a histogram)
The ToMetricValue
constraint can be satisfied by most numeric types and is
assumed to be seconds.
histogramSince :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env) => Text -> UTCTime -> m () Source #
histogramSinceMs :: (MonadUnliftIO m, MonadReader env m, HasStatsClient env) => Text -> UTCTime -> m () Source #