{-# LANGUAGE OverloadedLists #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RecordWildCards #-} -- | The main module. Does little more than handle some basic ocnfic, then -- call the server module Main where import Conftrack import Conftrack.Pretty import Conftrack.Source.Env (mkEnvSource) import Conftrack.Source.Yaml (mkYamlFileSource) import Control.Monad.Extra (ifM) import Control.Monad.IO.Class (MonadIO (liftIO)) import Control.Monad.Logger (runStderrLoggingT) import Data.Default.Class (def) import Database.Persist.Postgresql (withPostgresqlPool) import Network.Wai.Handler.Warp (runSettings) import Network.Wai.Middleware.RequestLogger (OutputFormat (..), RequestLoggerSettings (..), mkRequestLogger) import System.Directory (doesFileExist) import System.OsPath (osp) import Config (ServerConfig (..)) import GTFS (loadGtfs) import Server (application) main :: IO () main = do Right ymlsource <- mkYamlFileSource [osp|./config.yaml|] Right (settings@ServerConfig{..}, origins, warnings) <- runFetchConfig [mkEnvSource "tracktrain", ymlsource] putStrLn "reading configs .." printConfigOrigins origins printConfigWarnings warnings gtfs <- loadGtfs serverConfigGtfs serverConfigZoneinfoPath loggerMiddleware <- mkRequestLogger $ def { outputFormat = Detailed True } runStderrLoggingT $ withPostgresqlPool serverConfigDbString 10 $ \pool -> liftIO $ do app <- application gtfs pool settings putStrLn "starting server …" runSettings serverConfigWarp (loggerMiddleware app)