Skip to content

Commit f07fa15

Browse files
author
weiye
committed
调度中心、执行器更新
1 parent 8e6cb2d commit f07fa15

File tree

86 files changed

+2683
-1592
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+2683
-1592
lines changed

datax-admin/pom.xml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@
3939
<groupId>org.springframework.boot</groupId>
4040
<artifactId>spring-boot-starter-security</artifactId>
4141
</dependency>
42+
43+
<!-- starter-actuator -->
44+
<dependency>
45+
<groupId>org.springframework.boot</groupId>
46+
<artifactId>spring-boot-starter-actuator</artifactId>
47+
</dependency>
48+
4249
<!-- Mybatis Plus -->
4350
<dependency>
4451
<groupId>com.baomidou</groupId>
@@ -131,7 +138,7 @@
131138
<dependency>
132139
<groupId>org.slf4j</groupId>
133140
<artifactId>slf4j-api</artifactId>
134-
<version>${slf4j-api-version}</version>
141+
<version>${slf4j-api.version}</version>
135142
</dependency>
136143

137144
<dependency>
@@ -156,7 +163,7 @@
156163
<dependency>
157164
<groupId>junit</groupId>
158165
<artifactId>junit</artifactId>
159-
<version>${junit-version}</version>
166+
<version>${junit.version}</version>
160167
</dependency>
161168
<!-- mail-starter -->
162169
<dependency>

datax-admin/src/main/java/com/wugui/datax/admin/controller/IndexController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class IndexController {
3333
@GetMapping("/")
3434
@ApiOperation("监控图")
3535
public ReturnT<Map<String, Object>> index() {
36-
return xxlJobService.dashboardInfo();
36+
return new ReturnT<>(xxlJobService.dashboardInfo());
3737
}
3838

3939
@RequestMapping(value = "/chartInfo",method = RequestMethod.POST)
Lines changed: 100 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,119 @@
11
package com.wugui.datax.admin.controller;
22

33
import com.wugui.datatx.core.biz.AdminBiz;
4-
import com.wugui.datax.admin.core.conf.XxlJobScheduler;
5-
import org.springframework.beans.factory.InitializingBean;
6-
import org.springframework.stereotype.Controller;
4+
import com.wugui.datatx.core.biz.model.HandleCallbackParam;
5+
import com.wugui.datatx.core.biz.model.RegistryParam;
6+
import com.wugui.datatx.core.biz.model.ReturnT;
7+
import com.wugui.datatx.core.util.XxlJobRemotingUtil;
8+
import com.wugui.datax.admin.core.conf.XxlJobAdminConfig;
9+
import com.wugui.datax.admin.core.util.JacksonUtil;
10+
import org.springframework.web.bind.annotation.RequestBody;
711
import org.springframework.web.bind.annotation.RequestMapping;
12+
import org.springframework.web.bind.annotation.RestController;
813

9-
import javax.servlet.ServletException;
14+
import javax.annotation.Resource;
1015
import javax.servlet.http.HttpServletRequest;
11-
import javax.servlet.http.HttpServletResponse;
12-
import java.io.IOException;
16+
import java.util.List;
1317

1418
/**
1519
* Created by xuxueli on 17/5/10.
1620
*/
17-
@Controller
18-
public class JobApiController implements InitializingBean {
21+
@RestController
22+
@RequestMapping("/api")
23+
public class JobApiController {
1924

25+
@Resource
26+
private AdminBiz adminBiz;
2027

21-
@Override
22-
public void afterPropertiesSet() throws Exception {
2328

29+
// ---------------------- admin biz ----------------------
30+
31+
/**
32+
* callback
33+
*
34+
* @param data
35+
* @return
36+
*/
37+
@RequestMapping("/callback")
38+
public ReturnT<String> callback(HttpServletRequest request, @RequestBody(required = false) String data) {
39+
// valid
40+
if (XxlJobAdminConfig.getAdminConfig().getAccessToken()!=null
41+
&& XxlJobAdminConfig.getAdminConfig().getAccessToken().trim().length()>0
42+
&& !XxlJobAdminConfig.getAdminConfig().getAccessToken().equals(request.getHeader(XxlJobRemotingUtil.XXL_RPC_ACCESS_TOKEN))) {
43+
return new ReturnT<String>(ReturnT.FAIL_CODE, "The access token is wrong.");
44+
}
45+
46+
// param
47+
List<HandleCallbackParam> callbackParamList = null;
48+
try {
49+
callbackParamList = JacksonUtil.readValue(data, List.class, HandleCallbackParam.class);
50+
} catch (Exception e) { }
51+
if (callbackParamList==null || callbackParamList.size()==0) {
52+
return new ReturnT<String>(ReturnT.FAIL_CODE, "The request data invalid.");
53+
}
54+
55+
// invoke
56+
return adminBiz.callback(callbackParamList);
2457
}
2558

26-
@RequestMapping(AdminBiz.MAPPING)
27-
public void api(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
28-
XxlJobScheduler.invokeAdminService(request, response);
59+
60+
61+
/**
62+
* registry
63+
*
64+
* @param data
65+
* @return
66+
*/
67+
@RequestMapping("/registry")
68+
public ReturnT<String> registry(HttpServletRequest request, @RequestBody(required = false) String data) {
69+
// valid
70+
if (XxlJobAdminConfig.getAdminConfig().getAccessToken()!=null
71+
&& XxlJobAdminConfig.getAdminConfig().getAccessToken().trim().length()>0
72+
&& !XxlJobAdminConfig.getAdminConfig().getAccessToken().equals(request.getHeader(XxlJobRemotingUtil.XXL_RPC_ACCESS_TOKEN))) {
73+
return new ReturnT<String>(ReturnT.FAIL_CODE, "The access token is wrong.");
74+
}
75+
76+
// param
77+
RegistryParam registryParam = null;
78+
try {
79+
registryParam = JacksonUtil.readValue(data, RegistryParam.class);
80+
} catch (Exception e) {}
81+
if (registryParam == null) {
82+
return new ReturnT<String>(ReturnT.FAIL_CODE, "The request data invalid.");
83+
}
84+
85+
// invoke
86+
return adminBiz.registry(registryParam);
87+
}
88+
89+
/**
90+
* registry remove
91+
*
92+
* @param data
93+
* @return
94+
*/
95+
@RequestMapping("/registryRemove")
96+
public ReturnT<String> registryRemove(HttpServletRequest request, @RequestBody(required = false) String data) {
97+
// valid
98+
if (XxlJobAdminConfig.getAdminConfig().getAccessToken()!=null
99+
&& XxlJobAdminConfig.getAdminConfig().getAccessToken().trim().length()>0
100+
&& !XxlJobAdminConfig.getAdminConfig().getAccessToken().equals(request.getHeader(XxlJobRemotingUtil.XXL_RPC_ACCESS_TOKEN))) {
101+
return new ReturnT<String>(ReturnT.FAIL_CODE, "The access token is wrong.");
102+
}
103+
104+
// param
105+
RegistryParam registryParam = null;
106+
try {
107+
registryParam = JacksonUtil.readValue(data, RegistryParam.class);
108+
} catch (Exception e) {}
109+
if (registryParam == null) {
110+
return new ReturnT<String>(ReturnT.FAIL_CODE, "The request data invalid.");
111+
}
112+
113+
// invoke
114+
return adminBiz.registryRemove(registryParam);
29115
}
30116

117+
// ---------------------- job biz ----------------------
31118

32119
}

datax-admin/src/main/java/com/wugui/datax/admin/controller/JobCodeController.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,18 @@
22

33
import com.wugui.datatx.core.biz.model.ReturnT;
44
import com.wugui.datatx.core.glue.GlueTypeEnum;
5+
import com.wugui.datax.admin.core.util.I18nUtil;
56
import com.wugui.datax.admin.entity.XxlJobInfo;
67
import com.wugui.datax.admin.entity.XxlJobLogGlue;
7-
import com.wugui.datax.admin.core.util.I18nUtil;
88
import com.wugui.datax.admin.mapper.XxlJobInfoMapper;
99
import com.wugui.datax.admin.mapper.XxlJobLogGlueMapper;
1010
import io.swagger.annotations.Api;
1111
import io.swagger.annotations.ApiOperation;
1212
import org.springframework.ui.Model;
13-
import org.springframework.web.bind.annotation.*;
13+
import org.springframework.web.bind.annotation.GetMapping;
14+
import org.springframework.web.bind.annotation.RequestMapping;
15+
import org.springframework.web.bind.annotation.RequestMethod;
16+
import org.springframework.web.bind.annotation.RestController;
1417

1518
import javax.annotation.Resource;
1619
import javax.servlet.http.HttpServletRequest;
@@ -56,7 +59,7 @@ public String index(HttpServletRequest request, Model model, int jobId) {
5659

5760
@RequestMapping(value = "/save",method = RequestMethod.POST)
5861
@ApiOperation("保存任务状态")
59-
public ReturnT<String> save(int id, String glueSource, String glueRemark) {
62+
public ReturnT<String> save(Model model, int id, String glueSource, String glueRemark) {
6063
// valid
6164
if (glueRemark==null) {
6265
return new ReturnT<String>(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_glue_remark")) );
@@ -68,11 +71,13 @@ public ReturnT<String> save(int id, String glueSource, String glueRemark) {
6871
if (exists_jobInfo == null) {
6972
return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
7073
}
71-
74+
7275
// update new code
7376
exists_jobInfo.setGlueSource(glueSource);
7477
exists_jobInfo.setGlueRemark(glueRemark);
7578
exists_jobInfo.setGlueUpdatetime(new Date());
79+
80+
exists_jobInfo.setUpdateTime(new Date());
7681
xxlJobInfoMapper.update(exists_jobInfo);
7782

7883
// log old code
@@ -81,6 +86,9 @@ public ReturnT<String> save(int id, String glueSource, String glueRemark) {
8186
xxlJobLogGlue.setGlueType(exists_jobInfo.getGlueType());
8287
xxlJobLogGlue.setGlueSource(glueSource);
8388
xxlJobLogGlue.setGlueRemark(glueRemark);
89+
90+
xxlJobLogGlue.setAddTime(new Date());
91+
xxlJobLogGlue.setUpdateTime(new Date());
8492
xxlJobLogGlueMapper.save(xxlJobLogGlue);
8593

8694
// remove code backup more than 30

datax-admin/src/main/java/com/wugui/datax/admin/controller/JobGroupController.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import com.wugui.datatx.core.biz.model.ReturnT;
44
import com.wugui.datatx.core.enums.RegistryConfig;
5+
import com.wugui.datax.admin.core.util.I18nUtil;
56
import com.wugui.datax.admin.entity.XxlJobGroup;
67
import com.wugui.datax.admin.entity.XxlJobRegistry;
7-
import com.wugui.datax.admin.core.util.I18nUtil;
88
import com.wugui.datax.admin.mapper.XxlJobGroupMapper;
99
import com.wugui.datax.admin.mapper.XxlJobInfoMapper;
1010
import com.wugui.datax.admin.mapper.XxlJobRegistryMapper;
@@ -14,10 +14,7 @@
1414
import org.springframework.web.bind.annotation.*;
1515

1616
import javax.annotation.Resource;
17-
import java.util.ArrayList;
18-
import java.util.Collections;
19-
import java.util.HashMap;
20-
import java.util.List;
17+
import java.util.*;
2118

2219
/**
2320
* job group controller
@@ -47,7 +44,7 @@ public String index(Model model) {
4744

4845
@PostMapping("/save")
4946
@ApiOperation("新建执行器")
50-
public ReturnT<String> save(@RequestBody XxlJobGroup xxlJobGroup){
47+
public ReturnT<String> save(XxlJobGroup xxlJobGroup){
5148

5249
// valid
5350
if (xxlJobGroup.getAppName()==null || xxlJobGroup.getAppName().trim().length()==0) {
@@ -77,7 +74,7 @@ public ReturnT<String> save(@RequestBody XxlJobGroup xxlJobGroup){
7774

7875
@RequestMapping("/update")
7976
@ApiOperation("更新执行器")
80-
public ReturnT<String> update(@RequestBody XxlJobGroup xxlJobGroup){
77+
public ReturnT<String> update(XxlJobGroup xxlJobGroup){
8178
// valid
8279
if (xxlJobGroup.getAppName()==null || xxlJobGroup.getAppName().trim().length()==0) {
8380
return new ReturnT<String>(500, (I18nUtil.getString("system_please_input")+"AppName") );
@@ -120,7 +117,7 @@ public ReturnT<String> update(@RequestBody XxlJobGroup xxlJobGroup){
120117

121118
private List<String> findRegistryByAppName(String appNameParam){
122119
HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();
123-
List<XxlJobRegistry> list = xxlJobRegistryMapper.findAll(RegistryConfig.DEAD_TIMEOUT);
120+
List<XxlJobRegistry> list = xxlJobRegistryMapper.findAll(RegistryConfig.DEAD_TIMEOUT, new Date());
124121
if (list != null) {
125122
for (XxlJobRegistry item: list) {
126123
if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) {

datax-admin/src/main/java/com/wugui/datax/admin/controller/JobInfoController.java

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@
44
import com.wugui.datatx.core.biz.model.ReturnT;
55
import com.wugui.datatx.core.enums.ExecutorBlockStrategyEnum;
66
import com.wugui.datatx.core.glue.GlueTypeEnum;
7-
import com.wugui.datax.admin.exception.XxlJobException;
8-
import com.wugui.datax.admin.entity.XxlJobGroup;
9-
import com.wugui.datax.admin.entity.XxlJobInfo;
10-
import com.wugui.datax.admin.entity.XxlJobUser;
7+
import com.wugui.datatx.core.util.DateUtil;
8+
import com.wugui.datax.admin.core.cron.CronExpression;
119
import com.wugui.datax.admin.core.route.ExecutorRouteStrategyEnum;
1210
import com.wugui.datax.admin.core.thread.JobTriggerPoolHelper;
1311
import com.wugui.datax.admin.core.trigger.TriggerTypeEnum;
1412
import com.wugui.datax.admin.core.util.I18nUtil;
13+
import com.wugui.datax.admin.entity.XxlJobGroup;
14+
import com.wugui.datax.admin.entity.XxlJobInfo;
15+
import com.wugui.datax.admin.entity.XxlJobUser;
16+
import com.wugui.datax.admin.exception.XxlJobException;
1517
import com.wugui.datax.admin.mapper.XxlJobGroupMapper;
1618
import com.wugui.datax.admin.service.XxlJobService;
1719
import com.wugui.datax.admin.service.impl.LoginService;
@@ -22,10 +24,8 @@
2224

2325
import javax.annotation.Resource;
2426
import javax.servlet.http.HttpServletRequest;
25-
import java.util.ArrayList;
26-
import java.util.Arrays;
27-
import java.util.List;
28-
import java.util.Map;
27+
import java.text.ParseException;
28+
import java.util.*;
2929

3030
/**
3131
* index controller
@@ -46,16 +46,16 @@ public class JobInfoController {
4646
public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "-1") int jobGroup) {
4747

4848
// 枚举-字典
49-
model.addAttribute("ExecutorRouteStrategyEnum", ExecutorRouteStrategyEnum.values()); // 路由策略-列表
50-
model.addAttribute("GlueTypeEnum", GlueTypeEnum.values()); // Glue类型-字典
51-
model.addAttribute("ExecutorBlockStrategyEnum", ExecutorBlockStrategyEnum.values()); // 阻塞处理策略-字典
49+
model.addAttribute("ExecutorRouteStrategyEnum", ExecutorRouteStrategyEnum.values()); // 路由策略-列表
50+
model.addAttribute("GlueTypeEnum", GlueTypeEnum.values()); // Glue类型-字典
51+
model.addAttribute("ExecutorBlockStrategyEnum", ExecutorBlockStrategyEnum.values()); // 阻塞处理策略-字典
5252

5353
// 执行器列表
54-
List<XxlJobGroup> jobGroupList_all = xxlJobGroupMapper.findAll();
54+
List<XxlJobGroup> jobGroupList_all = xxlJobGroupMapper.findAll();
5555

5656
// filter group
5757
List<XxlJobGroup> jobGroupList = filterJobGroupByRole(request, jobGroupList_all);
58-
if (jobGroupList == null || jobGroupList.size() == 0) {
58+
if (jobGroupList==null || jobGroupList.size()==0) {
5959
throw new XxlJobException(I18nUtil.getString("jobgroup_empty"));
6060
}
6161

@@ -65,18 +65,18 @@ public String index(HttpServletRequest request, Model model, @RequestParam(requi
6565
return "jobinfo/jobinfo.index";
6666
}
6767

68-
public static List<XxlJobGroup> filterJobGroupByRole(HttpServletRequest request, List<XxlJobGroup> jobGroupList_all) {
68+
public static List<XxlJobGroup> filterJobGroupByRole(HttpServletRequest request, List<XxlJobGroup> jobGroupList_all){
6969
List<XxlJobGroup> jobGroupList = new ArrayList<>();
70-
if (jobGroupList_all != null && jobGroupList_all.size() > 0) {
70+
if (jobGroupList_all!=null && jobGroupList_all.size()>0) {
7171
XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
7272
if ("1".equals(loginUser.getRole())) {
7373
jobGroupList = jobGroupList_all;
7474
} else {
7575
List<String> groupIdStrs = new ArrayList<>();
76-
if (loginUser.getPermission() != null && loginUser.getPermission().trim().length() > 0) {
76+
if (loginUser.getPermission()!=null && loginUser.getPermission().trim().length()>0) {
7777
groupIdStrs = Arrays.asList(loginUser.getPermission().trim().split(","));
7878
}
79-
for (XxlJobGroup groupItem : jobGroupList_all) {
79+
for (XxlJobGroup groupItem:jobGroupList_all) {
8080
if (groupIdStrs.contains(String.valueOf(groupItem.getId()))) {
8181
jobGroupList.add(groupItem);
8282
}
@@ -143,4 +143,23 @@ public ReturnT<String> triggerJob(int id, String executorParam) {
143143
return ReturnT.SUCCESS;
144144
}
145145

146+
@RequestMapping("/nextTriggerTime")
147+
public ReturnT<List<String>> nextTriggerTime(String cron) {
148+
List<String> result = new ArrayList<>();
149+
try {
150+
CronExpression cronExpression = new CronExpression(cron);
151+
Date lastTime = new Date();
152+
for (int i = 0; i < 5; i++) {
153+
lastTime = cronExpression.getNextValidTimeAfter(lastTime);
154+
if (lastTime != null) {
155+
result.add(DateUtil.formatDateTime(lastTime));
156+
} else {
157+
break;
158+
}
159+
}
160+
} catch (ParseException e) {
161+
return new ReturnT<List<String>>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid"));
162+
}
163+
return new ReturnT<List<String>>(result);
164+
}
146165
}

0 commit comments

Comments
 (0)