diff options
Diffstat (limited to 'Application.hs')
-rw-r--r-- | Application.hs | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/Application.hs b/Application.hs new file mode 100644 index 0000000..5646408 --- /dev/null +++ b/Application.hs @@ -0,0 +1,75 @@ +{-# OPTIONS_GHC -fno-warn-orphans #-} +module Application + ( makeApplication + , getApplicationDev + , makeFoundation + ) where + +import Import +import Yesod.Default.Config +import Yesod.Default.Main +import Yesod.Default.Handlers +import Network.Wai.Middleware.RequestLogger + ( mkRequestLogger, outputFormat, OutputFormat (..), IPAddrSource (..), destination + ) +import qualified Network.Wai.Middleware.RequestLogger as RequestLogger +import Network.HTTP.Client.Conduit (newManager) +import System.Log.FastLogger (newStdoutLoggerSet, defaultBufSize) +import Network.Wai.Logger (clockDateCacher) +import Data.Default (def) +import Yesod.Core.Types (loggerSet, Logger (Logger)) + +-- Import all relevant handler modules here. +-- Don't forget to add new modules to your cabal file! +import Handler.Home + +-- This line actually creates our YesodDispatch instance. It is the second half +-- of the call to mkYesodData which occurs in Foundation.hs. Please see the +-- comments there for more details. +mkYesodDispatch "App" resourcesApp + +-- This function allocates resources (such as a database connection pool), +-- performs initialization and creates a WAI application. This is also the +-- place to put your migrate statements to have automatic database +-- migrations handled by Yesod. +makeApplication :: AppConfig DefaultEnv Extra -> IO (Application, LogFunc) +makeApplication conf = do + foundation <- makeFoundation conf + + -- Initialize the logging middleware + logWare <- mkRequestLogger def + { outputFormat = + if development + then Detailed True + else Apache FromSocket + , destination = RequestLogger.Logger $ loggerSet $ appLogger foundation + } + + -- Create the WAI application and apply middlewares + app <- toWaiAppPlain foundation + let logFunc = messageLoggerSource foundation (appLogger foundation) + return (logWare $ defaultMiddlewaresNoLogging app, logFunc) + +-- | Loads up any necessary settings, creates your foundation datatype, and +-- performs some initialization. +makeFoundation :: AppConfig DefaultEnv Extra -> IO App +makeFoundation conf = do + manager <- newManager + s <- staticSite + + loggerSet' <- newStdoutLoggerSet defaultBufSize + (getter, _) <- clockDateCacher + + let logger = Yesod.Core.Types.Logger loggerSet' getter + foundation = App conf s manager logger + + return foundation + +-- for yesod devel +getApplicationDev :: IO (Int, Application) +getApplicationDev = + defaultDevelApp loader (fmap fst . makeApplication) + where + loader = Yesod.Default.Config.loadConfig (configSettings Development) + { csParseExtra = parseExtra + } |