prometheus-0.1.0.3: src/System/Metrics/Prometheus/GlobalRegistry.hs
module System.Metrics.Prometheus.GlobalRegistry
( GlobalRegistry
, new
, registerCounter
, registerGauge
, registerHistogram
, sample
) where
import Control.Concurrent.MVar (MVar,
modifyMVarMasked,
newMVar, withMVar)
import Data.Tuple (swap)
import System.Metrics.Prometheus.Metric.Counter (Counter)
import System.Metrics.Prometheus.Metric.Gauge (Gauge)
import System.Metrics.Prometheus.Metric.Histogram (Histogram,
UpperBound)
import System.Metrics.Prometheus.MetricId (Labels, Name)
import System.Metrics.Prometheus.Registry (Registry (..),
RegistrySample)
import qualified System.Metrics.Prometheus.Registry as R
newtype GlobalRegistry = GlobalRegistry { unGlobalRegistry :: MVar Registry }
new :: IO GlobalRegistry
new = GlobalRegistry <$> newMVar R.new
registerCounter :: Name -> Labels -> GlobalRegistry -> IO Counter
registerCounter name labels = flip modifyMVarMasked register . unGlobalRegistry
where
register = fmap swap . R.registerCounter name labels
registerGauge :: Name -> Labels -> GlobalRegistry -> IO Gauge
registerGauge name labels = flip modifyMVarMasked register . unGlobalRegistry
where
register = fmap swap . R.registerGauge name labels
registerHistogram :: Name -> Labels -> [UpperBound] -> GlobalRegistry -> IO Histogram
registerHistogram name labels buckets = flip modifyMVarMasked register . unGlobalRegistry
where
register = fmap swap . R.registerHistogram name labels buckets
sample :: GlobalRegistry -> IO RegistrySample
sample = flip withMVar R.sample . unGlobalRegistry