Skip to content

Commit 632c3d4

Browse files
committed
Merge pull request #32 from qq254963746/develop
Develop
2 parents b2712c2 + 88fa019 commit 632c3d4

File tree

129 files changed

+933
-389
lines changed

Some content is hidden

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

129 files changed

+933
-389
lines changed

lts-admin/pom.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,21 @@
5656
<artifactId>lts-queue-mongo</artifactId>
5757
<version>${project.version}</version>
5858
</dependency>
59+
<dependency>
60+
<groupId>com.lts</groupId>
61+
<artifactId>lts-logger-api</artifactId>
62+
<version>${project.version}</version>
63+
</dependency>
64+
<dependency>
65+
<groupId>com.lts</groupId>
66+
<artifactId>lts-logger-mysql</artifactId>
67+
<version>${project.version}</version>
68+
</dependency>
69+
<dependency>
70+
<groupId>com.lts</groupId>
71+
<artifactId>lts-logger-mongo</artifactId>
72+
<version>${project.version}</version>
73+
</dependency>
5974
<dependency>
6075
<groupId>log4j</groupId>
6176
<artifactId>log4j</artifactId>

lts-admin/src/main/java/com/lts/job/web/cluster/AdminApplication.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.lts.job.web.cluster;
22

3+
import com.lts.job.biz.logger.JobLogger;
34
import com.lts.job.core.Application;
45
import com.lts.job.core.cluster.Node;
56
import com.lts.job.queue.*;
@@ -14,6 +15,7 @@ public class AdminApplication extends Application {
1415
private ExecutingJobQueue executingJobQueue;
1516
private JobFeedbackQueue jobFeedbackQueue;
1617
private NodeGroupStore nodeGroupStore;
18+
private JobLogger jobLogger;
1719
private Node node;
1820

1921
public Node getNode() {
@@ -63,4 +65,12 @@ public JobFeedbackQueue getJobFeedbackQueue() {
6365
public void setJobFeedbackQueue(JobFeedbackQueue jobFeedbackQueue) {
6466
this.jobFeedbackQueue = jobFeedbackQueue;
6567
}
68+
69+
public JobLogger getJobLogger() {
70+
return jobLogger;
71+
}
72+
73+
public void setJobLogger(JobLogger jobLogger) {
74+
this.jobLogger = jobLogger;
75+
}
6676
}

lts-admin/src/main/java/com/lts/job/web/cluster/RegistryService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
import com.lts.job.core.registry.NotifyListener;
77
import com.lts.job.core.registry.Registry;
88
import com.lts.job.core.registry.RegistryFactory;
9-
import com.lts.job.core.util.CollectionUtils;
10-
import com.lts.job.core.util.ConcurrentHashSet;
11-
import com.lts.job.core.util.StringUtils;
9+
import com.lts.job.core.commons.utils.CollectionUtils;
10+
import com.lts.job.core.commons.collect.ConcurrentHashSet;
11+
import com.lts.job.core.commons.utils.StringUtils;
1212
import com.lts.job.web.request.NodeRequest;
1313
import com.lts.job.web.support.AppConfigurer;
1414
import com.lts.job.web.support.memorydb.NodeMemoryDB;

lts-admin/src/main/java/com/lts/job/web/controller/api/JobQueueApiController.java

Lines changed: 105 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
package com.lts.job.web.controller.api;
22

3+
import com.lts.job.biz.logger.domain.JobLogPo;
4+
import com.lts.job.biz.logger.domain.JobLoggerRequest;
5+
import com.lts.job.core.commons.utils.*;
36
import com.lts.job.core.domain.JobQueueRequest;
47
import com.lts.job.core.domain.PageResponse;
5-
import com.lts.job.core.exception.CronException;
68
import com.lts.job.core.support.CronExpression;
7-
import com.lts.job.core.util.CollectionUtils;
8-
import com.lts.job.core.util.StringUtils;
99
import com.lts.job.queue.domain.JobPo;
10+
import com.lts.job.queue.exception.DuplicateJobException;
1011
import com.lts.job.web.cluster.AdminApplication;
1112
import com.lts.job.web.controller.AbstractController;
1213
import com.lts.job.web.vo.RestfulResponse;
1314
import org.springframework.beans.factory.annotation.Autowired;
14-
import org.springframework.web.bind.annotation.RequestBody;
1515
import org.springframework.web.bind.annotation.RequestMapping;
1616
import org.springframework.web.bind.annotation.RestController;
1717

18-
import java.util.List;
19-
import java.util.Map;
18+
import java.text.ParseException;
19+
import java.util.Date;
2020

2121
/**
2222
* @author Robert HG (254963746@qq.com) on 6/6/15.
@@ -63,7 +63,14 @@ public RestfulResponse cronJobUpdate(JobQueueRequest request) {
6363
// 检查参数
6464
// 1. 检测 cronExpression是否是正确的
6565
if (StringUtils.isNotEmpty(request.getCronExpression())) {
66-
if (!CronExpression.isValidExpression(request.getCronExpression())) {
66+
try {
67+
CronExpression expression = new CronExpression(request.getCronExpression());
68+
if (expression.getTimeAfter(new Date()) == null) {
69+
response.setSuccess(false);
70+
response.setMsg(StringUtils.format("该CronExpression={} 已经没有执行时间点!", request.getCronExpression()));
71+
return response;
72+
}
73+
} catch (ParseException e) {
6774
response.setSuccess(false);
6875
response.setMsg("请输入正确的 CronExpression!");
6976
return response;
@@ -87,4 +94,95 @@ public RestfulResponse cronJobDelete(JobQueueRequest request) {
8794
return response;
8895
}
8996

97+
@RequestMapping("/job-logger/job-logger-get")
98+
public RestfulResponse jobLoggerGet(JobLoggerRequest request) {
99+
RestfulResponse response = new RestfulResponse();
100+
101+
try {
102+
Assert.hasLength(request.getTaskId(), "taskId不能为空!");
103+
Assert.hasLength(request.getTaskTrackerNodeGroup(), "taskTrackerNodeGroup不能为空!");
104+
} catch (IllegalArgumentException e) {
105+
response.setSuccess(false);
106+
response.setMsg(e.getMessage());
107+
return response;
108+
}
109+
110+
PageResponse<JobLogPo> pageResponse = application.getJobLogger().search(request);
111+
response.setResults(pageResponse.getResults());
112+
response.setRows(pageResponse.getRows());
113+
114+
response.setSuccess(true);
115+
return response;
116+
}
117+
118+
@RequestMapping("/job-queue/job-add")
119+
public RestfulResponse jobAdd(JobQueueRequest request) {
120+
RestfulResponse response = new RestfulResponse();
121+
// 表单check
122+
123+
Long triggerTime = null;
124+
try {
125+
Assert.hasLength(request.getTaskId(), "taskId不能为空!");
126+
Assert.hasLength(request.getTaskTrackerNodeGroup(), "taskTrackerNodeGroup不能为空!");
127+
Assert.hasLength(request.getSubmitNodeGroup(), "submitNodeGroup不能为空!");
128+
129+
if (StringUtils.isNotEmpty(request.getCronExpression())) {
130+
try {
131+
CronExpression expression = new CronExpression(request.getCronExpression());
132+
Date nextTime = expression.getTimeAfter(new Date());
133+
if (nextTime == null) {
134+
response.setSuccess(false);
135+
response.setMsg(StringUtils.format("该CronExpression={} 已经没有执行时间点!", request.getCronExpression()));
136+
return response;
137+
} else {
138+
triggerTime = nextTime.getTime();
139+
}
140+
} catch (ParseException e) {
141+
response.setSuccess(false);
142+
response.setMsg("请输入正确的 CronExpression!");
143+
return response;
144+
}
145+
}
146+
147+
} catch (IllegalArgumentException e) {
148+
response.setSuccess(false);
149+
response.setMsg(e.getMessage());
150+
return response;
151+
}
152+
153+
addJob(request, triggerTime);
154+
155+
response.setSuccess(true);
156+
return response;
157+
}
158+
159+
private void addJob(JobQueueRequest request, Long triggerTime) {
160+
JobPo jobPo = new JobPo();
161+
// 这里暂时用UUID来代替
162+
jobPo.setJobId(StringUtils.generateUUID());
163+
jobPo.setCronExpression(request.getCronExpression());
164+
jobPo.setExtParams(request.getExtParams());
165+
jobPo.setGmtCreated(DateUtils.currentTimeMillis());
166+
jobPo.setGmtModified(jobPo.getGmtCreated());
167+
jobPo.setNeedFeedback(request.getNeedFeedback());
168+
jobPo.setPriority(request.getPriority());
169+
jobPo.setTaskId(request.getTaskId());
170+
jobPo.setSubmitNodeGroup(request.getSubmitNodeGroup());
171+
jobPo.setTaskTrackerNodeGroup(request.getTaskTrackerNodeGroup());
172+
if (request.getTriggerTime() != null) {
173+
jobPo.setTriggerTime(request.getTriggerTime().getTime());
174+
}
175+
176+
if (jobPo.isSchedule()) {
177+
application.getCronJobQueue().add(jobPo);
178+
if (triggerTime != null) {
179+
jobPo.setTriggerTime(triggerTime);
180+
}
181+
}
182+
if (jobPo.getTriggerTime() == null) {
183+
jobPo.setTriggerTime(DateUtils.currentTimeMillis());
184+
}
185+
186+
application.getExecutableJobQueue().add(jobPo);
187+
}
90188
}

lts-admin/src/main/java/com/lts/job/web/controller/api/NodeApiController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.lts.job.web.controller.api;
22

33
import com.lts.job.core.cluster.Node;
4-
import com.lts.job.core.util.CollectionUtils;
5-
import com.lts.job.core.util.StringUtils;
4+
import com.lts.job.core.commons.utils.CollectionUtils;
5+
import com.lts.job.core.commons.utils.StringUtils;
66
import com.lts.job.web.cluster.RegistryService;
77
import com.lts.job.web.controller.AbstractController;
88
import com.lts.job.web.request.NodeRequest;

lts-admin/src/main/java/com/lts/job/web/controller/ui/UIController.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.lts.job.web.controller.ui;
22

33
import com.lts.job.core.cluster.NodeType;
4+
import com.lts.job.core.commons.utils.DateUtils;
45
import com.lts.job.queue.domain.NodeGroupPo;
56
import com.lts.job.web.cluster.AdminApplication;
67
import com.lts.job.web.cluster.RegistryService;
@@ -9,6 +10,7 @@
910
import org.springframework.ui.Model;
1011
import org.springframework.web.bind.annotation.RequestMapping;
1112

13+
import java.util.Date;
1214
import java.util.List;
1315

1416
/**
@@ -29,6 +31,29 @@ public String nodeManagerUI(Model model) {
2931
return "node-manager";
3032
}
3133

34+
@RequestMapping("job-queue/job-add-ui")
35+
public String addJobUI(Model model) {
36+
setAttr(model);
37+
return "job-add";
38+
}
39+
40+
@RequestMapping("job-logger/job-logger")
41+
public String jobLoggerUI(Model model, String taskId, String taskTrackerNodeGroup,
42+
Date startTimestamp, Date endTimestamp) {
43+
model.addAttribute("taskId", taskId);
44+
model.addAttribute("taskTrackerNodeGroup", taskTrackerNodeGroup);
45+
if (startTimestamp == null) {
46+
startTimestamp = DateUtils.addDay(new Date(), -3);
47+
}
48+
model.addAttribute("startTimestamp", DateUtils.formatYMD_HMS(startTimestamp));
49+
if (endTimestamp == null) {
50+
endTimestamp = new Date();
51+
}
52+
model.addAttribute("endTimestamp", DateUtils.formatYMD_HMS(endTimestamp));
53+
setAttr(model);
54+
return "job-logger";
55+
}
56+
3257
@RequestMapping("job-queue/cron-job-queue")
3358
public String cronJobQueueUI(Model model) {
3459
setAttr(model);
@@ -47,10 +72,11 @@ public String executingJobQueueUI(Model model) {
4772
return "executing-job-queue";
4873
}
4974

50-
private void setAttr(Model model){
75+
private void setAttr(Model model) {
5176
List<NodeGroupPo> jobClientNodeGroups = application.getNodeGroupStore().getNodeGroup(NodeType.JOB_CLIENT);
5277
model.addAttribute("jobClientNodeGroups", jobClientNodeGroups);
5378
List<NodeGroupPo> taskTrackerNodeGroups = application.getNodeGroupStore().getNodeGroup(NodeType.TASK_TRACKER);
5479
model.addAttribute("taskTrackerNodeGroups", taskTrackerNodeGroups);
5580
}
81+
5682
}

lts-admin/src/main/java/com/lts/job/web/support/AdminAppFactoryBean.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.lts.job.web.support;
22

3+
import com.lts.job.biz.logger.JobLoggerFactory;
34
import com.lts.job.core.cluster.Config;
45
import com.lts.job.core.cluster.Node;
56
import com.lts.job.core.cluster.NodeType;
67
import com.lts.job.core.extension.ExtensionLoader;
7-
import com.lts.job.core.util.StringUtils;
8+
import com.lts.job.core.commons.utils.StringUtils;
89
import com.lts.job.queue.*;
910
import com.lts.job.web.cluster.AdminApplication;
1011
import org.springframework.beans.factory.FactoryBean;
@@ -25,6 +26,8 @@ public class AdminAppFactoryBean implements FactoryBean<AdminApplication>, Initi
2526
ExecutingJobQueueFactory.class).getAdaptiveExtension();
2627
NodeGroupStoreFactory nodeGroupStoreFactory = ExtensionLoader.getExtensionLoader(
2728
NodeGroupStoreFactory.class).getAdaptiveExtension();
29+
JobLoggerFactory jobLoggerFactory = ExtensionLoader.getExtensionLoader(
30+
JobLoggerFactory.class).getAdaptiveExtension();
2831

2932
private AdminApplication application;
3033

@@ -70,6 +73,7 @@ public void afterPropertiesSet() throws Exception {
7073
application.setExecutableJobQueue(executableJobQueueFactory.getQueue(config));
7174
application.setExecutingJobQueue(executingJobQueueFactory.getQueue(config));
7275
application.setNodeGroupStore(nodeGroupStoreFactory.getStore(config));
76+
application.setJobLogger(jobLoggerFactory.getJobLogger(config));
7377
}
7478

7579
}

lts-admin/src/main/java/com/lts/job/web/support/DateEditor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.lts.job.web.support;
22

3-
import com.lts.job.core.util.DateUtils;
3+
import com.lts.job.core.commons.utils.DateUtils;
44
import org.springframework.util.StringUtils;
55

66
import java.beans.PropertyEditorSupport;

lts-admin/src/main/java/com/lts/job/web/support/ExceptionHandlerResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.lts.job.web.support;
22

3-
import com.lts.job.core.util.JSONUtils;
3+
import com.lts.job.core.commons.utils.JSONUtils;
44
import com.lts.job.web.vo.RestfulResponse;
55
import org.slf4j.Logger;
66
import org.slf4j.LoggerFactory;

lts-admin/src/main/java/com/lts/job/web/support/MapEditor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.lts.job.web.support;
22

33
import com.alibaba.fastjson.TypeReference;
4-
import com.lts.job.core.util.JSONUtils;
4+
import com.lts.job.core.commons.utils.JSONUtils;
55
import org.springframework.util.StringUtils;
66

77
import java.beans.PropertyEditorSupport;

0 commit comments

Comments
 (0)