salvia-0.0.4: src/Network/Salvia/Handlers/Log.hs
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