git.iko.soy/typeable/katip-rollbar
on master help sign in
Extract function
564452ejoneshf
src/Katip/Scribes/Rollbar.hs+19−10
@@ -9,7 +9,7 @@ module Katip.Scribes.Rollbar where
9
9
10import Prelude hiding (error)
10import Prelude hiding (error)
11
11
12−import "base" Control.Concurrent.MVar (newEmptyMVar, putMVar, takeMVar)
12+import "base" Control.Concurrent.MVar (MVar, newEmptyMVar, putMVar, takeMVar)
13import "base" Control.Monad (replicateM, when)
13import "base" Control.Monad (replicateM, when)
14import "base" Data.Foldable (for_)
14import "base" Data.Foldable (for_)
15import "base" Data.Functor (void)
15import "base" Data.Functor (void)
@@ -74,15 +74,7 @@ mkRollbarScribe ::
74mkRollbarScribe proxy accessToken manager severity verbosity = do
74mkRollbarScribe proxy accessToken manager severity verbosity = do
75 queue <- newTBMQueueIO queueSize
75 queue <- newTBMQueueIO queueSize
76 finalize <- newEmptyMVar
76 finalize <- newEmptyMVar
77− void $ async $ do
77+ setupWorkers proxy queue finalize manager
78− -- Setup the workers and wait until the finalizer is evaluated.
79− -- Then, close the queueu, wait for the workers and continue finalization.
80− workers <- replicateM workerSize (async $ mkWorker proxy manager queue)
81− takeMVar finalize
82− atomically $ do
83− closeTBMQueue queue
84− for_ workers waitCatchSTM
85− putMVar finalize ()
86 let liPush item = when (permitItem severity item) $
78 let liPush item = when (permitItem severity item) $
87 atomically (writeTBMQueue queue $ rollbarItem' item)
79 atomically (writeTBMQueue queue $ rollbarItem' item)
88 rollbarItem' item = rollbarItem proxy accessToken item verbosity
80 rollbarItem' item = rollbarItem proxy accessToken item verbosity
@@ -118,6 +110,23 @@ rollbarItem _ accessToken item verbosity = Item { accessToken, itemData }
118 value :: Value
110 value :: Value
119 value = itemJson verbosity item
111 value = itemJson verbosity item
120
112
113+-- | Setup the workers and wait until the finalizer is evaluated.
114+-- Then, close the queueu, wait for the workers and continue finalization.
115+setupWorkers ::
116+ RemoveHeaders headers =>
117+ proxy headers ->
118+ TBMQueue (Item Value ("Authorization" ': headers)) ->
119+ MVar () ->
120+ Manager ->
121+ IO ()
122+setupWorkers proxy queue finalize manager = void $ async $ do
123+ workers <- replicateM workerSize (async $ mkWorker proxy manager queue)
124+ takeMVar finalize
125+ atomically $ do
126+ closeTBMQueue queue
127+ for_ workers waitCatchSTM
128+ putMVar finalize ()
129+
121mkWorker ::
130mkWorker ::
122 (RemoveHeaders headers) =>
131 (RemoveHeaders headers) =>
123 proxy headers ->
132 proxy headers ->