|
1 | 1 | module FloraWeb.Common.Tracing where |
2 | 2 |
|
3 | 3 | import Control.Exception (AsyncException (..), Exception (..), SomeException, throw) |
| 4 | +import Control.Monad (when) |
4 | 5 | import Data.Aeson qualified as Aeson |
5 | 6 | import Data.ByteString.Char8 (unpack) |
6 | 7 | import Data.Maybe (isJust) |
@@ -30,38 +31,38 @@ handleExceptions |
30 | 31 | handleExceptions logger environment mltp mRequest e@(E.SomeException exception) = do |
31 | 32 | Log.runLogT "flora-production" logger LogAttention $ do |
32 | 33 | let context = E.displayExceptionContext $ E.someExceptionContext e |
33 | | - Log.logAttention "Unhandled exception" $ |
34 | | - Aeson.object |
35 | | - [ "exception" .= display (show exception) |
36 | | - , "backtraces" .= context |
37 | | - ] |
38 | | - case mltp.sentryDSN of |
39 | | - Nothing -> throw exception |
40 | | - Just sentryDSN -> |
41 | | - if shouldDisplayException e && isJust mRequest |
42 | | - then do |
43 | | - sentryService <- |
| 34 | + when (shouldDisplayException e) $ do |
| 35 | + Log.logAttention "Unhandled exception" $ |
| 36 | + Aeson.object |
| 37 | + [ "exception" .= display (show exception) |
| 38 | + , "backtraces" .= context |
| 39 | + ] |
| 40 | + case mltp.sentryDSN of |
| 41 | + Nothing -> throw exception |
| 42 | + Just sentryDSN -> |
| 43 | + if isJust mRequest |
| 44 | + then do |
| 45 | + sentryService <- |
| 46 | + liftIO $ |
| 47 | + initRaven |
| 48 | + sentryDSN |
| 49 | + (\defaultRecord -> defaultRecord{srEnvironment = Just $ show environment}) |
| 50 | + sendRecord |
| 51 | + silentFallback |
44 | 52 | liftIO $ |
45 | | - initRaven |
46 | | - sentryDSN |
47 | | - (\defaultRecord -> defaultRecord{srEnvironment = Just $ show environment}) |
48 | | - sendRecord |
49 | | - silentFallback |
50 | | - liftIO $ |
51 | | - register |
52 | | - sentryService |
53 | | - "flora-server" |
54 | | - Error |
55 | | - (formatMessage mRequest e) |
56 | | - (recordUpdate mRequest e) |
57 | | - liftIO $ defaultOnException mRequest e |
58 | | - else liftIO $ defaultOnException mRequest e |
| 53 | + register |
| 54 | + sentryService |
| 55 | + "flora-server" |
| 56 | + Error |
| 57 | + (formatMessage mRequest e) |
| 58 | + (recordUpdate mRequest e) |
| 59 | + liftIO $ defaultOnException mRequest e |
| 60 | + else liftIO $ defaultOnException mRequest e |
59 | 61 |
|
60 | 62 | shouldDisplayException :: SomeException -> Bool |
61 | 63 | shouldDisplayException exception |
62 | 64 | | Just ThreadKilled <- fromException exception = False |
63 | 65 | | Just TimeoutThread <- fromException exception = False |
64 | | - | Just ConnectionClosedByPeer <- fromException exception = False |
65 | 66 | | Just (_ :: InvalidRequest) <- fromException exception = False |
66 | 67 | | Just (ioeGetErrorType -> et) <- fromException exception |
67 | 68 | , et == ResourceVanished || et == InvalidArgument = |
|
0 commit comments