module Network.Salvia.Handler.Log where
import Control.Applicative
import Control.Monad.State
import Data.List
import Data.Record.Label hiding (get)
import Data.Time.Clock
import Data.Time.Format
import Data.Time.LocalTime
import Network.Protocol.Http
import Network.Salvia.Interface
import System.IO
import System.Locale
hLog :: (AddressM' m , MonadIO m, HttpM' m) => Handle -> m ()
hLog h =
do mt <- request (getM method)
ur <- request (getM uri)
st <- response (getM status)
ca <- clientAddress
sa <- serverAddress
dt <- liftIO $
do zone <- getCurrentTimeZone
time <- utcToLocalTime zone <$> getCurrentTime
return $ formatTime defaultTimeLocale "%a, %d %b %Y %H:%M:%S %z" time
let code = codeFromStatus st
liftIO
. hPutStrLn h
$ intercalate " ; "
[ dt
, show sa
, show mt
, show ca
, ur
, show code ++ " " ++ show st
]
hDumpRequest :: (HttpM Request m, MonadIO m) => m ()
hDumpRequest = request get >>= liftIO . print
hDumpResponse :: (HttpM Response m, MonadIO m) => m ()
hDumpResponse = response get >>= liftIO . print