module Network.Salvia.Handlers.Log (hLog) where import Control.Concurrent.STM import Control.Monad.State import System.IO import Network.Salvia.Httpd (Handler, request, response, address) import Network.Protocol.Http import Misc.Terminal (red, green, reset) -- TODO: handle should be tvar as well hLog :: TVar Int -> Handle -> Handler Handle hLog count handle = do c <- lift $ atomically $ readTVar count req <- gets request res <- gets response addr <- gets address let st = status res code = codeFromStatus st clr = if code >= 400 then red else green lift $ hPutStrLn handle $ concat [ concat ["[", show addr, "] ", show c, "\t"] , show $ method req, "\t" , show $ uri req , " -> " , clr , show code, " " , show st , reset ] return handle