Add support for --quiet and --verbose options

This commit is contained in:
Gabriella Gonzalez 2022-06-15 12:44:21 -07:00
parent 39945d0743
commit 8e9c9198fe
4 changed files with 50 additions and 22 deletions

View File

@ -57,6 +57,7 @@ executable nix-serve-ng
, optparse-applicative
, vector
, wai
, wai-extra
, warp
, warp-tls

View File

@ -1,6 +1,6 @@
{ mkDerivation, base, bsd-sysctl, bytestring, http-types, lib
, managed, megaparsec, mtl, network, nixstore, nixutil
, optparse-applicative, vector, wai, warp, warp-tls
, optparse-applicative, vector, wai, wai-extra, warp, warp-tls
}:
mkDerivation {
pname = "nix-serve-ng";
@ -10,7 +10,7 @@ mkDerivation {
isExecutable = true;
executableHaskellDepends = [
base bsd-sysctl bytestring http-types managed megaparsec mtl
network optparse-applicative vector wai warp warp-tls
network optparse-applicative vector wai wai-extra warp warp-tls
];
executableSystemDepends = [ nixstore nixutil ];
description = "A drop-in replacement for nix-serve that's faster and more stable";

View File

@ -12,25 +12,26 @@ import Data.Function ((&))
import Network.Socket (SockAddr(..))
import Network.Wai (Application)
import Nix (PathInfo(..))
import Options (Options(..), Socket(..), SSL(..))
import Options (Options(..), Socket(..), SSL(..), Verbosity(..))
import Sysctl (_SO_MAX_CONN)
import qualified Control.Monad as Monad
import qualified Control.Monad.Except as Except
import qualified Data.ByteString as ByteString
import qualified Data.ByteString.Builder as Builder
import qualified Data.ByteString.Lazy as ByteString.Lazy
import qualified Data.Vector as Vector
import qualified Data.Void as Void
import qualified Network.HTTP.Types as Types
import qualified Network.Socket as Socket
import qualified Network.Wai as Wai
import qualified Network.Wai.Handler.Warp as Warp
import qualified Network.Wai.Handler.WarpTLS as WarpTLS
import qualified Control.Monad as Monad
import qualified Control.Monad.Except as Except
import qualified Data.ByteString as ByteString
import qualified Data.ByteString.Builder as Builder
import qualified Data.ByteString.Lazy as ByteString.Lazy
import qualified Data.Vector as Vector
import qualified Data.Void as Void
import qualified Network.HTTP.Types as Types
import qualified Network.Socket as Socket
import qualified Network.Wai as Wai
import qualified Network.Wai.Handler.Warp as Warp
import qualified Network.Wai.Handler.WarpTLS as WarpTLS
import qualified Network.Wai.Middleware.RequestLogger as RequestLogger
import qualified Nix
import qualified Options
import qualified Options.Applicative as Options
import qualified System.BSD.Sysctl as Sysctl
import qualified Options.Applicative as Options
import qualified System.BSD.Sysctl as Sysctl
makeApplication :: Integer -> ByteString -> Application
makeApplication priority storeDirectory request respond = do
@ -198,11 +199,18 @@ toSocket path = do
main :: IO ()
main = do
options@Options{ priority } <- Options.execParser Options.parserInfo
options@Options{ priority, verbosity } <- do
Options.execParser Options.parserInfo
storeDirectory <- Nix.getStoreDir
let application = makeApplication priority storeDirectory
let logger =
case verbosity of
Quiet -> id
Normal -> RequestLogger.logStdout
Verbose -> RequestLogger.logStdoutDev
let application = logger (makeApplication priority storeDirectory)
case options of
Options{ ssl = Disabled, socket = TCP{ host, port } } -> do

View File

@ -22,10 +22,13 @@ data Socket
data SSL = Disabled | Enabled { cert :: FilePath, key :: FilePath }
data Verbosity = Quiet | Normal | Verbose
data Options = Options
{ priority :: Integer
, socket :: Socket
, ssl :: SSL
{ priority :: Integer
, socket :: Socket
, ssl :: SSL
, verbosity :: Verbosity
}
parseCert :: Parser FilePath
@ -114,6 +117,18 @@ parsePriority =
<> Options.value 30
)
parseVerbosity :: Parser Verbosity
parseVerbosity =
Options.flag' Quiet
( Options.long "quiet"
<> Options.help "Disable logging"
)
<|> Options.flag' Verbose
( Options.long "verbose"
<> Options.help "Log verbosely"
)
<|> pure Normal
parseOptions :: Parser Options
parseOptions = do
socket <- parseTcp <|> parseUnix
@ -122,6 +137,8 @@ parseOptions = do
priority <- parsePriority
verbosity <- parseVerbosity
return Options{..}
parseReader :: Parsec Void String a -> ReadM a
@ -167,6 +184,8 @@ parseListen = do
priority <- parsePriority
verbosity <- parseVerbosity
return Options{..}
parserInfo :: ParserInfo Options