prometheus-0.3.0: src/System/Metrics/Prometheus/Concurrent/Registry.hs
module System.Metrics.Prometheus.Concurrent.Registry
( Registry
, 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 qualified System.Metrics.Prometheus.Registry as R
newtype Registry = Registry { unRegistry :: MVar R.Registry }
new :: IO Registry
new = Registry <$> newMVar R.new
registerCounter :: Name -> Labels -> Registry -> IO Counter
registerCounter name labels = flip modifyMVarMasked register . unRegistry
where
register = fmap swap . R.registerCounter name labels
registerGauge :: Name -> Labels -> Registry -> IO Gauge
registerGauge name labels = flip modifyMVarMasked register . unRegistry
where
register = fmap swap . R.registerGauge name labels
registerHistogram :: Name -> Labels -> [UpperBound] -> Registry -> IO Histogram
registerHistogram name labels buckets = flip modifyMVarMasked register . unRegistry
where
register = fmap swap . R.registerHistogram name labels buckets
sample :: Registry -> IO R.RegistrySample
sample = flip withMVar R.sample . unRegistry