{-# 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 =
SConf.Config <$> host <*> port <*> node_id_key <*> log_thresh
where
host = Opt.strOption $ mconcat
[ Opt.long "host",
Opt.help "Hostname or address of Gremlin Server",
Opt.metavar "HOSTNAME",
Opt.value "localhost",
Opt.showDefault
]
port = Opt.option Opt.auto $ mconcat
[ Opt.long "port",
Opt.help "Port number of Gremlin Server WebSocket endpoint",
Opt.metavar "PORT",
Opt.value 8182,
Opt.showDefault
]
node_id_key = Opt.strOption $ mconcat
[ Opt.long "node-id-key",
Opt.help "Name of vertex attriute that stores Node ID.",
Opt.metavar "KEY",
Opt.value "@node_id",
Opt.showDefaultWith (unpack . toGremlin)
]
log_thresh = fmap (logLevelFromVerbosity . length) $ many $ Opt.flag' () $ mconcat
[ Opt.short 'v',
Opt.long "verbose",
Opt.help "Verbose log output. Specify multiple times to make it more verbose."
]
logLevelFromVerbosity :: Int -> SConf.LogLevel
logLevelFromVerbosity 2 = SConf.LevelDebug
logLevelFromVerbosity 1 = SConf.LevelInfo
logLevelFromVerbosity _ = SConf.LevelWarn