Add support for --quiet and --verbose options
This commit is contained in:
parent
39945d0743
commit
8e9c9198fe
@ -57,6 +57,7 @@ executable nix-serve-ng
|
|||||||
, optparse-applicative
|
, optparse-applicative
|
||||||
, vector
|
, vector
|
||||||
, wai
|
, wai
|
||||||
|
, wai-extra
|
||||||
, warp
|
, warp
|
||||||
, warp-tls
|
, warp-tls
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{ mkDerivation, base, bsd-sysctl, bytestring, http-types, lib
|
{ mkDerivation, base, bsd-sysctl, bytestring, http-types, lib
|
||||||
, managed, megaparsec, mtl, network, nixstore, nixutil
|
, managed, megaparsec, mtl, network, nixstore, nixutil
|
||||||
, optparse-applicative, vector, wai, warp, warp-tls
|
, optparse-applicative, vector, wai, wai-extra, warp, warp-tls
|
||||||
}:
|
}:
|
||||||
mkDerivation {
|
mkDerivation {
|
||||||
pname = "nix-serve-ng";
|
pname = "nix-serve-ng";
|
||||||
@ -10,7 +10,7 @@ mkDerivation {
|
|||||||
isExecutable = true;
|
isExecutable = true;
|
||||||
executableHaskellDepends = [
|
executableHaskellDepends = [
|
||||||
base bsd-sysctl bytestring http-types managed megaparsec mtl
|
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 ];
|
executableSystemDepends = [ nixstore nixutil ];
|
||||||
description = "A drop-in replacement for nix-serve that's faster and more stable";
|
description = "A drop-in replacement for nix-serve that's faster and more stable";
|
||||||
|
|||||||
42
src/Main.hs
42
src/Main.hs
@ -12,25 +12,26 @@ import Data.Function ((&))
|
|||||||
import Network.Socket (SockAddr(..))
|
import Network.Socket (SockAddr(..))
|
||||||
import Network.Wai (Application)
|
import Network.Wai (Application)
|
||||||
import Nix (PathInfo(..))
|
import Nix (PathInfo(..))
|
||||||
import Options (Options(..), Socket(..), SSL(..))
|
import Options (Options(..), Socket(..), SSL(..), Verbosity(..))
|
||||||
import Sysctl (_SO_MAX_CONN)
|
import Sysctl (_SO_MAX_CONN)
|
||||||
|
|
||||||
import qualified Control.Monad as Monad
|
import qualified Control.Monad as Monad
|
||||||
import qualified Control.Monad.Except as Except
|
import qualified Control.Monad.Except as Except
|
||||||
import qualified Data.ByteString as ByteString
|
import qualified Data.ByteString as ByteString
|
||||||
import qualified Data.ByteString.Builder as Builder
|
import qualified Data.ByteString.Builder as Builder
|
||||||
import qualified Data.ByteString.Lazy as ByteString.Lazy
|
import qualified Data.ByteString.Lazy as ByteString.Lazy
|
||||||
import qualified Data.Vector as Vector
|
import qualified Data.Vector as Vector
|
||||||
import qualified Data.Void as Void
|
import qualified Data.Void as Void
|
||||||
import qualified Network.HTTP.Types as Types
|
import qualified Network.HTTP.Types as Types
|
||||||
import qualified Network.Socket as Socket
|
import qualified Network.Socket as Socket
|
||||||
import qualified Network.Wai as Wai
|
import qualified Network.Wai as Wai
|
||||||
import qualified Network.Wai.Handler.Warp as Warp
|
import qualified Network.Wai.Handler.Warp as Warp
|
||||||
import qualified Network.Wai.Handler.WarpTLS as WarpTLS
|
import qualified Network.Wai.Handler.WarpTLS as WarpTLS
|
||||||
|
import qualified Network.Wai.Middleware.RequestLogger as RequestLogger
|
||||||
import qualified Nix
|
import qualified Nix
|
||||||
import qualified Options
|
import qualified Options
|
||||||
import qualified Options.Applicative as Options
|
import qualified Options.Applicative as Options
|
||||||
import qualified System.BSD.Sysctl as Sysctl
|
import qualified System.BSD.Sysctl as Sysctl
|
||||||
|
|
||||||
makeApplication :: Integer -> ByteString -> Application
|
makeApplication :: Integer -> ByteString -> Application
|
||||||
makeApplication priority storeDirectory request respond = do
|
makeApplication priority storeDirectory request respond = do
|
||||||
@ -198,11 +199,18 @@ toSocket path = do
|
|||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
options@Options{ priority } <- Options.execParser Options.parserInfo
|
options@Options{ priority, verbosity } <- do
|
||||||
|
Options.execParser Options.parserInfo
|
||||||
|
|
||||||
storeDirectory <- Nix.getStoreDir
|
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
|
case options of
|
||||||
Options{ ssl = Disabled, socket = TCP{ host, port } } -> do
|
Options{ ssl = Disabled, socket = TCP{ host, port } } -> do
|
||||||
|
|||||||
@ -22,10 +22,13 @@ data Socket
|
|||||||
|
|
||||||
data SSL = Disabled | Enabled { cert :: FilePath, key :: FilePath }
|
data SSL = Disabled | Enabled { cert :: FilePath, key :: FilePath }
|
||||||
|
|
||||||
|
data Verbosity = Quiet | Normal | Verbose
|
||||||
|
|
||||||
data Options = Options
|
data Options = Options
|
||||||
{ priority :: Integer
|
{ priority :: Integer
|
||||||
, socket :: Socket
|
, socket :: Socket
|
||||||
, ssl :: SSL
|
, ssl :: SSL
|
||||||
|
, verbosity :: Verbosity
|
||||||
}
|
}
|
||||||
|
|
||||||
parseCert :: Parser FilePath
|
parseCert :: Parser FilePath
|
||||||
@ -114,6 +117,18 @@ parsePriority =
|
|||||||
<> Options.value 30
|
<> 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 :: Parser Options
|
||||||
parseOptions = do
|
parseOptions = do
|
||||||
socket <- parseTcp <|> parseUnix
|
socket <- parseTcp <|> parseUnix
|
||||||
@ -122,6 +137,8 @@ parseOptions = do
|
|||||||
|
|
||||||
priority <- parsePriority
|
priority <- parsePriority
|
||||||
|
|
||||||
|
verbosity <- parseVerbosity
|
||||||
|
|
||||||
return Options{..}
|
return Options{..}
|
||||||
|
|
||||||
parseReader :: Parsec Void String a -> ReadM a
|
parseReader :: Parsec Void String a -> ReadM a
|
||||||
@ -167,6 +184,8 @@ parseListen = do
|
|||||||
|
|
||||||
priority <- parsePriority
|
priority <- parsePriority
|
||||||
|
|
||||||
|
verbosity <- parseVerbosity
|
||||||
|
|
||||||
return Options{..}
|
return Options{..}
|
||||||
|
|
||||||
parserInfo :: ParserInfo Options
|
parserInfo :: ParserInfo Options
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user