35 lines
1.1 KiB
Haskell
35 lines
1.1 KiB
Haskell
|
-- | Main module for the database server
|
||
|
module Main where
|
||
|
|
||
|
import BlogDB (initialBlogState)
|
||
|
import Control.Applicative (pure, (<$>), (<*>))
|
||
|
import Control.Exception (bracket)
|
||
|
import Data.Acid
|
||
|
import Data.Acid.Local (createCheckpointAndClose)
|
||
|
import Data.Acid.Remote
|
||
|
import Data.Word
|
||
|
import Network (PortID (..))
|
||
|
import Options
|
||
|
|
||
|
data DBOptions = DBOptions {
|
||
|
dbPort :: Word16,
|
||
|
stateDirectory :: String
|
||
|
}
|
||
|
|
||
|
instance Options DBOptions where
|
||
|
defineOptions = pure DBOptions
|
||
|
<*> simpleOption "dbport" 8070
|
||
|
"Port to serve acid-state on remotely."
|
||
|
<*> simpleOption "state" "/var/tazblog/state"
|
||
|
"Directory in which the acid-state is located."
|
||
|
|
||
|
main :: IO ()
|
||
|
main = do
|
||
|
putStrLn ("Launching TazBlog database server ...")
|
||
|
runCommand $ \opts args ->
|
||
|
bracket (openState opts) createCheckpointAndClose
|
||
|
(acidServer skipAuthenticationCheck $ getPort opts)
|
||
|
where
|
||
|
openState o = openLocalStateFrom (stateDirectory o) initialBlogState
|
||
|
getPort = PortNumber . fromIntegral . dbPort
|