Skip to content
Snippets Groups Projects
Commit 5281c187 authored by Manuel Spuhler's avatar Manuel Spuhler Committed by Manuel Spuhler
Browse files

Workflow enpoint POC

parent 5ade034f
No related branches found
No related tags found
No related merge requests found
......@@ -69,7 +69,7 @@ public class ExperimentApi extends WokenClientController {
@ApiOperation(value = "Create an experiment on Exareme", response = Experiment.class)
@RequestMapping(value = "/exareme", method = RequestMethod.POST)
public ResponseEntity<String> runExaremeExperiment(@RequestBody ExperimentQuery expQuery) {
LOGGER.info("sendExaremeExperiment");
LOGGER.info("send ExaremeExperiment");
Experiment experiment = saveExperiment(expQuery);
......@@ -80,6 +80,20 @@ public class ExperimentApi extends WokenClientController {
return new ResponseEntity<>(gsonOnlyExposed.toJson(experiment.jsonify()), HttpStatus.OK);
}
@ApiOperation(value = "Create a workflow", response = Experiment.class)
@RequestMapping(value = "/workflow", method = RequestMethod.POST)
public ResponseEntity<String> runWorkflow(@RequestBody ExperimentQuery expQuery) {
LOGGER.info("send Workflow");
Experiment experiment = saveExperiment(expQuery);
String algoCode = expQuery.getAlgorithms().get(0).getCode();
List<AlgorithmParam> params = expQuery.getAlgorithms().get(0).getParameters();
sendWorkflow(experiment, algoCode, params);
return new ResponseEntity<>(gsonOnlyExposed.toJson(experiment.jsonify()), HttpStatus.OK);
}
@ApiOperation(value = "get an experiment", response = Experiment.class)
@RequestMapping(value = "/{uuid}", method = RequestMethod.GET)
public ResponseEntity<String> getExperiment(
......@@ -297,6 +311,37 @@ public class ExperimentApi extends WokenClientController {
}).start();
}
private void sendWorkflow(Experiment experiment, String algoCode, List<AlgorithmParam> params) {
// this runs in the background. For future optimization: use a thread pool
new Thread(() -> {
HashMap<String, String> queryMap = new HashMap<String, String>();
if (params != null) {
for (AlgorithmParam p : params) {
queryMap.put(p.getName(), p.getValue());
}
}
String query = gson.toJson(queryMap);
String url = "http://88.197.53.36:8080/Gateway_API-1.0.0-SNAPSHOT/api/runWorkflow/3f5830403180d620";
// Results are stored in the experiment object
try {
StringBuilder results = new StringBuilder();
int code = HTTPUtil.sendWorkflowHTTP(url, query, results);
experiment.setResult("[" + results.toString() + "]");
experiment.setHasError(code >= 400);
experiment.setHasServerError(code >= 500);
} catch (IOException e) {
LOGGER.trace("Invalid UUID", e);
LOGGER.warn("Exareme experiment failed to run properly !");
experiment.setHasError(true);
experiment.setHasServerError(true);
experiment.setResult(e.getMessage());
}
finishExperiment(experiment);
}).start();
}
private void finishExperiment(Experiment experiment) {
experiment.setFinished(new Date());
experimentRepository.save(experiment);
......
......@@ -47,6 +47,48 @@ public class HTTPUtil {
}
}
int respCode = con.getResponseCode();
BufferedReader in;
if(respCode == 200) {
in = new BufferedReader(new InputStreamReader(con.getInputStream()));
}
else
{
in = new BufferedReader(new InputStreamReader(con.getErrorStream()));
}
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
resp.append(response.toString());
return respCode;
}
/* FIXME: Authorization */
public static int sendWorkflowHTTP(String url, String query, StringBuilder resp) throws IOException {
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
if(query != null && query.length() > 0)
{
con.addRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Content-Length", Integer.toString(query.length()));
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.write(query.getBytes(StandardCharsets.UTF_8));
wr.flush();
wr.close();
}
int respCode = con.getResponseCode();
BufferedReader in;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment