package org.molgenis.compute.test.pilot; import org.apache.commons.io.FileUtils; import org.molgenis.compute.runtime.ComputeTask; import org.molgenis.framework.db.DatabaseException; import org.molgenis.framework.server.MolgenisContext; import org.molgenis.framework.server.MolgenisRequest; import org.molgenis.framework.server.MolgenisResponse; import org.molgenis.framework.server.MolgenisService; import java.io.IOException; import java.text.ParseException; import java.util.List; /** * Created with IntelliJ IDEA. User: georgebyelas Date: 20/07/2012 Time: 16:53 * To change this template use File | Settings | File Templates. */ public class PilotService implements MolgenisService { public PilotService(MolgenisContext mc) { // super(mc); } public synchronized void handleRequest(MolgenisRequest request, MolgenisResponse response) throws ParseException, DatabaseException, IOException { System.out.println(">> In handleRequest!"); System.out.println(request); if ("started".equals(request.getString("status"))) { String backend = request.getString("backend"); System.out.println(">>> looking for a task to execute at " + backend); // ComputeTask task = request.getDatabase().query(ComputeTask.class).eq(ComputeTask.STATUSCODE, "ready") // .limit(1).find().get(0); List<ComputeTask> tasks = request.getDatabase().query(ComputeTask.class) .equals(ComputeTask.STATUSCODE, "ready") .equals(ComputeTask.BACKENDNAME, backend).find(); if(tasks.size() > 0) { ComputeTask task = tasks.get(0); if (task != null) { String taskName = task.getName(); String taskScript = task.getComputeScript(); taskScript = taskScript.replaceAll("\r", ""); // we add task id to the run listing to identify task when it is // done taskScript = "echo TASKID:" + taskName + "\n" + taskScript; // change status to running System.out.println("script " + taskScript); request.getDatabase().beginTx(); task.setStatusCode("running"); request.getDatabase().update(task); request.getDatabase().commitTx(); // send response response.getResponse().getWriter().write(taskScript); } } } else if ("done".equals(request.getString("status"))) { String results = FileUtils.readFileToString(request.getFile("log_file")); // parsing for TaskID int idPos = results.indexOf("TASKID:") + 7; int endPos = results.indexOf("\n"); String taskID = results.substring(idPos, endPos).trim(); System.out.println(">>> task " + taskID + " is finished"); ComputeTask task = request.getDatabase().query(ComputeTask.class).eq(ComputeTask.NAME, taskID).limit(1) .find().get(0); if (task != null && task.getStatusCode().equalsIgnoreCase("running")) { request.getDatabase().beginTx(); task.setStatusCode("done"); task.setRunLog(results); request.getDatabase().update(task); request.getDatabase().commitTx(); } } } }