git.iko.soy/typeable/katip-rollbar
on master help sign in
Simplify queue
be4f5e3joneshf
src/Katip/Scribes/Rollbar.hs+3−21
@@ -12,7 +12,6 @@ module Katip.Scribes.Rollbar
12
12
13import Prelude hiding (error)
13import Prelude hiding (error)
14
14
15−import "base" Control.Concurrent.MVar (MVar, newEmptyMVar, putMVar, takeMVar)
16import "base" Control.Monad (replicateM, when)
15import "base" Control.Monad (replicateM, when)
17import "base" Data.Foldable (for_)
16import "base" Data.Foldable (for_)
18import "base" Data.Functor (void)
17import "base" Data.Functor (void)
@@ -89,14 +88,13 @@ mkRollbarScribe ::
89 IO Scribe
88 IO Scribe
90mkRollbarScribe proxy accessToken branch codeVersion manager severity verbosity = do
89mkRollbarScribe proxy accessToken branch codeVersion manager severity verbosity = do
91 queue <- newTBMQueueIO queueSize
90 queue <- newTBMQueueIO queueSize
92− finalize <- newEmptyMVar
91+ workers <- replicateM workerSize (async $ mkWorker proxy manager queue)
93− setupWorkers proxy queue finalize manager
94 let liPush item = when (permitItem severity item) $
92 let liPush item = when (permitItem severity item) $
95 atomically (writeTBMQueue queue $ rollbarItem' item)
93 atomically (writeTBMQueue queue $ rollbarItem' item)
96 rollbarItem' item = rollbarItem proxy accessToken branch codeVersion verbosity item
94 rollbarItem' item = rollbarItem proxy accessToken branch codeVersion verbosity item
97 scribeFinalizer = do
95 scribeFinalizer = do
98− putMVar finalize ()
96+ atomically (closeTBMQueue queue)
99− takeMVar finalize
97+ for_ workers waitCatch
100 pure Scribe { liPush, scribeFinalizer }
98 pure Scribe { liPush, scribeFinalizer }
101
99
102rollbarItem ::
100rollbarItem ::
@@ -141,22 +139,6 @@ rollbarItem _ accessToken branch serverCodeVersion verbosity item =
141 value :: Value
139 value :: Value
142 value = itemJson verbosity item
140 value = itemJson verbosity item
143
141
144−-- | Setup the workers and wait until the finalizer is evaluated.
145−-- Then, close the queueu, wait for the workers and continue finalization.
146−setupWorkers ::
147− RemoveHeaders headers =>
148− proxy headers ->
149− TBMQueue (Item Value ("Authorization" ': headers)) ->
150− MVar () ->
151− Manager ->
152− IO ()
153−setupWorkers proxy queue finalize manager = void $ async $ do
154− workers <- replicateM workerSize (async $ mkWorker proxy manager queue)
155− takeMVar finalize
156− atomically (closeTBMQueue queue)
157− for_ workers waitCatch
158− putMVar finalize ()
159−
160mkWorker ::
142mkWorker ::
161 (RemoveHeaders headers) =>
143 (RemoveHeaders headers) =>
162 proxy headers ->
144 proxy headers ->