{- Copyright (c) Meta Platforms, Inc. and affiliates. All rights reserved. This source code is licensed under the BSD-style license found in the LICENSE file in the root directory of this source tree. -} {-# LANGUAGE ApplicativeDo #-} module Glean.Glass.Options ( options , configParser ) where import Options.Applicative import Data.Text (Text) import TextShow import Control.Trace import qualified Haxl.Core as Haxl import qualified Glean.LocalOrRemote as Glean import Glean.Util.Some (Some(..)) import Util.Time import qualified Glean.Glass.Env as Glass import qualified Glean.Glass.Config as Glass import Glean.Glass.SnapshotBackend import Glean.Glass.SourceControl import Glean.Glass.Config (defaultWelcomeMessage) options :: TextShow a => Parser (Glass.Config a -> Glass.Config a) -> ParserInfo (Glass.Config a) options mod = info (helper <*> mod <*> configParser) fullDesc configParser :: TextShow a => Parser (Glass.Config a) configParser = do gleanService <- Glean.options listenPort <- portParser serviceName <- serviceNameParser refreshFreq <- refreshFreqParser listDatabasesRetry <- listDatabasesRetryParser numWorkerThreads <- workerThreadsParser snapshotBackend <- pure $ pure $ pure $ Some NilSnapshotBackend sourceControl <- pure (const (return (Some NilSourceControl))) haxlState <- pure (const (return Haxl.stateEmpty)) allocationLimit <- pure (return Nothing) tracer <- tracerParser return $ Glass.Config{ configKey = Glass.defaultConfigKey, welcomeMessage = pure (pure . defaultWelcomeMessage), useSnapshotsForSymbolsList = pure True, ..} portParser :: Parser Int portParser = option auto $ mconcat [ long "port" , short 'p' , help "Default port to listen on" , value Glass.defaultPort ] refreshFreqParser :: Parser DiffTimePoints refreshFreqParser = option (minutes <$> auto) $ mconcat [ long "refresh" , help "Default update frequency for latest repos (minutes)" , value Glass.defaultRefreshFreq ] listDatabasesRetryParser :: Parser (Maybe Int) listDatabasesRetryParser = optional $ option auto $ mconcat [ long "list-databases-retry" , help "Default retry attempts for listing databases" , value Glass.defaultListDatabasesRetry ] serviceNameParser :: Parser Text serviceNameParser = option auto $ mconcat [ long "service-name" , help "Override service name for fb303 etc" , value Glass.defaultServiceName ] workerThreadsParser :: Parser (Maybe Int) workerThreadsParser = optional $ option auto $ mconcat [ long "worker-threads" , help "Number of worker threads (defaults to the number of cores)" ] tracerParser :: TextShow a => Parser (Tracer a) tracerParser = flag mempty (vlogShowTracer $ const 0) $ mconcat [ long "trace-to-vlog" , help "Sends telemetry traces to vlog" ]