[Fencommits] fenserve: add a bit of error handling (not sure whether it's useful); increase request body limit to 1 MB

Benja Fallenstein benja.fallenstein at gmail.com
Fri Mar 30 16:47:01 EEST 2007


Fri Mar 30 16:17:59 EEST 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * add a bit of error handling (not sure whether it's useful); increase request body limit to 1 MB
diff -rN -u old-fenserve/Main.hs new-fenserve/Main.hs
--- old-fenserve/Main.hs	2007-03-30 16:47:00.000000000 +0300
+++ new-fenserve/Main.hs	2007-03-30 16:47:00.000000000 +0300
@@ -24,6 +24,7 @@
 
 import HAppS hiding (query, Handler)
 
+import Control.Exception (evaluate)
 import Control.Monad (when)
 import Control.Monad.State (State, get, gets, put, modify, execState)
 import Control.Monad.Trans (liftIO)
@@ -49,9 +50,11 @@
 fenserveHandler dir = Handle $ \req -> do
     node <- get
     let (result, node', pool) = unsafePerformIO $ runFenServe (handleRequest req) node (Just dir)
-    if (rqMethod req `elem` [GET,HEAD]) then respond $ return result
-      else if isLocalhost req then do put node'; respond $ do writePool pool; return result
-      else if node == node' then respond $ return result
+        r = evaluate result `catch` \e -> return $ mkResult 500 "text/plain" $
+                toUTF $ "internal server error, caught:\n\n" ++ show e
+    if (rqMethod req `elem` [GET,HEAD]) then respond r
+      else if isLocalhost req then do put node'; respond $ do writePool pool; r
+      else if node == node' then respond r
       else respond $ return $ mkResult 403 "text/html" $ toUTF
                "403 Forbidden: state changes only from localhost at this time"
 
@@ -66,7 +69,10 @@
   pn <- getProgName; let dir = pn++"_storm"
   createDirectoryIfMissing True dir
   (_,_,pool) <- runFenServe writeEmptyState (error "Main.main: this shouldn't be evaluated") (Just dir); writePool pool
-  stdHTTP [ debugFilter
-          --, localhostOnlyFilter
+  let handlers =
+          [ debugFilter
+        --, localhostOnlyFilter
           , fenserveHandler dir
           ]
+  stdMain $ (\conf -> simpleHTTP handlers $ conf {bodyLimit=1024*1024}) :*: End
+ 




More information about the Fencommits mailing list