mirror of
https://github.com/haskell-servant/servant-ekg.git
synced 2024-11-01 08:49:42 +01:00
43 lines
1.2 KiB
Haskell
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 2 -d 10s -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
|