WangHan
2024-09-12 d5855a4926926698b740bc6c7ba489de47adb68b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
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;
    }
}