diff --git a/cardano-submit-api/src/Cardano/TxSubmit.hs b/cardano-submit-api/src/Cardano/TxSubmit.hs index e3c94c9cf1c..039828ef93a 100644 --- a/cardano-submit-api/src/Cardano/TxSubmit.hs +++ b/cardano-submit-api/src/Cardano/TxSubmit.hs @@ -30,7 +30,7 @@ runTxSubmitWebapi :: TxSubmitNodeParams -> IO () runTxSubmitWebapi tsnp = do tsnc <- readTxSubmitNodeConfig (unConfigFile $ tspConfigFile tsnp) trce <- mkTracer tsnc - (metrics, metricsServer) <- registerMetricsServer + (metrics, metricsServer) <- registerMetricsServer (tspMetricsPort tsnp) txSubmitServer <- Async.async $ runTxSubmitServer trce metrics tspWebserverConfig tspProtocol tspNetworkId tspSocketPath void $ Async.waitAnyCancel diff --git a/cardano-submit-api/src/Cardano/TxSubmit/CLI/Parsers.hs b/cardano-submit-api/src/Cardano/TxSubmit/CLI/Parsers.hs index eedad1af4de..827dc46bbc9 100644 --- a/cardano-submit-api/src/Cardano/TxSubmit/CLI/Parsers.hs +++ b/cardano-submit-api/src/Cardano/TxSubmit/CLI/Parsers.hs @@ -18,6 +18,7 @@ import Cardano.TxSubmit.Rest.Parsers (pWebserverConfig) import Control.Applicative (Alternative (..), Applicative (..), (<**>)) import Data.Function ((.)) import Data.Functor (Functor (fmap), (<$>)) +import Data.Int import Data.Semigroup (Semigroup ((<>))) import Data.Word (Word64) import Options.Applicative (Parser, ParserInfo) @@ -37,6 +38,7 @@ pTxSubmitNodeParams = TxSubmitNodeParams <*> pNetworkId <*> pSocketPath <*> pWebserverConfig 8090 + <*> pMetricsPort 8081 pConfigFile :: Parser ConfigFile pConfigFile = ConfigFile <$> Opt.strOption @@ -122,3 +124,11 @@ pSocketPath = SocketPath <$> Opt.strOption <> Opt.completer (Opt.bashCompleter "file") <> Opt.metavar "FILEPATH" ) + +pMetricsPort :: Int -> Parser Int +pMetricsPort defaultValue = Opt.option Opt.auto + ( Opt.long "metrics-port" + <> Opt.help "Metrics port" + <> Opt.metavar "PORT" + <> Opt.value defaultValue + ) diff --git a/cardano-submit-api/src/Cardano/TxSubmit/CLI/Types.hs b/cardano-submit-api/src/Cardano/TxSubmit/CLI/Types.hs index ae88b79c8ea..79efe68622c 100644 --- a/cardano-submit-api/src/Cardano/TxSubmit/CLI/Types.hs +++ b/cardano-submit-api/src/Cardano/TxSubmit/CLI/Types.hs @@ -7,6 +7,7 @@ module Cardano.TxSubmit.CLI.Types import Cardano.Api (AnyConsensusModeParams, NetworkId (..)) import Cardano.TxSubmit.Rest.Types (WebserverConfig) +import Data.Int import System.IO (FilePath) -- | The product type of all command line arguments @@ -16,6 +17,7 @@ data TxSubmitNodeParams = TxSubmitNodeParams , tspNetworkId :: !NetworkId , tspSocketPath :: !SocketPath , tspWebserverConfig :: !WebserverConfig + , tspMetricsPort :: !Int } newtype ConfigFile = ConfigFile diff --git a/cardano-submit-api/src/Cardano/TxSubmit/Metrics.hs b/cardano-submit-api/src/Cardano/TxSubmit/Metrics.hs index b7aabfd7f19..285f794e370 100644 --- a/cardano-submit-api/src/Cardano/TxSubmit/Metrics.hs +++ b/cardano-submit-api/src/Cardano/TxSubmit/Metrics.hs @@ -11,6 +11,7 @@ import Control.Applicative (Applicative (pure), (<$>)) import Control.Concurrent.Async (Async, async) import Control.Monad.Reader (MonadIO (liftIO), MonadReader (ask), ReaderT (runReaderT)) import Data.Function (($), (.)) +import Data.Int import Data.Monoid (Monoid (mempty)) import System.IO (IO) import System.Metrics.Prometheus.Concurrent.RegistryT (RegistryT (..), registerGauge, @@ -22,12 +23,12 @@ newtype TxSubmitMetrics = TxSubmitMetrics { tsmCount :: Gauge } -registerMetricsServer :: IO (TxSubmitMetrics, Async ()) -registerMetricsServer = +registerMetricsServer :: Int -> IO (TxSubmitMetrics, Async ()) +registerMetricsServer metricsPort = runRegistryT $ do metrics <- makeMetrics registry <- RegistryT ask - server <- liftIO . async $ runReaderT (unRegistryT $ serveMetricsT 8081 []) registry + server <- liftIO . async $ runReaderT (unRegistryT $ serveMetricsT metricsPort []) registry pure (metrics, server) makeMetrics :: RegistryT IO TxSubmitMetrics