packages feed

wikimusic-ssr-1.0.1.6: src/WikiMusic/SSR/Boot.hs

{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}

module WikiMusic.SSR.Boot (boot) where

import Network.Wai.Handler.Warp
import Network.Wai.Logger (ApacheLogger, withStdoutLogger)
import Principium
import Prometheus qualified as P
import Prometheus.Metric.GHC qualified as P
import WikiMusic.SSR.Config
import WikiMusic.SSR.Servant.ApiSetup

boot :: (MonadIO m) => m ()
boot = liftIO $ withStdoutLogger $ \logger' ->
  ( do
      _ <- liftIO $ P.register P.ghcMetrics
      args <- liftIO getArgs
      maybeCfg <- readConfig (cfg args)
      liftIO $ either crashWithBadConfig (startWikiMusicSSR logger') maybeCfg
  )
  where
    crashWithBadConfig e = error ("Bad config could not be parsed! " <> show e)
    cfg args = case nonEmpty args of
      Just (x :| []) -> packText x
      _ -> "resources/config/run-local.toml"

startWikiMusicSSR :: (MonadIO m) => ApacheLogger -> AppConfig -> m ()
startWikiMusicSSR logger' cfg = do
  liftIO . putTextLn $ "Starting WikiMusic SSR..."
  app <- liftIO $ mkApp logger' cfg
  liftIO $ runSettings apiSettings app
  where
    apiSettings = setPort (cfg ^. #servant % #port) defaultSettings