module Main (main) where import ATrade (libatrade_gitrev, libatrade_version) import ATrade.Logging (Message (..), Severity (Info), logWith) import ATrade.Logging (fmtMessage) import ATrade.QuoteSource.Server (startQuoteSourceServer, stopQuoteSourceServer) import ATrade.Types (defaultServerSecurityParams) import Colog (LogAction, logTextStdout, (>$<)) import Colog.Actions (logTextHandle) import Config (TransaqConnectorConfig (..), loadConfig) import Control.Concurrent (threadDelay) import Control.Concurrent.BoundedChan (newBoundedChan) import Control.Exception (bracket) import Control.Monad (forever, void) import Control.Monad.IO.Class (MonadIO) import qualified Data.Text as T import Data.Version (showVersion) import Debug.EventCounters (initEventCounters) import Prelude hiding (log) import System.IO (Handle, IOMode (AppendMode), withFile) import System.ZMQ4 (withContext) import qualified TXMLConnector as Connector import Version (transaqConnectorVersionText) mkLogger :: (MonadIO m) => Handle -> LogAction m Message mkLogger h = fmtMessage >$< (logTextStdout <> logTextHandle h) main :: IO () main = do initEventCounters cfg <- loadConfig "transaq-connector.dhall" withFile "transaq-connector.log" AppendMode $ \logH -> do let logger = mkLogger logH let log = logWith logger log Info "main" $ "Starting transaq-connector-" <> transaqConnectorVersionText <> "; libatrade-" <> (T.pack . showVersion) libatrade_version <> "(" <> T.pack libatrade_gitrev <> ")" void $ withContext $ \ctx -> do qssChannel <- newBoundedChan 50000 bracket (startQuoteSourceServer qssChannel ctx (quotesourceEndpoint cfg) defaultServerSecurityParams) stopQuoteSourceServer $ \_ -> do _ <- Connector.start logger cfg qssChannel forever $ threadDelay 1000000 log Info "main" "Shutting down"