package com.taobao.zeus.model;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
/**
* Job的状态
* 用于持久化Job状态,重启服务器时用作恢复
* @author zhoufang
*
*/
public class JobStatus implements Serializable{
private static final long serialVersionUID = 1L;
private String jobId;
private Status status;
private String historyId;
/**
* 依赖的Job的状态
* key 依赖的jobId
* value 依赖的Job的完成时间
*/
private Map<String, String> readyDependency=new HashMap<String, String>();
public String getJobId(){
return jobId;
}
public void setJobId(String jobId){
this.jobId=jobId;
}
/**
* WAIT:
* Job没有开始,或者Job依赖的任务没有全部完成
* RUNNING
* Job正在运行中
* SUCCESS
* Job运行成功(瞬间状态)
* FAILED
* Job运行失败(瞬间状态)
* @author zhoufang
*
*/
public enum Status{
WAIT("wait"),RUNNING("running"),SUCCESS("success"),FAILED("failed");
private final String id;
private Status(String id){
this.id=id;
}
@Override
public String toString() {
return id;
}
public static Status parser(String v){
for(Status s:Status.values()){
if(s.id.equalsIgnoreCase(v)){
return s;
}
}
return null;
}
public String getId() {
return id;
}
}
/**
* 触发任务执行的3种类型
* 1: 定时执行
* 2:手动执行(不产生连锁反应)
* 3:手动恢复(产生连锁反应)
* @author zhoufang
*
*/
public enum TriggerType{
SCHEDULE(1),MANUAL(2),MANUAL_RECOVER(3);
private Integer id;
private TriggerType(Integer id){
this.id=id;
}
@Override
public String toString() {
return id.toString();
}
public String toName(){
if(id==1){
return "自动调度";
}else if(id==2){
return "手动触发";
}else if(id==3){
return "手动恢复";
}
return "未知";
}
public static TriggerType parser(Integer v){
for(TriggerType type:TriggerType.values()){
if(type.getId().equals(v)){
return type;
}
}
return null;
}
public Integer getId() {
return id;
}
}
public Status getStatus(){
return status;
}
public void setStatus(Status status){
this.status=status;
}
public Map<String, String> getReadyDependency() {
return readyDependency;
}
public void setReadyDependency(Map<String, String> readyDependency){
this.readyDependency=readyDependency;
}
public String getHistoryId() {
return historyId;
}
public void setHistoryId(String historyId) {
this.historyId = historyId;
}
}