package org.fastcatsearch.job.management; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.fastcatsearch.common.io.Streamable; import org.fastcatsearch.control.JobService; import org.fastcatsearch.exception.FastcatSearchException; import org.fastcatsearch.ir.io.DataInput; import org.fastcatsearch.ir.io.DataOutput; import org.fastcatsearch.job.Job; public class GetRunningJobListJob extends Job { private static final long serialVersionUID = -9023882122708815679L; @Override public JobResult doRun() throws FastcatSearchException { JobService jobService = JobService.getInstance(); List<JobInfo> jobInfoList = new ArrayList<GetRunningJobListJob.JobInfo>(); for (Job job : jobService.getRunningJobs()) { jobInfoList.add(new JobInfo(job)); } RunningJobListInfo result = new RunningJobListInfo(jobInfoList); return new JobResult(result); } public static class JobInfo { private long jobId; private String className; private String args; private boolean isScheduled; private boolean noResult; private long startTime; private long endTime; public JobInfo(long jobId, String className, String args, boolean isScheduled, boolean noResult, long startTime, long endTime) { this.jobId = jobId; this.className = className; this.args = args; this.isScheduled = isScheduled; this.noResult = noResult; this.startTime = startTime; this.endTime = endTime; } public JobInfo(Job job) { jobId = job.getId(); className = job.getClass().getName(); args = job.getArgs() != null ? job.getArgs().toString() : null; isScheduled = job.isScheduled(); noResult = job.isNoResult(); startTime = job.jobStartTime(); endTime = job.jobEndTime(); } public long getJobId() { return jobId; } public void setJobId(long jobId) { this.jobId = jobId; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public String getArgs() { return args; } public void setArgs(String args) { this.args = args; } public boolean isScheduled() { return isScheduled; } public void setScheduled(boolean isScheduled) { this.isScheduled = isScheduled; } public boolean isNoResult() { return noResult; } public void setNoResult(boolean noResult) { this.noResult = noResult; } public long getStartTime() { return startTime; } public void setStartTime(long startTime) { this.startTime = startTime; } public long getEndTime() { return endTime; } public void setEndTime(long endTime) { this.endTime = endTime; } } public static class RunningJobListInfo implements Streamable { private List<JobInfo> jobInfoList; public RunningJobListInfo() { } public RunningJobListInfo(List<JobInfo> jobInfoList) { this.jobInfoList = jobInfoList; } public List<JobInfo> getJobInfoList(){ return jobInfoList; } @Override public void readFrom(DataInput input) throws IOException { int size = input.readVInt(); jobInfoList = new ArrayList<GetRunningJobListJob.JobInfo>(size); for (int i = 0; i < size; i++) { jobInfoList.add(new JobInfo(input.readVLong(), input.readString(), input.readString(), input.readBoolean(), input.readBoolean(), input.readVLong(), input.readVLong())); } } @Override public void writeTo(DataOutput output) throws IOException { output.writeVInt(jobInfoList.size()); for (JobInfo jobInfo : jobInfoList) { output.writeVLong(jobInfo.getJobId()); output.writeString(jobInfo.getClassName()); output.writeString(jobInfo.getArgs()); output.writeBoolean(jobInfo.isScheduled); output.writeBoolean(jobInfo.isNoResult()); output.writeVLong(jobInfo.getStartTime()); output.writeVLong(jobInfo.getEndTime()); } } } }