{-# LANGUAGE OverloadedStrings, StrictData #-}
module NetSpider.CLI.Spider
( parserSpiderConfig,
SpiderConfig
) where
import Control.Applicative ((<$>), (<*>), many, pure)
import Data.Greskell.Greskell (toGremlin)
import Data.Monoid (mconcat)
import Data.Text (unpack)
import qualified NetSpider.Spider.Config as SConf
import qualified NetSpider.Spider as Sp
import qualified Options.Applicative as Opt
type SpiderConfig = SConf.Config
parserSpiderConfig :: Opt.Parser (SpiderConfig n na fla)
parserSpiderConfig :: Parser (SpiderConfig n na fla)
parserSpiderConfig =
Host -> Port -> Key VNode n -> LogLevel -> SpiderConfig n na fla
forall n na fla.
Host -> Port -> Key VNode n -> LogLevel -> Config n na fla
SConf.Config (Host -> Port -> Key VNode n -> LogLevel -> SpiderConfig n na fla)
-> Parser Host
-> Parser
(Port -> Key VNode n -> LogLevel -> SpiderConfig n na fla)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Host
host Parser (Port -> Key VNode n -> LogLevel -> SpiderConfig n na fla)
-> Parser Port
-> Parser (Key VNode n -> LogLevel -> SpiderConfig n na fla)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Port
port Parser (Key VNode n -> LogLevel -> SpiderConfig n na fla)
-> Parser (Key VNode n)
-> Parser (LogLevel -> SpiderConfig n na fla)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Key VNode n)
node_id_key Parser (LogLevel -> SpiderConfig n na fla)
-> Parser LogLevel -> Parser (SpiderConfig n na fla)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser LogLevel
log_thresh
where
host :: Parser Host
host = Mod OptionFields Host -> Parser Host
forall s. IsString s => Mod OptionFields s -> Parser s
Opt.strOption (Mod OptionFields Host -> Parser Host)
-> Mod OptionFields Host -> Parser Host
forall a b. (a -> b) -> a -> b
$ [Mod OptionFields Host] -> Mod OptionFields Host
forall a. Monoid a => [a] -> a
mconcat
[ Host -> Mod OptionFields Host
forall (f :: * -> *) a. HasName f => Host -> Mod f a
Opt.long Host
"host",
Host -> Mod OptionFields Host
forall (f :: * -> *) a. Host -> Mod f a
Opt.help Host
"Hostname or address of Gremlin Server",
Host -> Mod OptionFields Host
forall (f :: * -> *) a. HasMetavar f => Host -> Mod f a
Opt.metavar Host
"HOSTNAME",
Host -> Mod OptionFields Host
forall (f :: * -> *) a. HasValue f => a -> Mod f a
Opt.value Host
"localhost",
Mod OptionFields Host
forall a (f :: * -> *). Show a => Mod f a
Opt.showDefault
]
port :: Parser Port
port = ReadM Port -> Mod OptionFields Port -> Parser Port
forall a. ReadM a -> Mod OptionFields a -> Parser a
Opt.option ReadM Port
forall a. Read a => ReadM a
Opt.auto (Mod OptionFields Port -> Parser Port)
-> Mod OptionFields Port -> Parser Port
forall a b. (a -> b) -> a -> b
$ [Mod OptionFields Port] -> Mod OptionFields Port
forall a. Monoid a => [a] -> a
mconcat
[ Host -> Mod OptionFields Port
forall (f :: * -> *) a. HasName f => Host -> Mod f a
Opt.long Host
"port",
Host -> Mod OptionFields Port
forall (f :: * -> *) a. Host -> Mod f a
Opt.help Host
"Port number of Gremlin Server WebSocket endpoint",
Host -> Mod OptionFields Port
forall (f :: * -> *) a. HasMetavar f => Host -> Mod f a
Opt.metavar Host
"PORT",
Port -> Mod OptionFields Port
forall (f :: * -> *) a. HasValue f => a -> Mod f a
Opt.value Port
8182,
Mod OptionFields Port
forall a (f :: * -> *). Show a => Mod f a
Opt.showDefault
]
node_id_key :: Parser (Key VNode n)
node_id_key = Mod OptionFields (Key VNode n) -> Parser (Key VNode n)
forall s. IsString s => Mod OptionFields s -> Parser s
Opt.strOption (Mod OptionFields (Key VNode n) -> Parser (Key VNode n))
-> Mod OptionFields (Key VNode n) -> Parser (Key VNode n)
forall a b. (a -> b) -> a -> b
$ [Mod OptionFields (Key VNode n)] -> Mod OptionFields (Key VNode n)
forall a. Monoid a => [a] -> a
mconcat
[ Host -> Mod OptionFields (Key VNode n)
forall (f :: * -> *) a. HasName f => Host -> Mod f a
Opt.long Host
"node-id-key",
Host -> Mod OptionFields (Key VNode n)
forall (f :: * -> *) a. Host -> Mod f a
Opt.help Host
"Name of vertex attriute that stores Node ID.",
Host -> Mod OptionFields (Key VNode n)
forall (f :: * -> *) a. HasMetavar f => Host -> Mod f a
Opt.metavar Host
"KEY",
Key VNode n -> Mod OptionFields (Key VNode n)
forall (f :: * -> *) a. HasValue f => a -> Mod f a
Opt.value Key VNode n
"@node_id",
(Key VNode n -> Host) -> Mod OptionFields (Key VNode n)
forall a (f :: * -> *). (a -> Host) -> Mod f a
Opt.showDefaultWith (Text -> Host
unpack (Text -> Host) -> (Key VNode n -> Text) -> Key VNode n -> Host
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key VNode n -> Text
forall a. ToGreskell a => a -> Text
toGremlin)
]
log_thresh :: Parser LogLevel
log_thresh = ([()] -> LogLevel) -> Parser [()] -> Parser LogLevel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Port -> LogLevel
logLevelFromVerbosity (Port -> LogLevel) -> ([()] -> Port) -> [()] -> LogLevel
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [()] -> Port
forall (t :: * -> *) a. Foldable t => t a -> Port
length) (Parser [()] -> Parser LogLevel) -> Parser [()] -> Parser LogLevel
forall a b. (a -> b) -> a -> b
$ Parser () -> Parser [()]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (Parser () -> Parser [()]) -> Parser () -> Parser [()]
forall a b. (a -> b) -> a -> b
$ () -> Mod FlagFields () -> Parser ()
forall a. a -> Mod FlagFields a -> Parser a
Opt.flag' () (Mod FlagFields () -> Parser ()) -> Mod FlagFields () -> Parser ()
forall a b. (a -> b) -> a -> b
$ [Mod FlagFields ()] -> Mod FlagFields ()
forall a. Monoid a => [a] -> a
mconcat
[ Char -> Mod FlagFields ()
forall (f :: * -> *) a. HasName f => Char -> Mod f a
Opt.short Char
'v',
Host -> Mod FlagFields ()
forall (f :: * -> *) a. HasName f => Host -> Mod f a
Opt.long Host
"verbose",
Host -> Mod FlagFields ()
forall (f :: * -> *) a. Host -> Mod f a
Opt.help Host
"Verbose log output. Specify multiple times to make it more verbose."
]
logLevelFromVerbosity :: Int -> SConf.LogLevel
logLevelFromVerbosity :: Port -> LogLevel
logLevelFromVerbosity Port
2 = LogLevel
SConf.LevelDebug
logLevelFromVerbosity Port
1 = LogLevel
SConf.LevelInfo
logLevelFromVerbosity Port
_ = LogLevel
SConf.LevelWarn