hack-contrib 2009.8.18 → 2009.11.1
raw patch · 5 files changed
+70/−15 lines, 5 filesdep +utf8-stringdep ~hackdep ~mps
Dependencies added: utf8-string
Dependency ranges changed: hack, mps
Files
- changelog.md +7/−0
- hack-contrib.cabal +21/−3
- src/Hack/Contrib/Middleware/SimpleAccessLogger.hs +26/−12
- src/Hack/Contrib/Middleware/UTF8Body.hs +14/−0
- src/Hack/Contrib/Utils.hs +2/−0
changelog.md view
@@ -1,3 +1,10 @@+2009.11.1+---------++### Fix++* flush io in simple access logger+ 2009.8.18 ---------
hack-contrib.cabal view
@@ -1,5 +1,5 @@ Name: hack-contrib-Version: 2009.8.18+Version: 2009.11.1 Build-type: Simple Synopsis: Hack contrib Description: Common middlewares and utilities that helps working with Hack@@ -15,7 +15,24 @@ library ghc-options: -Wall- build-depends: base >=4 && < 5, cgi, network, haskell98, old-locale, old-time, directory, filepath, containers, bytestring, ansi-wl-pprint, data-default >= 0.2, ansi-wl-pprint, time, pureMD5, mps >= 2009.8.18.1, hack >= 2009.7.15+ build-depends: + base >=4 && < 5+ , cgi+ , network+ , haskell98+ , old-locale+ , old-time+ , directory+ , filepath+ , containers+ , bytestring+ , data-default >= 0.2+ , time+ , pureMD5+ , mps >= 2009.9.18+ , hack >= 2009.10.30+ , utf8-string+ , ansi-wl-pprint hs-source-dirs: src/ exposed-modules: @@ -29,7 +46,6 @@ Hack.Contrib.Middleware.ETag Hack.Contrib.Middleware.File Hack.Contrib.Middleware.Head- Hack.Contrib.Middleware.Hub Hack.Contrib.Middleware.Inspect Hack.Contrib.Middleware.Lambda Hack.Contrib.Middleware.Lucky@@ -37,10 +53,12 @@ Hack.Contrib.Middleware.RegexpRouter Hack.Contrib.Middleware.ShowExceptions Hack.Contrib.Middleware.SimpleAccessLogger+ Hack.Contrib.Middleware.Hub Hack.Contrib.Middleware.Static Hack.Contrib.Middleware.URLMap Hack.Contrib.Middleware.IOConfig Hack.Contrib.Middleware.UserMime+ Hack.Contrib.Middleware.UTF8Body Hack.Contrib.Mime Hack.Contrib.Request Hack.Contrib.Response
src/Hack/Contrib/Middleware/SimpleAccessLogger.hs view
@@ -2,21 +2,35 @@ import Data.Maybe import Hack-import Hack.Contrib.Middleware.Hub-import Hack.Contrib.Request+import Hack.Contrib.Request hiding (referer)+import Hack.Contrib.Constants import Hack.Contrib.Utils-import MPS.Light-import Prelude hiding ((.), (^), (>), log)+import MPS (simple_time_format)+import MPS.Env+import Data.Maybe+import Prelude ()+import qualified Data.ByteString.Char8 as B+import System.IO -program :: String-program = "SimpleAccessLogger"- simple_access_logger :: Maybe (String -> IO ()) -> Middleware simple_access_logger stream app = \env -> do- let my_stream = stream.fromMaybe (env.hack_errors)- let log = simple_logger my_stream program-- Info .log (env.url.unescape_uri)+ r <- app env+ time <- now ^ format_time simple_time_format + let puts' x = x.B.pack.B.putStrLn >> hFlush stdout+ puts = stream.fromMaybe puts'+ method = env.request_method.show+ http_status = env.hack_url_scheme.show + access_path = env.fullpath.unescape_uri+ + fields =+ [ env.remote_host+ , "-"+ , "[" ++ time ++ "]"+ , "\"" ++ method ++ " " ++ access_path ++ " " ++ http_status ++ "\""+ , r.status.show+ , r.headers.get _ContentLength .fromMaybe "-"+ ] - app env+ puts - fields.join " "+ return r
+ src/Hack/Contrib/Middleware/UTF8Body.hs view
@@ -0,0 +1,14 @@+module Hack.Contrib.Middleware.UTF8Body (utf8_body) where++import MPS.Env+import Prelude ()+import MPS.Heavy+import Hack+import Data.ByteString.Lazy.Char8 (unpack)+import Data.ByteString.Lazy.UTF8 (fromString)++utf8_body :: Middleware+utf8_body app = \env -> do+ r <- app env+ let raw_body = r.body+ return r {body = raw_body.unpack.unescape_xml.fromString}
src/Hack/Contrib/Utils.hs view
@@ -80,6 +80,7 @@ hack_input :: Env -> ByteString hack_errors :: Env -> HackErrors custom :: Env -> [(String, String)]+remote_host :: Env -> String request_method = requestMethod script_name = scriptName@@ -92,4 +93,5 @@ hack_input = hackInput hack_errors = hackErrors custom = hackHeaders+remote_host = remoteHost