package org.batfish.client;
import java.nio.file.Path;
import java.util.Collections;
import java.util.List;
import org.batfish.client.config.ConfigurationLocator;
import org.batfish.common.BaseSettings;
import org.batfish.common.BatfishLogger;
import org.batfish.common.BfConsts;
import org.batfish.common.CoordConsts;
import org.batfish.common.util.CommonUtil;
public class Settings extends BaseSettings {
public enum RunMode {
batch,
gendatamodel,
genquestions,
interactive
}
private static final String ARG_API_KEY = "apikey";
public static final String ARG_BATFISH_LOG_LEVEL = "batfishloglevel";
public static final String ARG_COMMAND_FILE = "cmdfile";
public static final String ARG_CONTAINER_ID = "containerid";
public static final String ARG_COORDINATOR_HOST = "coordinatorhost";
public static final String ARG_DATAMODEL_DIR = "datamodeldir";
private static final String ARG_DISABLE_SSL = "disablessl";
private static final String ARG_HELP = "help";
public static final String ARG_LOG_FILE = "logfile";
public static final String ARG_LOG_LEVEL = "loglevel";
private static final String ARG_NO_SANITY_CHECK = "nosanitycheck";
private static final String ARG_PERIOD_CHECK_WORK = "periodcheckworkms";
private static final String ARG_PRETTY_PRINT_ANSWERS = "prettyanswers";
public static final String ARG_QUESTIONS_DIR = "questionsdir";
public static final String ARG_RUN_MODE = "runmode";
private static final String ARG_SERVICE_POOL_PORT = "coordinatorpoolport";
private static final String ARG_SERVICE_WORK_PORT = "coordinatorworkport";
public static final String ARG_TESTRIG_DIR = "testrigdir";
public static final String ARG_TESTRIG_ID = "testrigid";
private static final String ARG_TRUST_ALL_SSL_CERTS = "trustallsslcerts";
private static final String EXECUTABLE_NAME = "batfish_client";
private String _apiKey;
private String _batchCommandFile;
private String _batfishLogLevel;
private String _containerId;
private String _coordinatorHost;
private int _coordinatorPoolPort;
private int _coordinatorWorkPort;
private String _datamodelDir;
private String _logFile;
private String _logLevel;
private long _periodCheckWorkMs;
private List<Path> _pluginDirs;
private boolean _prettyPrintAnswers;
private String _questionsDir;
private RunMode _runMode;
private boolean _sanityCheck;
private String _testrigDir;
private String _testrigId;
private boolean _trustAllSslCerts;
private boolean _useSsl;
public Settings(String[] args) throws Exception {
super(CommonUtil.getConfigProperties(ConfigurationLocator.class,
BfConsts.RELPATH_CONFIG_FILE_NAME_CLIENT));
initConfigDefaults();
initOptions();
parseCommandLine(args);
}
public String getApiKey() {
return _apiKey;
}
public String getBatchCommandFile() {
return _batchCommandFile;
}
public String getBatfishLogLevel() {
return _batfishLogLevel;
}
public String getContainerId() {
return _containerId;
}
public String getCoordinatorHost() {
return _coordinatorHost;
}
public int getCoordinatorPoolPort() {
return _coordinatorPoolPort;
}
public int getCoordinatorWorkPort() {
return _coordinatorWorkPort;
}
public String getDatamodelDir() {
return _datamodelDir;
}
public String getLogFile() {
return _logFile;
}
public String getLogLevel() {
return _logLevel;
}
public long getPeriodCheckWorkMs() {
return _periodCheckWorkMs;
}
public List<Path> getPluginDirs() {
return _pluginDirs;
}
public boolean getPrettyPrintAnswers() {
return _prettyPrintAnswers;
}
public String getQuestionsDir() {
return _questionsDir;
}
public RunMode getRunMode() {
return _runMode;
}
public boolean getSanityCheck() {
return _sanityCheck;
}
public String getTestrigDir() {
return _testrigDir;
}
public String getTestrigId() {
return _testrigId;
}
public boolean getTrustAllSslCerts() {
return _trustAllSslCerts;
}
public boolean getUseSsl() {
return _useSsl;
}
private void initConfigDefaults() {
setDefaultProperty(ARG_API_KEY, CoordConsts.DEFAULT_API_KEY);
setDefaultProperty(ARG_BATFISH_LOG_LEVEL,
BatfishLogger.getLogLevelStr(BatfishLogger.LEVEL_WARN));
setDefaultProperty(ARG_COORDINATOR_HOST, "localhost");
setDefaultProperty(ARG_DATAMODEL_DIR, "datamodel");
setDefaultProperty(ARG_DISABLE_SSL, CoordConsts.SVC_DISABLE_SSL);
setDefaultProperty(ARG_HELP, false);
setDefaultProperty(ARG_LOG_FILE, null);
setDefaultProperty(ARG_LOG_LEVEL,
BatfishLogger.getLogLevelStr(BatfishLogger.LEVEL_OUTPUT));
setDefaultProperty(ARG_NO_SANITY_CHECK, false);
setDefaultProperty(ARG_PERIOD_CHECK_WORK, 1000);
setDefaultProperty(BfConsts.ARG_PLUGIN_DIRS,
Collections.<String> emptyList());
setDefaultProperty(ARG_PRETTY_PRINT_ANSWERS, true);
setDefaultProperty(ARG_RUN_MODE, RunMode.batch.toString());
setDefaultProperty(ARG_SERVICE_POOL_PORT, CoordConsts.SVC_POOL_PORT);
setDefaultProperty(ARG_SERVICE_WORK_PORT, CoordConsts.SVC_WORK_PORT);
setDefaultProperty(ARG_TRUST_ALL_SSL_CERTS, true);
}
private void initOptions() {
addOption(ARG_API_KEY, "API key for the coordinator", "apikey");
addOption(ARG_COMMAND_FILE,
"read commands from the specified command file", "cmdfile");
addOption(ARG_COORDINATOR_HOST, "hostname for the service",
"base url for coordinator service");
addOption(ARG_BATFISH_LOG_LEVEL, "log level for batfish",
"batfish_loglevel");
addOption(ARG_CONTAINER_ID, "container to attach to", "container_id");
addOption(ARG_DATAMODEL_DIR, "directory where datamodel should be dumped",
"datamodel_dir");
addBooleanOption(ARG_DISABLE_SSL, "disable coordinator ssl");
addBooleanOption(ARG_HELP, "print this message");
addOption(ARG_LOG_FILE, "send output to specified log file", "logfile");
addOption(ARG_LOG_LEVEL, "log level", "loglevel");
addBooleanOption(ARG_NO_SANITY_CHECK,
"do not check if container, testrig etc. are set. (helps debugging.)");
addOption(ARG_PERIOD_CHECK_WORK, "period with which to check work (ms)",
"period_check_work_ms");
addListOption(BfConsts.ARG_PLUGIN_DIRS,
"directories containing plugin jars", "paths");
addBooleanOption(ARG_PRETTY_PRINT_ANSWERS, "pretty print answers");
addOption(ARG_QUESTIONS_DIR, "directory to output questions in",
"questions_dir");
addOption(ARG_RUN_MODE,
"which mode to run in (batch|interactive|genquestions)",
"run_mode");
addOption(ARG_SERVICE_POOL_PORT, "port for pool management service",
"port_number_pool_service");
addOption(ARG_SERVICE_WORK_PORT, "port for work management service",
"port_number_work_service");
addOption(ARG_TESTRIG_DIR, "where the testrig sits", "testrig_dir");
addOption(ARG_TESTRIG_ID, "testrig to attach to", "testrig_id");
addBooleanOption(ARG_TRUST_ALL_SSL_CERTS,
"whether we should trust any coordinator SSL certs (for testing locally)");
}
private void parseCommandLine(String[] args) {
initCommandLine(args);
if (getBooleanOptionValue(ARG_HELP)) {
printHelp(EXECUTABLE_NAME);
System.exit(0);
}
_apiKey = getStringOptionValue(ARG_API_KEY);
_batchCommandFile = getStringOptionValue(ARG_COMMAND_FILE);
_batfishLogLevel = getStringOptionValue(ARG_BATFISH_LOG_LEVEL);
_containerId = getStringOptionValue(ARG_CONTAINER_ID);
_datamodelDir = getStringOptionValue(ARG_DATAMODEL_DIR);
_logFile = getStringOptionValue(ARG_LOG_FILE);
_logLevel = getStringOptionValue(ARG_LOG_LEVEL);
_periodCheckWorkMs = getLongOptionValue(ARG_PERIOD_CHECK_WORK);
_pluginDirs = getPathListOptionValue(BfConsts.ARG_PLUGIN_DIRS);
_prettyPrintAnswers = getBooleanOptionValue(ARG_PRETTY_PRINT_ANSWERS);
_questionsDir = getStringOptionValue(ARG_QUESTIONS_DIR);
_runMode = RunMode.valueOf(getStringOptionValue(ARG_RUN_MODE));
_sanityCheck = !getBooleanOptionValue(ARG_NO_SANITY_CHECK);
_testrigDir = getStringOptionValue(ARG_TESTRIG_DIR);
_testrigId = getStringOptionValue(ARG_TESTRIG_ID);
_coordinatorHost = getStringOptionValue(ARG_COORDINATOR_HOST);
_coordinatorPoolPort = getIntegerOptionValue(ARG_SERVICE_POOL_PORT);
_coordinatorWorkPort = getIntegerOptionValue(ARG_SERVICE_WORK_PORT);
_trustAllSslCerts = getBooleanOptionValue(ARG_TRUST_ALL_SSL_CERTS);
_useSsl = !getBooleanOptionValue(ARG_DISABLE_SSL);
}
public void setBatfishLogLevel(String logLevel) {
_batfishLogLevel = logLevel;
}
public void setLogLevel(String logLevel) {
_logLevel = logLevel;
}
public void setPrettyPrintAnswers(boolean prettyPrint) {
_prettyPrintAnswers = prettyPrint;
}
}