prometheus-0.5.0: src/System/Metrics/Prometheus/Http/Push.hs
module System.Metrics.Prometheus.Http.Push
( pushHttpProtoMetrics
)
where
import Control.Concurrent (threadDelay)
import Control.Monad (forever)
import Data.Map (foldMapWithKey)
import Data.Text (Text, unpack)
import Network.Wreq.Session (put,
withSession)
import System.Metrics.Prometheus.Encode.ProtocolBuffers ()
import System.Metrics.Prometheus.MetricId (Labels (..))
import System.Metrics.Prometheus.Registry (RegistrySample)
-- | Push metrics to a pushgateway.
pushHttpProtoMetrics :: String -- ^ The base URL of the pushgateway, including the port number.
-> Text -- ^ The name of this job.
-> Labels -- ^ The label set to use as a grouping key for these metrics.
-> Int -- ^ Push frequency, in microseconds.
-> IO RegistrySample -- ^ The action to get the latest metrics.
-> IO ()
pushHttpProtoMetrics base job (Labels ls) frequency get =
withSession $ \session -> forever $
get >>= put session url >> threadDelay frequency
where
url = base ++ "/metrics/job/" ++ unpack job ++
foldMapWithKey (\k v -> "/" ++ unpack k ++ "/" ++ unpack v) ls