{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeOperators #-} module Network.Legion.Discovery.Main ( main, ) where import Canteven.HTTP (requestLogging, logExceptionsAndContinue, setServer) import Canteven.Log.MonadLog (getCantevenOutput) import Control.Monad (void) import Control.Monad.Logger (runLoggingT) import Data.Proxy (Proxy(Proxy)) import Network.Legion (forkLegionary) import Network.Legion.Config (parseArgs) import Network.Legion.Discovery.Api(DiscoveryApi) import Network.Legion.Discovery.Server (discoveryServer) import Network.Legion.Persistence (newMemoryPersistence) import Servant (serve) import qualified Network.Legion.Discovery.Config as C import qualified Network.Wai.Handler.Warp as Warp import qualified Paths_legion_discovery as P import qualified System.Remote.Monitoring as Ekg main :: IO () main = do (settings, startupMode, config) <- parseArgs logging <- getCantevenOutput (C.logging config) void $ Ekg.forkServer "localhost" (C.ekgPort config) persist <- newMemoryPersistence legion <- (`runLoggingT` logging) $ forkLegionary persist settings startupMode Warp.run (C.servicePort config) ( requestLogging logging . setServer "legion-discovery" P.version . logExceptionsAndContinue logging . serve (Proxy :: Proxy DiscoveryApi) . discoveryServer $ legion )