@@ -12,8 +12,10 @@ import Control.Concurrent.Async
1212import Control.Concurrent.STM
1313import Control.Monad
1414import Data.Aeson
15+import qualified Data.Text.Encoding as T
1516import Data.UUID
1617import Database.Bloodhound
18+import Network.HTTP.Client
1719import System.Random
1820-------------------------------------------------------------------------------
1921import Katip.Core
@@ -22,26 +24,31 @@ import Katip.Core
2224
2325-------------------------------------------------------------------------------
2426mkEsScribe
25− :: Server
27+ :: ManagerSettings
28+ -> Server
2629 -> IndexName
2730 -> MappingName
2831 -> EsQueueSize
2932 -> Severity
3033 -> Verbosity
3134 -> IO Scribe
32−mkEsScribe server ix mapping qs sev verb = do
33− q <- newTBQueueIO $ unEsQueueSize qs
34− worker <- startWorker server ix mapping q
35+mkEsScribe ms server ix mapping qs sev verb = do
36+ q <- newTBQueueIO $ unEsQueueSize qs
37+ withManager ms $ \mgr -> do
38+ let env = BHEnv { bhServer = server
39+ , bhManager = mgr
40+ }
41+ worker <- startWorker env ix mapping q
3542 link worker
36−
37− return $ Scribe $ \ i ->
43+ return $ Scribe $ \ i -> do
44+ did <- mkDocId
3845 when (_itemSeverity i >= sev) $
3946 void $ atomically $ tryWriteTBQueue q (itemJson verb i)
4047
4148
4249-------------------------------------------------------------------------------
4350mkDocId :: IO DocId
44−mkDocId = (DocId . toString) `fmap` randomIO
51+mkDocId = (DocId . T.decodeUtf8 . toASCIIBytes) `fmap` randomIO
4552
4653
4754-------------------------------------------------------------------------------
@@ -58,17 +65,19 @@ mkEsQueueSize n
5865
5966-------------------------------------------------------------------------------
6067startWorker
61− :: Server
68+ :: BHEnv
6269 -> IndexName
6370 -> MappingName
6471 -> TBQueue Value
6572 -> IO (Async ())
66−startWorker server ix mapping q = async $ forever $ do
73+startWorker env ix mapping q = async $ forever $ do
6774 v <- atomically $ readTBQueue q
6875 res <- waitCatch =<< async (sendLog v)
69− when (isLeft res) $ inCaseOfEmergency
76+ when (isLeft res) inCaseOfEmergency
7077 where
71− sendLog v = void $ indexDocument server ix mapping v =<< mkDocId
78+ sendLog v = void $ do
79+ did <- mkDocId
80+ runBH env $ indexDocument ix mapping v did
7281 --TODO reenqueue? drop? would be nice to log but we don't have that context
7382 inCaseOfEmergency = return ()
7483