{-# LANGUAGE ApplicativeDo, RecordWildCards, OverloadedStrings #-}
module Main where
import Control.Applicative
import Control.Concurrent
import Data.Foldable
import Data.Monoid
import Data.Text
import Network.HTTP.Types
import Network.Wai
import Network.Wai.Handler.Warp
import Prometheus
import Prometheus.GHC
import System.Random
data Metrics = Metrics
{ testcounter :: Text -> IO Counter
, testhistogram :: Histogram
, testcounterTimer :: Histogram
, testhistogramTimer :: Histogram
}
main :: IO ()
main = do
(launchStatsCollection, ghcStatsRegistry) <- buildRegistry ghcStats
for_ launchStatsCollection id
(launchPusher, pushRegistry) <-
buildRegistry (pushMetrics "http://localhost:9091/metrics/job/j/instance/i")
(Metrics {..}, myRegistry) <-
buildRegistry $ do
testcounter <-
register
"prom_test_counter"
"Testing"
mempty
(addLabel "test_label" counter)
testhistogram <-
register
"prom_test_histo"
""
mempty
(histogram (exponentialBuckets 1e-12 10 10))
testcounterTimer <-
register
"prom_incCounter"
""
mempty
(histogram (exponentialBuckets 1e-12 10 10))
testhistogramTimer <-
register
"prom_observe"
""
mempty
(histogram (exponentialBuckets 1e-12 10 10))
return Metrics {..}
let registry = myRegistry <> ghcStatsRegistry <> pushRegistry
launchPusher registry
run 5811 $
publishRegistryMiddleware ["metrics"] registry $ \req respond -> do
time testcounterTimer $ do
incCounter =<< testcounter "foo"
incCounter =<< testcounter "bar"
time testhistogramTimer $ observe 1 testhistogram
respond $ responseLBS status200 [] "Hello World"