Merge pull request #89 from begriffs/release
cleanup connections on close.
This commit is contained in:
+17
-11
@@ -9,13 +9,14 @@ import Data.String.Conversions (cs)
|
|||||||
|
|
||||||
import Control.Monad (unless)
|
import Control.Monad (unless)
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
|
import Control.Exception(bracket)
|
||||||
import Options.Applicative hiding (columns)
|
import Options.Applicative hiding (columns)
|
||||||
import Network.Wai.Middleware.Gzip (gzip, def)
|
import Network.Wai.Middleware.Gzip (gzip, def)
|
||||||
import Network.Wai.Middleware.Cors (cors)
|
import Network.Wai.Middleware.Cors (cors)
|
||||||
import Network.Wai.Middleware.Static (staticPolicy, only)
|
import Network.Wai.Middleware.Static (staticPolicy, only)
|
||||||
import Database.HDBC (disconnect)
|
import Database.HDBC (disconnect)
|
||||||
import Database.HDBC.PostgreSQL(connectPostgreSQL')
|
import Database.HDBC.PostgreSQL(connectPostgreSQL')
|
||||||
import Data.Pool(createPool)
|
import Data.Pool(createPool, destroyAllResources)
|
||||||
|
|
||||||
argParser :: Parser AppConfig
|
argParser :: Parser AppConfig
|
||||||
argParser = AppConfig
|
argParser = AppConfig
|
||||||
@@ -33,17 +34,22 @@ argParser = AppConfig
|
|||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
conf <- execParser (info (helper <*> argParser) describe)
|
conf <- execParser (info (helper <*> argParser) describe)
|
||||||
pool <- createPool (connectPostgreSQL' (configDbUri conf)) disconnect 1 600 (configPool conf)
|
bracket
|
||||||
let port = configPort conf
|
(createPool (connectPostgreSQL' (configDbUri conf))
|
||||||
|
disconnect 1 600 (configPool conf))
|
||||||
|
destroyAllResources
|
||||||
|
(\pool -> do
|
||||||
|
let port = configPort conf
|
||||||
|
|
||||||
unless (configSecure conf) $
|
unless (configSecure conf) $
|
||||||
putStrLn "WARNING, running in insecure mode, auth will be in plaintext"
|
putStrLn "WARNING, running in insecure mode, auth will be in plaintext"
|
||||||
|
|
||||||
Prelude.putStrLn $ "Listening on port " ++ (show $ configPort conf :: String)
|
Prelude.putStrLn $ "Listening on port " ++ (show $ configPort conf :: String)
|
||||||
run port $ (if configSecure conf then redirectInsecure else id)
|
run port $ (if configSecure conf then redirectInsecure else id)
|
||||||
. gzip def . cors corsPolicy . clientErrors
|
. gzip def . cors corsPolicy . clientErrors
|
||||||
. staticPolicy (only [("favicon.ico", "static/favicon.ico")])
|
. staticPolicy (only [("favicon.ico", "static/favicon.ico")])
|
||||||
. withDBConnection pool . inTransaction
|
. withDBConnection pool . inTransaction
|
||||||
. authenticated (cs $ configAnonRole conf) . withSavepoint $ app
|
. authenticated (cs $ configAnonRole conf) . withSavepoint $ app
|
||||||
|
)
|
||||||
where
|
where
|
||||||
describe = progDesc "create a REST API to an existing Postgres database"
|
describe = progDesc "create a REST API to an existing Postgres database"
|
||||||
|
|||||||
Reference in New Issue
Block a user