package com.dgrid.handlers;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import com.dgrid.api.BaseJobletTypeHandler;
import com.dgrid.api.JobletTypeHandler;
import com.dgrid.gen.JOB_STATUS;
import com.dgrid.gen.Joblet;
import com.dgrid.gen.JobletResult;
import com.dgrid.service.DGridClient;
import com.dgrid.util.Execute;
import com.dgrid.util.NullOutputStream;
public class SystemJobletTypeHandler extends BaseJobletTypeHandler implements
JobletTypeHandler {
public static final String SAVE_OUTPUT_PARAM = "output";
public JobletResult execute(Joblet joblet, DGridClient gridClient)
throws Exception {
log.trace("execute()");
long start = System.currentTimeMillis();
String command = joblet.getContent();
boolean saveOutput = Boolean.parseBoolean(joblet.getParameters().get(
SAVE_OUTPUT_PARAM));
PrintStream ps = null;
int retval = 0;
String contents = null;
if (saveOutput) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ps = new PrintStream(baos);
retval = executeCommand(command, ps);
contents = baos.toString();
baos.close();
} else {
ps = new PrintStream(new NullOutputStream());
retval = executeCommand(command, ps);
contents = "";
}
ps.close();
int returnStatus = (retval == 0) ? JOB_STATUS.COMPLETED
: JOB_STATUS.FAILED;
return new JobletResult(0, 0l, retval,
(System.currentTimeMillis() - start), returnStatus, contents,
joblet);
}
private int executeCommand(String command, PrintStream out)
throws InterruptedException, IOException {
log.trace("executeCommand()");
if (log.isDebugEnabled()) {
log.debug(String.format("Executing command (%1$s)", command));
}
int retval = Execute.execute(command, out, out);
return retval;
}
}