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