package org.batfish.main;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;
import org.batfish.common.BatfishLogger;
import org.batfish.common.BfConsts;
import org.batfish.common.Task;
import org.batfish.common.BfConsts.TaskStatus;
@Path(BfConsts.SVC_BASE_RSC)
public class Service {
BatfishLogger _logger = Driver.getMainLogger();
@GET
@Produces(MediaType.APPLICATION_JSON)
public JSONArray getInfo() {
return new JSONArray(Arrays.asList(BfConsts.SVC_SUCCESS_KEY,
"Batfish service: enter ../application.wadl (relative to your URL) to see supported methods"));
}
@GET
@Path(BfConsts.SVC_GET_STATUS_RSC)
@Produces(MediaType.APPLICATION_JSON)
public JSONArray getStatus() {
try {
return new JSONArray(Arrays.asList(BfConsts.SVC_SUCCESS_KEY,
(new JSONObject().put("idle", Driver.getIdle())).toString()));
}
catch (Exception e) {
return new JSONArray(
Arrays.asList(BfConsts.SVC_FAILURE_KEY, e.getMessage()));
}
}
@GET
@Path(BfConsts.SVC_GET_TASKSTATUS_RSC)
@Produces(MediaType.APPLICATION_JSON)
public JSONArray getTaskStatus(
@QueryParam(BfConsts.SVC_TASKID_KEY) String taskId) {
_logger.info("BFS:getTaskStatus " + taskId + "\n");
try {
if (taskId == null || taskId.equals("")) {
return new JSONArray(Arrays.asList(BfConsts.SVC_FAILURE_KEY,
"taskid not supplied"));
}
Task task = Driver.getTaskFromLog(taskId);
if (task == null) {
task = new Task(null);
task.setStatus(TaskStatus.Unknown);
}
String taskStr = task.updateAndWrite();
return new JSONArray(Arrays.asList(BfConsts.SVC_SUCCESS_KEY, taskStr));
}
catch (Exception e) {
return new JSONArray(
Arrays.asList(BfConsts.SVC_FAILURE_KEY, e.getMessage()));
}
}
@GET
@Path(BfConsts.SVC_RUN_TASK_RSC)
@Produces(MediaType.APPLICATION_JSON)
public JSONArray runTask(@QueryParam(BfConsts.SVC_TASKID_KEY) String taskId,
@QueryParam(BfConsts.SVC_TASK_KEY) String task) {
_logger.info("BFS:runTask(" + taskId + ", " + task + ")\n");
try {
if (taskId == null || taskId.equals("")) {
return new JSONArray(Arrays.asList(BfConsts.SVC_FAILURE_KEY,
"taskid not supplied"));
}
if (task == null || task.equals("")) {
return new JSONArray(
Arrays.asList(BfConsts.SVC_FAILURE_KEY, "task not supplied"));
}
List<String> argsList = new ArrayList<>();
JSONObject taskObj = new JSONObject(task);
Iterator<?> keys = taskObj.keys();
while (keys.hasNext()) {
String key = (String) keys.next();
String value = taskObj.getString(key);
argsList.add("-" + key);
if (value != null && !value.equals("")) {
argsList.add(value);
}
}
String[] args = argsList.toArray(new String[argsList.size()]);
_logger.info("Will run with args: " + Arrays.toString(args) + "\n");
return new JSONArray(Driver.RunBatfishThroughService(taskId, args));
}
catch (Exception e) {
return new JSONArray(
Arrays.asList(BfConsts.SVC_FAILURE_KEY, e.getMessage()));
}
}
}
// package org.batfish.main;
//
// import java.util.ArrayList;
// import java.util.Arrays;
// import java.util.List;
//
// import javax.ws.rs.core.Context;
// import javax.ws.rs.core.MediaType;
// import javax.ws.rs.core.MultivaluedMap;
// import javax.ws.rs.core.UriInfo;
// import javax.ws.rs.GET;
// import javax.ws.rs.Path;
// import javax.ws.rs.Produces;
// import javax.ws.rs.QueryParam;
//
// import org.codehaus.jettison.json.JSONArray;
// import org.codehaus.jettison.json.JSONObject;
// import org.batfish.common.BatfishConstants;
// import org.batfish.common.BatfishConstants.TaskkStatus;
//
// @Path(BatfishConstants.SERVICE_BASE_RESOURCE)
// public class Service {
//
// @GET
// @Produces(MediaType.APPLICATION_JSON)
// public JSONArray getInfo() {
// return new JSONArray(
// Arrays.asList(
// "",
// "Batfish service: enter ../application.wadl (relative to your URL) to see
// supported methods"));
// }
//
// @GET
// @Path(BatfishConstants.SERVICE_GETSTATUS_RESOURCE)
// @Produces(MediaType.APPLICATION_JSON)
// public JSONArray getStatus() {
// try {
// return new JSONArray(Arrays.asList("",
// (new JSONObject().put("idle", Driver.getIdle())).toString()));
// }
// catch (Exception e) {
// return new JSONArray(Arrays.asList("failure", e.getMessage()));
// }
// }
//
// @GET
// @Path(BatfishConstants.SERVICE_GETTASKSTATUS_RESOURCE)
// @Produces(MediaType.APPLICATION_JSON)
// public JSONArray getTaskStatus(
// @QueryParam(BatfishConstants.SERVICE_TASKID_KEY) String taskId) {
// try {
//
// if (taskId == null || taskId.equals("")) {
// return new JSONArray(
// Arrays.asList("failure", "taskid not supplied"));
// }
//
// Task task = Driver.getTaskkFromLog(taskId);
//
// if (task == null) {
// return new JSONArray(Arrays.asList(
// "",
// (new JSONObject().put("status",
// TaskkStatus.Unknown.toString()).toString())));
// }
//
// return new JSONArray(Arrays.asList(
// "",
// (new JSONObject().put("status", Driver.getTaskkFromLog(taskId)
// .getStatus().toString()).toString())));
// }
// catch (Exception e) {
// return new JSONArray(Arrays.asList("failure", e.getMessage()));
// }
// }
//
// @GET
// @Path(BatfishConstants.SERVICE_RUN_RESOURCE)
// @Produces(MediaType.APPLICATION_JSON)
// public JSONArray run(@Context UriInfo ui) {
// BatfishLogger logger = Driver.getMainLogger();
// try {
// MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
//
// List<String> argsList = new ArrayList<String>();
//
// String taskId = null;
//
// for (MultivaluedMap.Entry<String, List<String>> entry : queryParams
// .entrySet()) {
// logger.info(String.format("key = %s value = %s\n", entry.getKey(),
// entry.getValue()));
//
// // pull out the special key corresponding to taskid
// if (entry.getKey().equals(BatfishConstants.SERVICE_TASKID_KEY)) {
// taskId = entry.getValue().get(0);
// }
// else {
// argsList.add("-" + entry.getKey());
//
// for (String value : entry.getValue()) {
// // don't add empty values; occurs for options that have no
// // value
// if (!value.equals("")) {
// argsList.add(value);
// }
// }
// }
// }
//
// if (taskId == null) {
// return new JSONArray(Arrays.asList("failure",
// "TaskId was not supplied"));
// }
//
// String[] args = argsList.toArray(new String[argsList.size()]);
//
// logger.info(String.format("Will run with args: %s\n",
// Arrays.toString(args)));
//
// return new JSONArray(Driver.RunBatfishThroughService(taskId, args));
// }
// catch (Exception e) {
// return new JSONArray(Arrays.asList("failure", e.getMessage()));
// }
// }
// }