diff options
author | Vincent Ambo <tazjin@google.com> | 2019-06-29T13·02+0100 |
---|---|---|
committer | Vincent Ambo <tazjin@google.com> | 2019-06-29T13·02+0100 |
commit | 207c6dac0c27c70429043b94b5ccd10979489230 (patch) | |
tree | f79bdce9a8683851e648576b47147463d04193c2 /services/tazblog/db/Main.hs | |
parent | b6813682176b8b4a944df94794982e81d2a9414f (diff) | |
parent | 47f2145b5b39b63500fe2d9d0a64edc44edaa793 (diff) |
merge(tazblog): Integrate blog into monorepo r/2
Diffstat (limited to 'services/tazblog/db/Main.hs')
-rw-r--r-- | services/tazblog/db/Main.hs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/services/tazblog/db/Main.hs b/services/tazblog/db/Main.hs new file mode 100644 index 000000000000..9523041f109a --- /dev/null +++ b/services/tazblog/db/Main.hs @@ -0,0 +1,34 @@ +-- | 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 |