Skip to content

Commit

Permalink
Merge pull request #131 from batfish/unstable
Browse files Browse the repository at this point in the history
Unstable
  • Loading branch information
arifogel committed May 11, 2017
2 parents 1cc9617 + 2a77a6b commit e649dd2
Show file tree
Hide file tree
Showing 30 changed files with 916 additions and 140 deletions.
129 changes: 129 additions & 0 deletions projects/batfish-client/src/org/batfish/client/BfCoordWorkHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,112 @@ public boolean delTestrig(String containerName, String testrigName) {
// }
// }

public String getAnalysisAnswers(String containerName, String baseTestrig,
String baseEnvironment, String deltaTestrig, String deltaEnvironment,
String analysisName) {
try {

Client client = getClientBuilder().build();
WebTarget webTarget = getTarget(client,
CoordConsts.SVC_GET_ANALYSIS_ANSWERS_RSC);

MultiPart multiPart = new MultiPart();
multiPart.setMediaType(MediaType.MULTIPART_FORM_DATA_TYPE);

addTextMultiPart(multiPart, CoordConsts.SVC_API_KEY,
_settings.getApiKey());
addTextMultiPart(multiPart, CoordConsts.SVC_CONTAINER_NAME_KEY,
containerName);
addTextMultiPart(multiPart, CoordConsts.SVC_TESTRIG_NAME_KEY,
baseTestrig);
addTextMultiPart(multiPart, CoordConsts.SVC_ENV_NAME_KEY,
baseEnvironment);
if (deltaTestrig != null) {
addTextMultiPart(multiPart, CoordConsts.SVC_DELTA_TESTRIG_NAME_KEY,
deltaTestrig);
addTextMultiPart(multiPart, CoordConsts.SVC_DELTA_ENV_NAME_KEY,
deltaEnvironment);
}
addTextMultiPart(multiPart, CoordConsts.SVC_ANALYSIS_NAME_KEY,
analysisName);
addTextMultiPart(multiPart, CoordConsts.SVC_PRETTY_ANSWER_KEY,
Boolean.toString(false));

JSONObject jObj = postData(webTarget, multiPart);
if (jObj == null) {
return null;
}

if (!jObj.has(CoordConsts.SVC_ANSWERS_KEY)) {
_logger.errorf("answer key not found in: %s\n", jObj.toString());
return null;
}

String answer = jObj.getString(CoordConsts.SVC_ANSWERS_KEY);

return answer;
}
catch (Exception e) {
_logger.errorf("Exception in getAnswer from %s using (%s, %s)\n",
_coordWorkMgr, baseTestrig, analysisName);
_logger.error(ExceptionUtils.getFullStackTrace(e) + "\n");
return null;
}
}

public String getAnswer(String containerName, String baseTestrig,
String baseEnv, String deltaTestrig, String deltaEnv,
String questionName) {
try {

Client client = getClientBuilder().build();
WebTarget webTarget = getTarget(client,
CoordConsts.SVC_GET_ANSWER_RSC);

MultiPart multiPart = new MultiPart();
multiPart.setMediaType(MediaType.MULTIPART_FORM_DATA_TYPE);

addTextMultiPart(multiPart, CoordConsts.SVC_API_KEY,
_settings.getApiKey());
addTextMultiPart(multiPart, CoordConsts.SVC_CONTAINER_NAME_KEY,
containerName);
addTextMultiPart(multiPart, CoordConsts.SVC_TESTRIG_NAME_KEY,
baseTestrig);
addTextMultiPart(multiPart, CoordConsts.SVC_ENV_NAME_KEY, baseEnv);
if (deltaTestrig != null) {
addTextMultiPart(multiPart, CoordConsts.SVC_DELTA_TESTRIG_NAME_KEY,
deltaTestrig);
addTextMultiPart(multiPart, CoordConsts.SVC_DELTA_ENV_NAME_KEY,
deltaEnv);
}
addTextMultiPart(multiPart, CoordConsts.SVC_QUESTION_NAME_KEY,
questionName);
addTextMultiPart(multiPart, CoordConsts.SVC_PRETTY_ANSWER_KEY,
Boolean.toString(false));

JSONObject jObj = postData(webTarget, multiPart);
if (jObj == null) {
return null;
}

if (!jObj.has(CoordConsts.SVC_ANSWER_KEY)) {
_logger.errorf("answer key not found in: %s\n", jObj.toString());
return null;
}

String answer = jObj.getString(CoordConsts.SVC_ANSWER_KEY);

return answer;

}
catch (Exception e) {
_logger.errorf("Exception in getAnswer from %s using (%s, %s)\n",
_coordWorkMgr, baseTestrig, questionName);
_logger.error(ExceptionUtils.getFullStackTrace(e) + "\n");
return null;
}
}

private ClientBuilder getClientBuilder() throws Exception {
return CommonUtil
.getClientBuilder(_settings.getUseSsl(),
Expand Down Expand Up @@ -462,6 +568,29 @@ public WorkItem getWorkItemParse(String containerName, String testrigName,
return wItem;
}

public WorkItem getWorkItemRunAnalysis(String analysisName,
String containerName, String testrigName, String envName,
String deltaTestrig, String deltaEnvName, boolean delta,
boolean differential) {
WorkItem wItem = new WorkItem(containerName, testrigName);
wItem.addRequestParam(BfConsts.COMMAND_ANALYZE, "");
wItem.addRequestParam(BfConsts.ARG_ANALYSIS_NAME, analysisName);
wItem.addRequestParam(BfConsts.ARG_TESTRIG, testrigName);
wItem.addRequestParam(BfConsts.ARG_ENVIRONMENT_NAME, envName);
if (differential || delta) {
wItem.addRequestParam(BfConsts.ARG_DELTA_TESTRIG, deltaTestrig);
wItem.addRequestParam(BfConsts.ARG_DELTA_ENVIRONMENT_NAME,
deltaEnvName);
}
if (delta) {
wItem.addRequestParam(BfConsts.ARG_DIFF_ACTIVE, "");
}
if (differential) {
wItem.addRequestParam(BfConsts.ARG_DIFFERENTIAL, "");
}
return wItem;
}

public Pair<WorkStatusCode, String> getWorkStatus(UUID parseWorkUUID) {
try {
Client client = getClientBuilder().build();
Expand Down
173 changes: 150 additions & 23 deletions projects/batfish-client/src/org/batfish/client/Client.java
Original file line number Diff line number Diff line change
Expand Up @@ -874,42 +874,131 @@ private boolean get(String[] words, FileWriter outWriter,
}
}

private boolean getAnswer(List<String> options, List<String> parameters) {
private boolean getAnalysisAnswers(FileWriter outWriter,
List<String> parameters, boolean delta, boolean differential) {
if (!isSetTestrig() || !isSetContainer(true)) {
return false;
}
if (parameters.size() != 1) {
_logger.error("Invalid arguments: " + parameters.toString());
printUsage(Command.GET_ANALYSIS_ANSWERS);
return false;
}

String analysisName = parameters.get(0);

boolean formatJson = true;
String baseTestrig;
String baseEnvironment;
String deltaTestrig;
String deltaEnvironment;
if (differential) {
baseTestrig = _currTestrig;
baseEnvironment = _currEnv;
deltaTestrig = _currDeltaTestrig;
deltaEnvironment = _currDeltaEnv;
}
else if (delta) {
baseTestrig = _currDeltaTestrig;
baseEnvironment = _currDeltaEnv;
deltaTestrig = null;
deltaEnvironment = null;
}
else {
baseTestrig = _currTestrig;
baseEnvironment = _currEnv;
deltaTestrig = null;
deltaEnvironment = null;
}
String answer = _workHelper.getAnalysisAnswers(_currContainerName,
baseTestrig, baseEnvironment, deltaTestrig, deltaEnvironment,
analysisName);

if (options.size() == 1) {
if (options.get(0).equals("-html")) {
formatJson = false;
if (answer == null) {
return false;
}

if (outWriter == null) {
_logger.output(answer + "\n");
}
else {
try {
outWriter.write(answer + "\n");
}
else {
_logger.outputf(
"Unknown option: %s (note that json does not need a flag)\n",
options.get(0));
return false;
catch (IOException e) {
throw new BatfishException(
"Failed to record response to output writer", e);
}
}

return true;
}

private boolean getAnswer(FileWriter outWriter, List<String> parameters,
boolean delta, boolean differential) {
if (!isSetTestrig() || !isSetContainer(true)) {
return false;
}
if (parameters.size() != 1) {
_logger.error("Invalid arguments: " + parameters.toString());
printUsage(Command.GET_ANSWER);
return false;
}

String questionName = parameters.get(0);

String answerFileName = String.format("%s/%s/%s",
BfConsts.RELPATH_QUESTIONS_DIR, questionName,
(formatJson) ? BfConsts.RELPATH_ANSWER_JSON
: BfConsts.RELPATH_ANSWER_HTML);
String baseTestrig;
String baseEnvironment;
String deltaTestrig;
String deltaEnvironment;
if (differential) {
baseTestrig = _currTestrig;
baseEnvironment = _currEnv;
deltaTestrig = _currDeltaTestrig;
deltaEnvironment = _currDeltaEnv;
}
else if (delta) {
baseTestrig = _currDeltaTestrig;
baseEnvironment = _currDeltaEnv;
deltaTestrig = null;
deltaEnvironment = null;
}
else {
baseTestrig = _currTestrig;
baseEnvironment = _currEnv;
deltaTestrig = null;
deltaEnvironment = null;
}
String answerString = _workHelper.getAnswer(_currContainerName,
baseTestrig, baseEnvironment, deltaTestrig, deltaEnvironment,
questionName);

String downloadedAnsFile = _workHelper.getObject(_currContainerName,
_currTestrig, answerFileName);
if (downloadedAnsFile == null) {
_logger.errorf("Failed to get answer file %s\n", answerFileName);
return false;
String answerStringToPrint = answerString;
if (outWriter == null && _settings.getPrettyPrintAnswers()) {
ObjectMapper mapper = new BatfishObjectMapper(getCurrentClassLoader());
Answer answer;
try {
answer = mapper.readValue(answerString, Answer.class);
}
catch (IOException e) {
throw new BatfishException(
"Response does not appear to be valid JSON representation of "
+ Answer.class.getSimpleName());
}
answerStringToPrint = answer.prettyPrint();
}

String answerString = CommonUtil.readFile(Paths.get(downloadedAnsFile));
_logger.output(answerString);
_logger.output("\n");
if (outWriter == null) {
_logger.output(answerStringToPrint);
}
else {
try {
outWriter.write(answerStringToPrint);
}
catch (IOException e) {
throw new BatfishException(
"Failed to record response to output writer", e);
}
}

return true;
}
Expand Down Expand Up @@ -1545,8 +1634,18 @@ private boolean processCommand(String[] words, FileWriter outWriter) {
return get(words, outWriter, options, parameters, false);
case GET_DELTA:
return get(words, outWriter, options, parameters, true);
case GET_ANALYSIS_ANSWERS:
return getAnalysisAnswers(outWriter, parameters, false, false);
case GET_ANALYSIS_ANSWERS_DELTA:
return getAnalysisAnswers(outWriter, parameters, true, false);
case GET_ANALYSIS_ANSWERS_DIFFERENTIAL:
return getAnalysisAnswers(outWriter, parameters, false, true);
case GET_ANSWER:
return getAnswer(options, parameters);
return getAnswer(outWriter, parameters, false, false);
case GET_ANSWER_DELTA:
return getAnswer(outWriter, parameters, true, false);
case GET_ANSWER_DIFFERENTIAL:
return getAnswer(outWriter, parameters, false, true);
case GET_QUESTION:
return getQuestion(parameters);
case HELP:
Expand Down Expand Up @@ -1579,6 +1678,12 @@ private boolean processCommand(String[] words, FileWriter outWriter) {
return pwd();
case REINIT_DELTA_TESTRIG:
return reinitTestrig(outWriter, true);
case RUN_ANALYSIS:
return runAnalysis(outWriter, parameters, false, false);
case RUN_ANALYSIS_DELTA:
return runAnalysis(outWriter, parameters, true, false);
case RUN_ANALYSIS_DIFFERENTIAL:
return runAnalysis(outWriter, parameters, false, true);
case REINIT_TESTRIG:
return reinitTestrig(outWriter, false);
case SET_BATFISH_LOGLEVEL:
Expand Down Expand Up @@ -1762,6 +1867,28 @@ public void run(List<String> initialCommands) {

}

private boolean runAnalysis(FileWriter outWriter, List<String> parameters,
boolean delta, boolean differential) {

if (!isSetContainer(true) || !isSetTestrig()) {
return false;
}
if (parameters.size() != 1) {
_logger.error("Invalid arguments: " + parameters.toString());
printUsage(Command.RUN_ANALYSIS);
return false;
}

String analysisName = parameters.get(0);

// answer the question
WorkItem wItemAs = _workHelper.getWorkItemRunAnalysis(analysisName,
_currContainerName, _currTestrig, _currEnv, _currDeltaTestrig,
_currDeltaEnv, delta, differential);

return execute(wItemAs, outWriter);
}

private void runBatchFile() {
Path batchCommandFilePath = Paths.get(_settings.getBatchCommandFile());
List<String> commands = readCommands(batchCommandFilePath);
Expand Down

0 comments on commit e649dd2

Please sign in to comment.