freckle-app-1.7.1.0: Haskell application toolkit used at Freckle
Safe HaskellSafe-Inferred
LanguageHaskell2010

Freckle.App.Bugsnag

Synopsis

Documentation

data Settings #

Instances

Instances details
HasBugsnagSettings Settings Source # 
Instance details

Defined in Freckle.App.Bugsnag

class HasBugsnagSettings env where Source #

Instances

Instances details
HasBugsnagSettings Settings Source # 
Instance details

Defined in Freckle.App.Bugsnag

HasBugsnagSettings site => HasBugsnagSettings (HandlerData child site) Source # 
Instance details

Defined in Freckle.App.Bugsnag

notifyBugsnag :: (MonadIO m, MonadReader env m, HasBugsnagSettings env, Exception e) => e -> m () Source #

Notify Bugsnag of an exception

The notification is made asynchronously via a simple forkIO. This is best-effort and we don't care to keep track of the spawned threads.

AppVersion

class HasAppVersion env where Source #

Methods

appVersionL :: Lens' env Text Source #

Instances

Instances details
HasAppVersion site => HasAppVersion (HandlerData child site) Source # 
Instance details

Defined in Freckle.App.Bugsnag

Methods

appVersionL :: Lens' (HandlerData child site) Text Source #

Loading settings

Exported for testing

Re-exports

class Monad m => MonadReader r (m :: Type -> Type) | m -> r #

See examples in Control.Monad.Reader. Note, the partially applied function type (->) r is a simple reader monad. See the instance declaration below.

Minimal complete definition

(ask | reader), local

Instances

Instances details
(Representable f, Rep f ~ a) => MonadReader a (Co f) 
Instance details

Defined in Data.Functor.Rep

Methods

ask :: Co f a #

local :: (a -> a) -> Co f a0 -> Co f a0 #

reader :: (a -> a0) -> Co f a0 #

MonadReader app (AppExample app) Source # 
Instance details

Defined in Freckle.App.Test

Methods

ask :: AppExample app app #

local :: (app -> app) -> AppExample app a -> AppExample app a #

reader :: (app -> a) -> AppExample app a #

(Functor m, MonadReader e m) => MonadReader e (Free m) 
Instance details

Defined in Control.Monad.Free

Methods

ask :: Free m e #

local :: (e -> e) -> Free m a -> Free m a #

reader :: (e -> a) -> Free m a #

MonadReader r m => MonadReader r (LoggingT m) 
Instance details

Defined in Control.Monad.Logger

Methods

ask :: LoggingT m r #

local :: (r -> r) -> LoggingT m a -> LoggingT m a #

reader :: (r -> a) -> LoggingT m a #

MonadReader r m => MonadReader r (NoLoggingT m)

Since: monad-logger-0.3.24

Instance details

Defined in Control.Monad.Logger

Methods

ask :: NoLoggingT m r #

local :: (r -> r) -> NoLoggingT m a -> NoLoggingT m a #

reader :: (r -> a) -> NoLoggingT m a #

MonadReader r m => MonadReader r (ResourceT m) 
Instance details

Defined in Control.Monad.Trans.Resource.Internal

Methods

ask :: ResourceT m r #

local :: (r -> r) -> ResourceT m a -> ResourceT m a #

reader :: (r -> a) -> ResourceT m a #

MonadReader r m => MonadReader r (ListT m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: ListT m r #

local :: (r -> r) -> ListT m a -> ListT m a #

reader :: (r -> a) -> ListT m a #

MonadReader r m => MonadReader r (MaybeT m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: MaybeT m r #

local :: (r -> r) -> MaybeT m a -> MaybeT m a #

reader :: (r -> a) -> MaybeT m a #

MonadReader s (ReifiedFold s) 
Instance details

Defined in Control.Lens.Reified

Methods

ask :: ReifiedFold s s #

local :: (s -> s) -> ReifiedFold s a -> ReifiedFold s a #

reader :: (s -> a) -> ReifiedFold s a #

MonadReader s (ReifiedGetter s) 
Instance details

Defined in Control.Lens.Reified

Methods

ask :: ReifiedGetter s s #

local :: (s -> s) -> ReifiedGetter s a -> ReifiedGetter s a #

reader :: (s -> a) -> ReifiedGetter s a #

MonadReader r m => MonadReader r (RandT g m) 
Instance details

Defined in Control.Monad.Trans.Random.Lazy

Methods

ask :: RandT g m r #

local :: (r -> r) -> RandT g m a -> RandT g m a #

reader :: (r -> a) -> RandT g m a #

MonadReader r m => MonadReader r (RandT g m) 
Instance details

Defined in Control.Monad.Trans.Random.Strict

Methods

ask :: RandT g m r #

local :: (r -> r) -> RandT g m a -> RandT g m a #

reader :: (r -> a) -> RandT g m a #

(Functor f, Functor m, MonadReader r m) => MonadReader r (FreeT f m) 
Instance details

Defined in Control.Monad.Trans.Free

Methods

ask :: FreeT f m r #

local :: (r -> r) -> FreeT f m a -> FreeT f m a #

reader :: (r -> a) -> FreeT f m a #

MonadReader r m => MonadReader r (ValidateT e m) 
Instance details

Defined in Control.Monad.Validate.Internal

Methods

ask :: ValidateT e m r #

local :: (r -> r) -> ValidateT e m a -> ValidateT e m a #

reader :: (r -> a) -> ValidateT e m a #

(Error e, MonadReader r m) => MonadReader r (ErrorT e m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: ErrorT e m r #

local :: (r -> r) -> ErrorT e m a -> ErrorT e m a #

reader :: (r -> a) -> ErrorT e m a #

MonadReader r m => MonadReader r (ExceptT e m)

Since: mtl-2.2

Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: ExceptT e m r #

local :: (r -> r) -> ExceptT e m a -> ExceptT e m a #

reader :: (r -> a) -> ExceptT e m a #

MonadReader r m => MonadReader r (IdentityT m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: IdentityT m r #

local :: (r -> r) -> IdentityT m a -> IdentityT m a #

reader :: (r -> a) -> IdentityT m a #

Monad m => MonadReader r (ReaderT r m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: ReaderT r m r #

local :: (r -> r) -> ReaderT r m a -> ReaderT r m a #

reader :: (r -> a) -> ReaderT r m a #

MonadReader r m => MonadReader r (StateT s m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: StateT s m r #

local :: (r -> r) -> StateT s m a -> StateT s m a #

reader :: (r -> a) -> StateT s m a #

MonadReader r m => MonadReader r (StateT s m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: StateT s m r #

local :: (r -> r) -> StateT s m a -> StateT s m a #

reader :: (r -> a) -> StateT s m a #

(Monoid w, MonadReader r m) => MonadReader r (WriterT w m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: WriterT w m r #

local :: (r -> r) -> WriterT w m a -> WriterT w m a #

reader :: (r -> a) -> WriterT w m a #

(Monoid w, MonadReader r m) => MonadReader r (WriterT w m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: WriterT w m r #

local :: (r -> r) -> WriterT w m a -> WriterT w m a #

reader :: (r -> a) -> WriterT w m a #

MonadReader r m => MonadReader r (ConduitT i o m) 
Instance details

Defined in Data.Conduit.Internal.Conduit

Methods

ask :: ConduitT i o m r #

local :: (r -> r) -> ConduitT i o m a -> ConduitT i o m a #

reader :: (r -> a) -> ConduitT i o m a #

MonadReader r ((->) r) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: r -> r #

local :: (r -> r) -> (r -> a) -> r -> a #

reader :: (r -> a) -> r -> a #

MonadReader r' m => MonadReader r' (ContT r m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: ContT r m r' #

local :: (r' -> r') -> ContT r m a -> ContT r m a #

reader :: (r' -> a) -> ContT r m a #

(Monad m, Monoid w) => MonadReader r (RWST r w s m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: RWST r w s m r #

local :: (r -> r) -> RWST r w s m a -> RWST r w s m a #

reader :: (r -> a) -> RWST r w s m a #

(Monad m, Monoid w) => MonadReader r (RWST r w s m) 
Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: RWST r w s m r #

local :: (r -> r) -> RWST r w s m a -> RWST r w s m a #

reader :: (r -> a) -> RWST r w s m a #

MonadReader r m => MonadReader r (Pipe l i o u m) 
Instance details

Defined in Data.Conduit.Internal.Pipe

Methods

ask :: Pipe l i o u m r #

local :: (r -> r) -> Pipe l i o u m a -> Pipe l i o u m a #

reader :: (r -> a) -> Pipe l i o u m a #

MonadReader (WidgetData site) (WidgetFor site) 
Instance details

Defined in Yesod.Core.Types

Methods

ask :: WidgetFor site (WidgetData site) #

local :: (WidgetData site -> WidgetData site) -> WidgetFor site a -> WidgetFor site a #

reader :: (WidgetData site -> a) -> WidgetFor site a #

MonadReader (HandlerData site site) (HandlerFor site) 
Instance details

Defined in Yesod.Core.Types

Methods

ask :: HandlerFor site (HandlerData site site) #

local :: (HandlerData site site -> HandlerData site site) -> HandlerFor site a -> HandlerFor site a #

reader :: (HandlerData site site -> a) -> HandlerFor site a #

MonadReader (HandlerData child master) (SubHandlerFor child master) 
Instance details

Defined in Yesod.Core.Types

Methods

ask :: SubHandlerFor child master (HandlerData child master) #

local :: (HandlerData child master -> HandlerData child master) -> SubHandlerFor child master a -> SubHandlerFor child master a #

reader :: (HandlerData child master -> a) -> SubHandlerFor child master a #

runReaderT :: ReaderT r m a -> r -> m a #

setInfoSeverity :: BeforeNotify #

Set to InfoSeverity

setWarningSeverity :: BeforeNotify #

Set to WarningSeverity

setErrorSeverity :: BeforeNotify #

Set to ErrorSeverity

setDevice :: Device -> BeforeNotify #

Set the Event's Device

See bugsnagDeviceFromWaiRequest

setRequest :: Request -> BeforeNotify #

Set the Event's Request

See bugsnagRequestFromWaiRequest

setContext :: Text -> BeforeNotify #

Set the Event's Context

updateEventFromOriginalException :: Exception e => (e -> BeforeNotify) -> BeforeNotify #

Update the Event based on the original exception

This allows updating the Event after casting to an exception type that this library doesn't know about (e.g. SqlError). Because the result of your function is itself a BeforeNotify, you can (and should) use other helpers:

myBeforeNotify =
    defaultBeforeNotify
        <> updateEventFromOriginalException asSqlError
        <> updateEventFromOriginalException asHttpError
        <> -- ...

asSqlError :: SqlError -> BeforeNotify
asSqlError SqlError{..} =
    setGroupingHash sqlErrorCode <> updateException (e -> e
        { exception_errorClass = sqlErrorCode
        , exception_message = Just sqlErrorMessage
        })

If the cast fails, the event is unchanged.

beforeNotify :: (forall e. Exception e => e -> Event -> Event) -> BeforeNotify #

data BeforeNotify #

A function from Event to Event that is applied before notifying

The wrapped function also accepts the original exception, for cases in which that's useful -- but it's often not. Most BeforeNotifys use updateEvent, which discards it.

BeforeNotify implements Semigroup and Monoid, which means the /do nothing/ BeforeNotify is mempty and two BeforeNotifys doThis then doThat can be implemented as doThat <> doThis.