metrics-0.1.0.0: src/Data/Metrics.hs
{-# LANGUAGE OverloadedStrings #-}
-- |
-- Module : Data.Metrics
-- Copyright : (c) Ian Duncan 2013
-- Stability : experimental
-- Portability : non-portable
--
-- A library for tracking arbitrary metrics over time.
-- The library largely provides pure and stateful versions of
-- the same set of functionality for common metric types.
--
module Data.Metrics (
module Data.HealthCheck,
module Data.Metrics.Counter,
module Data.Metrics.Gauge,
module Data.Metrics.Histogram,
module Data.Metrics.Meter,
module Data.Metrics.Registry,
module Data.Metrics.Timer,
module Data.Metrics.Types
) where
import Data.HealthCheck
import Data.Metrics.Counter
import Data.Metrics.Gauge
import Data.Metrics.Histogram
import Data.Metrics.Meter
import Data.Metrics.Registry
import Data.Metrics.Timer
import Data.Metrics.Types
--newMetricRegistry :: IO (MetricRegistry IO)
--newMetricRegistry = fmap MetricRegistry $ newMVar H.empty
{-
getOrInit :: (Typeable a, MetricOutput a) => MetricRegistry -> Text -> a -> IO (Maybe (IORef a))
getOrInit r name conv defaultValue = do
hm <- takeMVar $ metrics r
case H.lookup name hm of
Nothing -> do
ref <- newIORef defaultValue
let getRep = readIORef ref >>= conv
putMVar (metrics r) $! H.insert name (getRep, toDyn ref) hm
return $! Just ref
Just (_, ref) -> do
putMVar (metrics r) hm
return $! fromDynamic ref
-}
{-
counter :: MonadIO m => MetricRegistry -> Text -> m (Maybe Counter)
counter registry conv name = do
mref <- liftIO $ getOrInit registry name (return . conv) 0
case mref of
Nothing -> return Nothing
Just ref -> return $! Just $! Counter ref
gauge :: Typeable a => MetricRegistry -> Text -> IO a -> IO (Maybe (Gauge a))
gauge registry conv name g = do
mref <- liftIO $ getOrInit registry name (fmap conv) g
case mref of
Nothing -> return Nothing
Just ref -> return $! Just $! Gauge ref
cache :: DiffTime -> Gauge a -> m ()
DerivativeGauge
ExponentiallyWeightedMovingAverage
ExponentiallyDecayingReservoir
data Ratio = Ratio
{ numerator :: IORef Double
, denominator :: IORef Double
}
newtype RatioGauge = Gauge Ratio
Reservoir
SlidingTimeWindowReservoir
cachedGauge
derivedGauge
-}
--test = do
-- r <- newMetricRegistry
-- (Just c) <- register r "wombats.sighted" counter
-- (Just c2) <- register r "wombats.sighted" counter
-- increment c
-- value c >>= print
-- value c2 >>= print