diff --git a/PaymentServer.cabal b/PaymentServer.cabal index f6997bde9da04ae348826d79e4b9c5e569c41931..134ce45a529fc52c21f8806b3bc2299dd34f5ea6 100644 --- a/PaymentServer.cabal +++ b/PaymentServer.cabal @@ -45,6 +45,7 @@ library , sqlite-simple , retry , prometheus-client + , servant-prometheus default-language: Haskell2010 ghc-options: -Wmissing-import-lists -Wunused-imports pkgconfig-depends: libchallenge_bypass_ristretto_ffi diff --git a/src/PaymentServer/Main.hs b/src/PaymentServer/Main.hs index f32512abaaeee4eaa4ceeba6623de581aed2bf16..e7d700cfee97dedebb44e8c1f14371d64781f8a3 100644 --- a/src/PaymentServer/Main.hs +++ b/src/PaymentServer/Main.hs @@ -72,6 +72,7 @@ import PaymentServer.Issuer ) import PaymentServer.Server ( paymentServerApp + , makeMetricsMiddleware ) import Options.Applicative @@ -313,5 +314,6 @@ getApp config = let origins = corsOrigins config app = paymentServerApp origins stripeConfig' issuer db + metricsMiddleware <- makeMetricsMiddleware logger <- mkRequestLogger (def { outputFormat = Detailed True}) - return $ logger app + return . logger . metricsMiddleware $ app diff --git a/src/PaymentServer/Server.hs b/src/PaymentServer/Server.hs index 5d879594c879673a3ffffc98376c2df2c115bff1..8842dab1ee84f211897886dfbc181dcd12c09a4e 100644 --- a/src/PaymentServer/Server.hs +++ b/src/PaymentServer/Server.hs @@ -6,6 +6,7 @@ -- interactions. module PaymentServer.Server ( paymentServerApp + , makeMetricsMiddleware ) where import Network.Wai.Middleware.Cors @@ -22,6 +23,11 @@ import Servant , (:>) , (:<|>)((:<|>)) ) +import Servant.Prometheus + ( MeasureQuantiles(WithQuantiles) + , monitorServant + , makeMeters + ) import Web.Stripe.Client ( StripeConfig @@ -83,3 +89,10 @@ paymentServerApp corsOrigins stripeConfig issuer = cors' = cors (const $ Just corsResourcePolicy) in cors' . app + + +-- | Create middleware which captures metrics for the payment server app. +makeMetricsMiddleware :: IO (Application -> Application) +makeMetricsMiddleware = do + meters <- makeMeters paymentServerAPI WithQuantiles + return $ monitorServant paymentServerAPI meters diff --git a/stack.yaml b/stack.yaml index 0af84a35031953cbffd353476578ffa00b37b01f..3a4243691337cedb0356d9a76154c8aef27c46bd 100644 --- a/stack.yaml +++ b/stack.yaml @@ -41,6 +41,8 @@ extra-deps: - "stripe-core-2.5.0" - "stripe-haskell-2.5.0" - "stripe-http-client-2.5.0" + - github: "PrivateStorageio/servant-prometheus" + commit: "ec21c5ed50e6f6f8e52916ce71cd68fcd0166cad" # Override default flag values for local packages and extra-deps # flags: {}