-- Prints the values of all CGI variables and inputs, and some -- process information. import Control.Monad (liftM) import Data.Maybe (fromJust) import Control.Concurrent import System.Posix.Process (getProcessID) import Network.FastCGI printinput :: CGI CGIResult printinput = do setHeader "Content-type" "text/plain" vs <- getVars is <- getInputNames i <- mapM prInput is pid <- liftIO getProcessID threadId <- liftIO myThreadId let tid = concat $ drop 1 $ words $ show threadId output $ unlines ["Environment:", prVars vs, "Inputs:", unlines i, "Process ID: " ++ show pid, "Thread ID: " ++ tid] prVars vs = unlines [k ++ ": " ++ x | (k,x) <- vs ] prInput :: String -> CGI String prInput i = do v <- liftM fromJust (getInput i) f <- getInputFilename i return $ case f of Just n -> i ++ ": File\nfilename=" ++ n ++ "\ncontents=" ++ v Nothing -> i ++ ": " ++ v main = runFastCGIorCGI printinput