summary refs log blame commit diff
path: root/services/tazblog/db/Main.hs
blob: 9523041f109aec3477b4d48971c99a24c0cd989a (plain) (tree)

































                                                                        
-- | 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