Market Data Storage Server
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.2 KiB

8 years ago
9 years ago
module Main where
6 years ago
import Data.Aeson
import qualified Data.ByteString.Lazy as BL
import qualified Data.Text as T
8 years ago
6 years ago
import ATrade.MDS.Database
import ATrade.MDS.HistoryServer
8 years ago
6 years ago
import Control.Concurrent
import Control.Monad
import System.IO
6 years ago
import System.Log.Formatter
import System.Log.Handler (setFormatter)
import System.Log.Handler.Simple
import System.Log.Logger
import System.ZMQ4
8 years ago
data MdsConfig = MdsConfig {
6 years ago
cfgDbPath :: T.Text,
cfgDbName :: T.Text,
cfgDbAccount :: T.Text,
cfgDbPassword :: T.Text,
8 years ago
cfgQHPEndpoint :: T.Text,
cfgHAPEndpoint :: T.Text
} deriving (Show, Eq)
9 years ago
8 years ago
instance FromJSON MdsConfig where
parseJSON = withObject "Cfg" $ \v ->
MdsConfig <$>
v .: "path" <*>
v .: "name" <*>
v .: "account" <*>
v .: "password" <*>
v .: "qhp_endpoint" <*>
v .: "hap_endpoint"
6 years ago
initLogging :: IO ()
initLogging = do
handler <- fileHandler "mds.log" DEBUG >>=
(\x -> return $
setFormatter x (simpleLogFormatter "$utcTime\t {$loggername} <$prio> -> $msg"))
stderrHandler <- streamHandler stderr DEBUG >>=
(\x -> return $
setFormatter x (simpleLogFormatter "$utcTime\t {$loggername} <$prio> -> $msg"))
6 years ago
hSetBuffering stderr LineBuffering
6 years ago
updateGlobalLogger rootLoggerName (setLevel DEBUG)
updateGlobalLogger rootLoggerName (setHandlers [handler, stderrHandler])
6 years ago
8 years ago
getConfig :: IO MdsConfig
getConfig = do
rawCfg <- BL.readFile "mds.conf"
case eitherDecode' rawCfg of
6 years ago
Left err -> error err
8 years ago
Right cfg -> return cfg
6 years ago
9 years ago
main :: IO ()
8 years ago
main = do
6 years ago
initLogging
6 years ago
infoM "main" "Initializing MDS"
8 years ago
cfg <- getConfig
6 years ago
infoM "main" "Config OK"
8 years ago
let dbConfig = DatabaseConfig { dbPath = cfgDbPath cfg,
dbDatabase = cfgDbName cfg,
dbUser = cfgDbAccount cfg,
dbPassword = cfgDbPassword cfg }
db <- initDatabase dbConfig
6 years ago
infoM "main" "DB initialized"
8 years ago
let hsConfig = HistoryServerConfig {
hspQHPEndpoint = cfgQHPEndpoint cfg,
hspHAPEndpoint = cfgHAPEndpoint cfg }
6 years ago
infoM "main" "Starting history server"
8 years ago
withContext $ \ctx -> do
_ <- startHistoryServer hsConfig db ctx
forever $ threadDelay 1000000