package org.shanbo.feluca.node.request;
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
import org.shanbo.feluca.node.JobManager;
import org.shanbo.feluca.node.RoleModule;
import org.shanbo.feluca.node.http.HttpResponseUtil;
import org.shanbo.feluca.node.http.NettyHttpRequest;
import org.shanbo.feluca.node.job.FelucaJob;
import org.shanbo.feluca.node.leader.LeaderModule;
import org.shanbo.feluca.node.worker.WorkerModule;
import com.alibaba.fastjson.JSONObject;
public class WorkerJobRequest extends BasicRequest{
public static final String PATH = "/job";
public WorkerJobRequest(RoleModule module) {
super(module);
}
public String getPath() {
return PATH;
}
private void handleInfoRequest(NettyHttpRequest req, DefaultHttpResponse resp){
String jobName = req.param("jobName");
WorkerModule m = ((WorkerModule)module);
if (jobName != null){
JSONObject searchJobInfo = m.searchJobInfo(jobName);
if (searchJobInfo == null){
HttpResponseUtil.setResponse(resp, " query job :" + jobName, "null");
}else{
HttpResponseUtil.setResponse(resp, " query job :" + jobName, searchJobInfo);
}
}else{
HttpResponseUtil.setResponse(resp, "feluca job status", m.getLatestJobStates());
}
}
public void handle(NettyHttpRequest req, DefaultHttpResponse resp) {
String action = req.param("action","info");
String contentJson = req.contentAsString();
JSONObject conf = JSONObject.parseObject(contentJson);
WorkerModule m = (WorkerModule)module;
if (action.equals("submit")){
try {
String taskName = m.submitJob(FelucaJob.class, conf);
if (taskName != null)
HttpResponseUtil.setResponse(resp, "submit task",taskName);
else {
HttpResponseUtil.setResponse(resp, "submit task", "failed");
}
} catch (Exception e) {
HttpResponseUtil.setExceptionResponse(resp, "submit task", "failed", e);
}
}else if (action.equals("kill")){
String taskName = req.param("jobName");
if (taskName == null){
HttpResponseUtil.setResponse(resp, "kill task ", "null");
}else{
HttpResponseUtil.setResponse(resp, "kill task : " + taskName, m.killJob(taskName));
}
}else if (action.equals("info")){
handleInfoRequest(req, resp);
}
}
}