packages feed

bugsnag-haskell-0.0.1.1: examples/warp/Main.hs

{-# LANGUAGE OverloadedStrings #-}
module Main (main) where

import Control.Concurrent (forkIO)
import Control.Exception (SomeException)
import Control.Monad (void, when)
import Network.Bugsnag
import Network.Wai (Application, Request)
import Network.Wai.Handler.Warp

app :: Application
app = error "Oops"

warpSettings :: IO Settings
warpSettings = do
    settings <- newBugsnagSettings "BUGSNAG_API_KEY"

    pure
        $ setPort 3000
        $ setOnException (bugsnagOnException settings) defaultSettings

-- N.B. This may some day be provided by a bugsnag-warp package
bugsnagOnException :: BugsnagSettings -> Maybe Request -> SomeException -> IO ()
bugsnagOnException settings mRequest ex =
    when (defaultShouldDisplayException ex) $ do
        let beforeNotify = maybe id updateEventFromWaiRequest mRequest
        void $ forkIO $ notifyBugsnagWith beforeNotify settings ex

main :: IO ()
main = do
    settings <- warpSettings
    runSettings settings app