module Network.Bugsnag.BeforeNotify
( BeforeNotify
, updateException
, updateEventFromSession
, updateEventFromWaiRequest
, setDevice
, setRequest
, setStacktrace
, setWarningSeverity
, setErrorSeverity
, setInfoSeverity
) where
import Network.Bugsnag.Device
import Network.Bugsnag.Event
import Network.Bugsnag.Exception
import Network.Bugsnag.Request
import Network.Bugsnag.Session
import Network.Bugsnag.Severity
import Network.Bugsnag.StackFrame
import Network.Wai (Request)
type BeforeNotify = BugsnagEvent -> BugsnagEvent
updateException :: (BugsnagException -> BugsnagException) -> BeforeNotify
updateException f event = event
{ beExceptions = f <$> beExceptions event
}
updateEventFromWaiRequest :: Request -> BeforeNotify
updateEventFromWaiRequest wrequest =
let mdevice = bugsnagDeviceFromWaiRequest wrequest
request = bugsnagRequestFromWaiRequest wrequest
in maybe id setDevice mdevice . setRequest request
updateEventFromSession :: BugsnagSession -> BeforeNotify
updateEventFromSession session event = event
{ beContext = bsContext session
, beUser = bsUser session
}
setRequest :: BugsnagRequest -> BeforeNotify
setRequest request event = event
{ beRequest = Just request
}
setDevice :: BugsnagDevice -> BeforeNotify
setDevice device event = event
{ beDevice = Just device
}
setStacktrace :: [BugsnagStackFrame] -> BeforeNotify
setStacktrace stacktrace = updateException $ \ex -> ex
{ beStacktrace = stacktrace
}
setErrorSeverity :: BeforeNotify
setErrorSeverity = setSeverity ErrorSeverity
setWarningSeverity :: BeforeNotify
setWarningSeverity = setSeverity WarningSeverity
setInfoSeverity :: BeforeNotify
setInfoSeverity = setSeverity InfoSeverity
setSeverity :: BugsnagSeverity -> BeforeNotify
setSeverity severity event = event { beSeverity = Just severity }