{-# LANGUAGE OverloadedStrings #-}
module MetricsServer where

import           Data.Function                     ((&))
import           Data.Monoid                       ((<>))
import qualified Data.Text                         as Text
import qualified Network.Wai.Handler.Warp          as Warp
import qualified Network.Wai.Middleware.Prometheus as PrometheusWai

import           Config                            (MetricsConfig (..))
import           Logger                            (Logger, LogLevel(..), postLog)

metricsServerConfig :: MetricsConfig -> Warp.Settings
metricsServerConfig config = Warp.defaultSettings
  & Warp.setHost (metricsConfigHost config)
  & Warp.setPort (metricsConfigPort config)

runMetricsServer :: Logger -> MetricsConfig -> IO ()
runMetricsServer logger metricsConfig = do
  Logger.postLog logger LogInfo $ "Metrics provided on "
    <> (Text.pack $ show $ metricsConfigHost metricsConfig)
    <> ":"
    <> (Text.pack $ show $ metricsConfigPort metricsConfig)
  Warp.runSettings (metricsServerConfig metricsConfig) PrometheusWai.metricsApp