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
data Config = Config
{ loggingConfig :: Logging.Config
, metricsConfig :: Metrics.Config
, webConfig :: Web.Config
} deriving (Eq, Show)
flags :: Options.Parser Config
flags = Config <$> Logging.flags <*> Metrics.flags <*> Web.flags
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)