package tech.powerjob.server.web.response;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import org.apache.commons.lang3.StringUtils;
|
import tech.powerjob.common.enums.ExecuteType;
|
import tech.powerjob.common.enums.ProcessorType;
|
import tech.powerjob.common.enums.TimeExpressionType;
|
import tech.powerjob.common.model.AlarmConfig;
|
import tech.powerjob.common.model.JobAdvancedRuntimeConfig;
|
import tech.powerjob.common.model.LogConfig;
|
import tech.powerjob.common.model.LifeCycle;
|
import tech.powerjob.common.utils.CommonUtils;
|
import tech.powerjob.server.common.SJ;
|
import tech.powerjob.common.enums.DispatchStrategy;
|
import tech.powerjob.common.enums.SwitchableStatus;
|
import tech.powerjob.server.persistence.remote.model.JobInfoDO;
|
import com.google.common.collect.Lists;
|
import lombok.Data;
|
import org.springframework.beans.BeanUtils;
|
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* JobInfo 对外展示对象
|
*
|
* @author tjq
|
* @since 2020/4/12
|
*/
|
@Data
|
public class JobInfoVO {
|
|
private Long id;
|
|
/* ************************** 任务基本信息 ************************** */
|
/**
|
* 任务名称
|
*/
|
private String jobName;
|
/**
|
* 任务描述
|
*/
|
private String jobDescription;
|
/**
|
* 任务所属的应用ID
|
*/
|
private Long appId;
|
/**
|
* 任务自带的参数
|
*/
|
private String jobParams;
|
|
/* ************************** 定时参数 ************************** */
|
/**
|
* 时间表达式类型(CRON/API/FIX_RATE/FIX_DELAY)
|
*/
|
private String timeExpressionType;
|
/**
|
* 时间表达式,CRON/NULL/LONG/LONG
|
*/
|
private String timeExpression;
|
|
/* ************************** 执行方式 ************************** */
|
/**
|
* 执行类型,单机/广播/MR
|
*/
|
private String executeType;
|
/**
|
* 执行器类型,Java/Shell
|
*/
|
private String processorType;
|
/**
|
* 执行器信息
|
*/
|
private String processorInfo;
|
|
/* ************************** 运行时配置 ************************** */
|
/**
|
* 最大同时运行任务数,默认 1
|
*/
|
private Integer maxInstanceNum;
|
/**
|
* 并发度,同时执行某个任务的最大线程数量
|
*/
|
private Integer concurrency;
|
/**
|
* 任务整体超时时间
|
*/
|
private Long instanceTimeLimit;
|
|
/* ************************** 重试配置 ************************** */
|
|
private Integer instanceRetryNum;
|
private Integer taskRetryNum;
|
|
/**
|
* 1 正常运行,2 停止(不再调度)
|
*/
|
private boolean enable;
|
/**
|
* 下一次调度时间
|
*/
|
private Long nextTriggerTime;
|
/**
|
* 下一次调度时间(文字版)
|
*/
|
private String nextTriggerTimeStr;
|
|
/* ************************** 繁忙机器配置 ************************** */
|
/**
|
* 最低CPU核心数量,0代表不限
|
*/
|
private double minCpuCores;
|
/**
|
* 最低内存空间,单位 GB,0代表不限
|
*/
|
private double minMemorySpace;
|
/**
|
* 最低磁盘空间,单位 GB,0代表不限
|
*/
|
private double minDiskSpace;
|
|
private Date gmtCreate;
|
private Date gmtModified;
|
|
/* ************************** 集群配置 ************************** */
|
/**
|
* 指定机器运行,空代表不限,非空则只会使用其中的机器运行(多值逗号分割)
|
*/
|
private String designatedWorkers;
|
/**
|
* 最大机器数量
|
*/
|
private Integer maxWorkerCount;
|
|
/**
|
* 报警用户ID列表
|
*/
|
private List<String> notifyUserIds;
|
|
private String extra;
|
|
private String dispatchStrategy;
|
|
/**
|
* 某种派发策略背后的具体配置,值取决于 dispatchStrategy
|
*/
|
private String dispatchStrategyConfig;
|
|
private LifeCycle lifeCycle;
|
|
private AlarmConfig alarmConfig;
|
|
/**
|
* 任务归类,开放给接入方自由定制
|
*/
|
private String tag;
|
|
/**
|
* 日志配置,包括日志级别、日志方式等配置信息
|
*/
|
private LogConfig logConfig;
|
|
private JobAdvancedRuntimeConfig advancedRuntimeConfig;
|
|
public static JobInfoVO from(JobInfoDO jobInfoDO) {
|
JobInfoVO jobInfoVO = new JobInfoVO();
|
BeanUtils.copyProperties(jobInfoDO, jobInfoVO);
|
|
TimeExpressionType timeExpressionType = TimeExpressionType.of(jobInfoDO.getTimeExpressionType());
|
ExecuteType executeType = ExecuteType.of(jobInfoDO.getExecuteType());
|
ProcessorType processorType = ProcessorType.of(jobInfoDO.getProcessorType());
|
DispatchStrategy dispatchStrategy = DispatchStrategy.of(jobInfoDO.getDispatchStrategy());
|
|
jobInfoVO.setTimeExpressionType(timeExpressionType.name());
|
jobInfoVO.setExecuteType(executeType.name());
|
jobInfoVO.setProcessorType(processorType.name());
|
jobInfoVO.setEnable(jobInfoDO.getStatus() == SwitchableStatus.ENABLE.getV());
|
jobInfoVO.setDispatchStrategy(dispatchStrategy.name());
|
|
if (!StringUtils.isEmpty(jobInfoDO.getNotifyUserIds())) {
|
jobInfoVO.setNotifyUserIds(SJ.COMMA_SPLITTER.splitToList(jobInfoDO.getNotifyUserIds()));
|
}else {
|
jobInfoVO.setNotifyUserIds(Lists.newLinkedList());
|
}
|
jobInfoVO.setNextTriggerTimeStr(CommonUtils.formatTime(jobInfoDO.getNextTriggerTime()));
|
|
if (!StringUtils.isEmpty(jobInfoDO.getAlarmConfig())){
|
jobInfoVO.setAlarmConfig(JSON.parseObject(jobInfoDO.getAlarmConfig(),AlarmConfig.class));
|
} else {
|
jobInfoVO.setAlarmConfig(new AlarmConfig());
|
}
|
if (!StringUtils.isEmpty(jobInfoDO.getLifecycle())){
|
jobInfoVO.setLifeCycle(LifeCycle.parse(jobInfoDO.getLifecycle()));
|
}
|
|
if (!StringUtils.isEmpty(jobInfoDO.getLogConfig())) {
|
jobInfoVO.setLogConfig(JSONObject.parseObject(jobInfoDO.getLogConfig(), LogConfig.class));
|
} else {
|
// 不存在 job 配置时防止前端报错
|
jobInfoVO.setLogConfig(new LogConfig());
|
}
|
|
if (StringUtils.isEmpty(jobInfoDO.getAdvancedRuntimeConfig())) {
|
jobInfoVO.setAdvancedRuntimeConfig(new JobAdvancedRuntimeConfig());
|
} else {
|
jobInfoVO.setAdvancedRuntimeConfig(JSONObject.parseObject(jobInfoDO.getAdvancedRuntimeConfig(), JobAdvancedRuntimeConfig.class));
|
}
|
|
return jobInfoVO;
|
}
|
}
|