fluent-logger 0.2.2.0 → 0.2.3.0
raw patch · 4 files changed
+34/−5 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- fluent-logger.cabal +2/−1
- src/Network/Fluent/Logger.hs +4/−3
- src/Network/Fluent/Logger/ForkWrapper.hs +18/−0
- test/Network/Fluent/LoggerSpec.hs +10/−1
fluent-logger.cabal view
@@ -1,5 +1,5 @@ name: fluent-logger-version: 0.2.2.0+version: 0.2.3.0 synopsis: A structured logger for Fluentd (Haskell) description: A structured logger for Fluentd (Haskell) <http://fluentd.org/> license: Apache-2.0@@ -21,6 +21,7 @@ hs-source-dirs: src exposed-modules: Network.Fluent.Logger , Network.Fluent.Logger.Packable+ other-modules: Network.Fluent.Logger.ForkWrapper ghc-options: -Wall build-depends: base ==4.* , bytestring
src/Network/Fluent/Logger.hs view
@@ -37,7 +37,7 @@ import Network.Socket.ByteString.Lazy ( sendAll, recv ) import Control.Monad ( void, forever, when ) import Control.Applicative ( (<$>) )-import Control.Concurrent ( ThreadId, forkIO, killThread, threadDelay )+import Control.Concurrent ( ThreadId, killThread, threadDelay ) import Control.Concurrent.STM ( atomically, orElse , TChan, newTChanIO, readTChan, peekTChan, writeTChan , TVar, newTVarIO, readTVar, modifyTVar@@ -50,6 +50,7 @@ import System.Random ( randomRIO ) import Network.Fluent.Logger.Packable+import Network.Fluent.Logger.ForkWrapper (forkIOUnmasked) -- | Wrap close / sClose (deprecated) close :: NS.Socket -> IO ()@@ -139,7 +140,7 @@ filterException action = catches action [Handler passAsyncException, Handler dropOtherExceptions] handleSocket sock = do flag <- newEmptyTMVarIO- bracket (forkIO $ setFlagWhenClose sock flag) killThread (const $ sendFluent logger sock flag)+ bracket (forkIOUnmasked $ setFlagWhenClose sock flag) killThread (const $ sendFluent logger sock flag) connectFluent :: FluentLoggerSender -> IO NS.Socket connectFluent logger = exponentialBackoff $ getSocket host port timeout where@@ -190,7 +191,7 @@ , fluentLoggerSenderBuffered = tvar , fluentLoggerSenderSettings = set }- tid <- forkIO $ runSender sender+ tid <- forkIOUnmasked $ runSender sender let logger = FluentLogger { fluentLoggerSender = sender , fluentLoggerThread = tid
+ src/Network/Fluent/Logger/ForkWrapper.hs view
@@ -0,0 +1,18 @@+{-# LANGUAGE CPP #-}+module Network.Fluent.Logger.ForkWrapper (forkIOUnmasked) where++import qualified Control.Concurrent as CC+#if MIN_VERSION_base(4,3,0)+#else+import qualified Control.Exception as CE+#endif++forkIOUnmasked :: IO () -> IO CC.ThreadId+#if MIN_VERSION_base(4,4,0)+forkIOUnmasked action = CC.forkIOWithUnmask (\unmask -> unmask action)+#elif MIN_VERSION_base(4,3,0)+forkIOUnmasked action = CC.forkIOUnmasked+#else+forkIOUnmasked action = if CE.blocked then CE.unblock $ CC.forkIO action else CC.forkIO action+#endif+
test/Network/Fluent/LoggerSpec.hs view
@@ -24,6 +24,7 @@ it "posts a message with given time" postWithTimePostsMessageWithGivenTime describe "withFluentLogger" $ do it "disconnects when the scope is over" withFluentLoggerDisconnect+ it "exits normally even if you don't wait for the message to be received" withFluentLoggerExit postSettings =@@ -131,4 +132,12 @@ content `shouldBe` "foobar" threadDelay 5000 server `shouldHaveConns` 0- ++withFluentLoggerExit :: IO ()+withFluentLoggerExit =+ (withMockServer :: (MockServer Object -> IO ()) -> IO ()) $ \server -> do+ withFluentLogger postSettings $ \logger -> do+ post logger "hoge" ("foobar" :: String)+ -- immediately exit the block without waiting for the message+ threadDelay 5000+ server `shouldHaveConns` 0