module JmlSvc ( Config(..) , flags , run ) where import Protolude import qualified Network.Wai as Wai import qualified Options.Applicative as Options import qualified JmlSvc.Logging as Logging import qualified JmlSvc.Metrics as Metrics import qualified JmlSvc.Web as Web -- | Generic web server configuration. data Config = Config { loggingConfig :: Logging.Config , metricsConfig :: Metrics.Config , webConfig :: Web.Config } deriving (Eq, Show) -- | Command-line flags for generating 'Config'. flags :: Options.Parser Config flags = Config <$> Logging.flags <*> Metrics.flags <*> Web.flags -- | Run a web server for 'app'. Blocks until the server is shut down. run :: MonadIO io => Text -> Config -> Wai.Application -> io () run appName Config {..} app = Logging.run loggingConfig $ do prometheus <- Metrics.prometheus appName metricsConfig Web.run webConfig (prometheus app)