/**
*
*/
package com.taobao.top.analysis.node.job;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.taobao.top.analysis.util.ReportUtil;
/**
* 任务执行后得到的结果
* @author fangweng
* @Email fangweng@taobao.com
* 2011-11-29
*
*/
public class JobTaskResult implements Serializable {
/**
*
*/
private static final long serialVersionUID = -150184766178723011L;
/**
* 支持slave将多个结果合并为一个,包含多个taskid,不过task必须隶属于一个job
*/
private List<String> taskIds;
private int jobEpoch;
/**
* 处理后的结果池,key是entry的id, value是Map(key是entry定义的key组合,value是统计后的结果)
* 采用线程不安全,只有单线程操作此结果集
*/
private Map<String, Map<String, Object>> results;
/**
* 一个或者多个执行任务的信息,支持slave将多个结果合并为一个,不过task必须隶属于一个job
*/
private Map<String,JobTaskExecuteInfo> taskExecuteInfos;
/**
* 处理后的结果池所对应的key
*/
private String resultKey;
/**
* 所属job的名称
*/
private String jobName;
/**
* slave的繁忙率,计算总时间/slave运行时间
*/
private float efficiency;
private String slaveIp = ReportUtil.getIp();
public JobTaskResult()
{
results = new HashMap<String, Map<String, Object>>();
taskIds = new ArrayList<String>();
efficiency = 0;
taskExecuteInfos = new HashMap<String,JobTaskExecuteInfo>();
}
/**
* 克隆一个对象,但不包含里面的结果集
* @return
* @throws CloneNotSupportedException
*/
public JobTaskResult cloneWithOutResults() {
JobTaskResult clone = new JobTaskResult();
clone.jobEpoch = jobEpoch;
clone.taskIds = taskIds;
clone.taskExecuteInfos = taskExecuteInfos;
clone.efficiency = efficiency;
return clone;
}
public String getSlaveIp() {
return slaveIp;
}
public void setSlaveIp(String slaveIp) {
this.slaveIp = slaveIp;
}
public float getEfficiency() {
return efficiency;
}
public void setEfficiency(float efficiency) {
this.efficiency = efficiency;
}
public int getJobEpoch() {
return jobEpoch;
}
public void setJobEpoch(int jobEpoch) {
this.jobEpoch = jobEpoch;
}
public void addTaskId(String taskId)
{
taskIds.add(taskId);
}
public void addTaskExecuteInfo(JobTaskExecuteInfo taskExecuteInfo)
{
if (taskExecuteInfo != null)
taskExecuteInfos.put(taskExecuteInfo.getTaskId(),taskExecuteInfo);
}
public void addTaskIds(List<String> taskIds)
{
this.taskIds.addAll(taskIds);
}
public void addTaskExecuteInfos(Map<String,JobTaskExecuteInfo> taskExecuteInfos)
{
if (taskExecuteInfos != null && taskExecuteInfos.size() > 0)
this.taskExecuteInfos.putAll(taskExecuteInfos);
}
public List<String> getTaskIds() {
return taskIds;
}
public void setTaskIds(List<String> taskIds) {
this.taskIds = taskIds;
}
public Map<String,JobTaskExecuteInfo> getTaskExecuteInfos() {
return taskExecuteInfos;
}
public void setTaskExecuteInfos(Map<String,JobTaskExecuteInfo> taskExecuteInfos) {
this.taskExecuteInfos = taskExecuteInfos;
}
public Map<String, Map<String, Object>> getResults() {
return results;
}
public void setResults(Map<String, Map<String, Object>> results) {
this.results = results;
}
public String toString() {
StringBuilder sb = new StringBuilder("jobTaskResult:[");
for (JobTaskExecuteInfo jobTaskExecuteInfo : taskExecuteInfos.values()) {
sb.append(jobTaskExecuteInfo.toString()).append(";");
}
sb.append("]");
return sb.toString();
}
/**
* @return the resultKey
*/
public String getResultKey() {
return resultKey;
}
/**
* @param resultKey the resultKey to set
*/
public void setResultKey(String resultKey) {
this.resultKey = resultKey;
}
/**
* @return the jobName
*/
public String getJobName() {
return jobName;
}
/**
* @param jobName the jobName to set
*/
public void setJobName(String jobName) {
this.jobName = jobName;
}
}