servant-ekg/bench/Main.hs
2016-05-13 17:38:14 +02:00

43 lines
1.2 KiB
Haskell

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Main (main) where
import Control.Concurrent
import Data.Text (Text)
import Network.Wai (Application)
import Network.Wai.Handler.Warp
import Servant
import Servant.Ekg
import System.Metrics
import System.Process
type BenchApi = "hello" :> Capture "name" Text :> Get '[JSON] Text
benchApi :: Proxy BenchApi
benchApi = Proxy
server :: Server BenchApi
server = return
servantEkgServer :: IO Application
servantEkgServer = do
store <- newStore
ms <- newMVar mempty
return $ monitorEndpoints benchApi store ms (serve benchApi server)
benchApp :: IO Application -> IO ()
benchApp app = withApplication app $ \port ->
callCommand $ "wrk -c 30 -d 20s --latency -s bench/wrk.lua -t 2 'http://localhost:" ++ show port ++ "'"
main :: IO ()
main = do
putStrLn "Benchmarking servant-ekg"
benchApp servantEkgServer
putStrLn "Benchmarking without servant-ekg"
benchApp . return $ serve benchApi server