import Prometheus
import Control.Monad
import Criterion.Main
import System.Random
main :: IO ()
main = defaultMain [
bgroup "incCounter" $ expandBenches incCounterThenCollect
, bgroup "withLabelIncCounter" $ expandBenches withLabelIncCounter
, bgroup "addGauge" $ expandBenches $ withGaugeThenCollect (addGauge 47.0)
, bgroup "subGauge" $ expandBenches $ withGaugeThenCollect (subGauge 47.0)
, bgroup "setGauge" $ expandBenches $ withGaugeThenCollect (setGauge 47.0)
, bgroup "observe" $ expandBenches observeThenCollect
]
expandBenches :: (Int -> IO a) -> [Benchmark]
expandBenches = flip expand [1, 10, 100, 1000, 10000]
where expand b = map (\i -> bench (show i) (whnfIO (b i)))
incCounterThenCollect :: Int -> IO [SampleGroup]
incCounterThenCollect i = do
c <- counter (Info "name" "help")
replicateM_ i (incCounter c)
collect c
withLabelIncCounter :: Int -> IO [SampleGroup]
withLabelIncCounter i = do
v <- vector ("a", "b") $ counter (Info "name" "help")
replicateM_ i (withLabel ("c", "d") incCounter v)
collect v
withGaugeThenCollect :: (Metric Gauge -> IO ()) -> Int -> IO [SampleGroup]
withGaugeThenCollect a i = do
g <- gauge (Info "name" "help")
replicateM_ i (a g)
collect g
observeThenCollect :: Int -> IO [SampleGroup]
observeThenCollect i = do
s <- summary (Info "name" "help") defaultQuantiles
replicateM_ i (randomIO >>= flip observe s)
collect s