Skip to content

Commit 86b7b35

Browse files
committed
Merge pull request #122 from qq254963746/develop
LTS-Admin 使用JobClient提交任务; 增加延迟批量输盘业务日志测试;
2 parents 4c81093 + 7d0dadb commit 86b7b35

File tree

18 files changed

+330
-72
lines changed

18 files changed

+330
-72
lines changed

lts-admin/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@
4040
<artifactId>lts-core</artifactId>
4141
<version>${project.version}</version>
4242
</dependency>
43+
<dependency>
44+
<groupId>com.lts</groupId>
45+
<artifactId>lts-jobclient</artifactId>
46+
<version>${project.version}</version>
47+
</dependency>
4348
<dependency>
4449
<groupId>com.lts</groupId>
4550
<artifactId>lts-queue-api</artifactId>

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

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,25 @@
33
import com.lts.biz.logger.domain.JobLogPo;
44
import com.lts.biz.logger.domain.JobLoggerRequest;
55
import com.lts.core.commons.utils.Assert;
6+
import com.lts.core.commons.utils.CollectionUtils;
67
import com.lts.core.commons.utils.StringUtils;
8+
import com.lts.core.domain.Job;
79
import com.lts.core.support.CronExpression;
8-
import com.lts.core.support.SystemClock;
10+
import com.lts.jobclient.domain.Response;
911
import com.lts.queue.domain.JobPo;
1012
import com.lts.web.cluster.AdminApplication;
1113
import com.lts.web.controller.AbstractController;
1214
import com.lts.web.request.JobQueueRequest;
1315
import com.lts.web.response.PageResponse;
16+
import com.lts.web.support.LtsAdminJobClient;
1417
import com.lts.web.vo.RestfulResponse;
1518
import org.springframework.beans.factory.annotation.Autowired;
1619
import org.springframework.web.bind.annotation.RequestMapping;
1720
import org.springframework.web.bind.annotation.RestController;
1821

1922
import java.text.ParseException;
2023
import java.util.Date;
24+
import java.util.Map;
2125

2226
/**
2327
* @author Robert HG ([email protected]) on 6/6/15.
@@ -27,6 +31,8 @@ public class JobQueueApiController extends AbstractController {
2731

2832
@Autowired
2933
AdminApplication application;
34+
@Autowired
35+
LtsAdminJobClient ltsAdminJobClient;
3036

3137
@RequestMapping("/job-queue/cron-job-get")
3238
public RestfulResponse cronJobGet(JobQueueRequest request) {
@@ -149,7 +155,7 @@ public RestfulResponse cronJobDelete(JobQueueRequest request) {
149155
return response;
150156
}
151157
boolean success = application.getCronJobQueue().remove(request.getJobId());
152-
if(success){
158+
if (success) {
153159
try {
154160
application.getExecutableJobQueue().remove(request.getTaskTrackerNodeGroup(), request.getJobId());
155161
} catch (Exception e) {
@@ -187,7 +193,7 @@ public RestfulResponse executableJobDelete(JobQueueRequest request) {
187193
}
188194
}
189195
response.setSuccess(true);
190-
} else{
196+
} else {
191197
response.setSuccess(false);
192198
response.setMsg("更新失败,该条任务可能已经删除.");
193199
}
@@ -199,14 +205,14 @@ public RestfulResponse executableJobDelete(JobQueueRequest request) {
199205
public RestfulResponse jobLoggerGet(JobLoggerRequest request) {
200206
RestfulResponse response = new RestfulResponse();
201207

202-
try {
208+
// try {
203209
// Assert.hasLength(request.getTaskId(), "taskId不能为空!");
204210
// Assert.hasLength(request.getTaskTrackerNodeGroup(), "taskTrackerNodeGroup不能为空!");
205-
} catch (IllegalArgumentException e) {
206-
response.setSuccess(false);
207-
response.setMsg(e.getMessage());
208-
return response;
209-
}
211+
// } catch (IllegalArgumentException e) {
212+
// response.setSuccess(false);
213+
// response.setMsg(e.getMessage());
214+
// return response;
215+
// }
210216

211217
PageResponse<JobLogPo> pageResponse = application.getJobLogger().search(request);
212218
response.setResults(pageResponse.getResults());
@@ -221,7 +227,6 @@ public RestfulResponse jobAdd(JobQueueRequest request) {
221227
RestfulResponse response = new RestfulResponse();
222228
// 表单check
223229

224-
Long triggerTime = null;
225230
try {
226231
Assert.hasLength(request.getTaskId(), "taskId不能为空!");
227232
Assert.hasLength(request.getTaskTrackerNodeGroup(), "taskTrackerNodeGroup不能为空!");
@@ -236,7 +241,7 @@ public RestfulResponse jobAdd(JobQueueRequest request) {
236241
response.setMsg(StringUtils.format("该CronExpression={} 已经没有执行时间点!", request.getCronExpression()));
237242
return response;
238243
} else {
239-
triggerTime = nextTime.getTime();
244+
request.setTriggerTime(nextTime);
240245
}
241246
} catch (ParseException e) {
242247
response.setSuccess(false);
@@ -251,38 +256,36 @@ public RestfulResponse jobAdd(JobQueueRequest request) {
251256
return response;
252257
}
253258

254-
addJob(request, triggerTime);
255-
256-
response.setSuccess(true);
259+
Response ltsResponse = addJob(request);
260+
if (ltsResponse.isSuccess()) {
261+
response.setSuccess(true);
262+
} else {
263+
response.setSuccess(false);
264+
response.setMsg("提交失败: " + ltsResponse.getMsg());
265+
response.setCode(ltsResponse.getCode());
266+
}
257267
return response;
258268
}
259269

260-
private void addJob(JobQueueRequest request, Long triggerTime) {
261-
JobPo jobPo = new JobPo();
262-
// 这里暂时用UUID来代替
263-
jobPo.setJobId(StringUtils.generateUUID());
264-
jobPo.setCronExpression(request.getCronExpression());
265-
jobPo.setExtParams(request.getExtParams());
266-
jobPo.setGmtCreated(SystemClock.now());
267-
jobPo.setGmtModified(jobPo.getGmtCreated());
268-
jobPo.setNeedFeedback(request.getNeedFeedback());
269-
jobPo.setPriority(request.getPriority());
270-
jobPo.setTaskId(request.getTaskId());
271-
jobPo.setSubmitNodeGroup(request.getSubmitNodeGroup());
272-
jobPo.setTaskTrackerNodeGroup(request.getTaskTrackerNodeGroup());
273-
if (request.getTriggerTime() != null) {
274-
jobPo.setTriggerTime(request.getTriggerTime().getTime());
275-
}
270+
private Response addJob(JobQueueRequest request) {
276271

277-
if (jobPo.isSchedule()) {
278-
application.getCronJobQueue().add(jobPo);
279-
if (triggerTime != null) {
280-
jobPo.setTriggerTime(triggerTime);
272+
Job job = new Job();
273+
job.setTaskId(request.getTaskId());
274+
if (CollectionUtils.isNotEmpty(request.getExtParams())) {
275+
for (Map.Entry<String, String> entry : request.getExtParams().entrySet()) {
276+
job.setParam(entry.getKey(), entry.getValue());
281277
}
282278
}
283-
if (jobPo.getTriggerTime() == null) {
284-
jobPo.setTriggerTime(SystemClock.now());
285-
}
286-
application.getExecutableJobQueue().add(jobPo);
279+
// 执行节点的group名称
280+
job.setTaskTrackerNodeGroup(request.getTaskTrackerNodeGroup());
281+
job.setSubmitNodeGroup(request.getSubmitNodeGroup());
282+
283+
job.setNeedFeedback(request.getNeedFeedback());
284+
// 这个是 cron expression 和 quartz 一样,可选
285+
job.setCronExpression(request.getCronExpression());
286+
job.setTriggerTime(request.getTriggerTime());
287+
job.setPriority(request.getPriority());
288+
289+
return ltsAdminJobClient.submitJob(job);
287290
}
288291
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.lts.web.support;
2+
3+
import com.lts.core.commons.utils.StringUtils;
4+
import com.lts.core.domain.Job;
5+
import com.lts.jobclient.JobClient;
6+
import com.lts.jobclient.domain.Response;
7+
import org.springframework.beans.factory.InitializingBean;
8+
import org.springframework.stereotype.Component;
9+
10+
/**
11+
* @author Robert HG ([email protected]) on 10/3/15.
12+
*/
13+
@Component
14+
public class LtsAdminJobClient implements InitializingBean {
15+
16+
private JobClient jobClient;
17+
18+
public Response submitJob(Job job) {
19+
return jobClient.submitJob(job);
20+
}
21+
22+
@Override
23+
public void afterPropertiesSet() throws Exception {
24+
jobClient = new JobClient();
25+
jobClient.setNodeGroup("LTS-Admin");
26+
String clusterName = AppConfigurer.getProperties("clusterName");
27+
if (StringUtils.isEmpty(clusterName)) {
28+
throw new IllegalArgumentException("clusterName in lts-admin.cfg can not be null.");
29+
}
30+
jobClient.setClusterName(clusterName);
31+
jobClient.setRegistryAddress(AppConfigurer.getProperties("registryAddress"));
32+
33+
jobClient.start();
34+
}
35+
36+
}

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.lts.web.support.spring;
22

3-
import com.lts.biz.logger.JobLoggerFactory;
3+
import com.lts.biz.logger.JobLoggerDelegate;
44
import com.lts.core.cluster.Config;
55
import com.lts.core.cluster.Node;
66
import com.lts.core.cluster.NodeType;
@@ -9,7 +9,6 @@
99
import com.lts.core.constant.Constants;
1010
import com.lts.core.extension.ExtensionLoader;
1111
import com.lts.core.registry.RegistryStatMonitor;
12-
import com.lts.ec.EventCenter;
1312
import com.lts.ec.EventCenterFactory;
1413
import com.lts.queue.*;
1514
import com.lts.web.cluster.AdminApplication;
@@ -32,8 +31,6 @@ public class AdminAppFactoryBean implements FactoryBean<AdminApplication>, Initi
3231
ExecutingJobQueueFactory.class).getAdaptiveExtension();
3332
NodeGroupStoreFactory nodeGroupStoreFactory = ExtensionLoader.getExtensionLoader(
3433
NodeGroupStoreFactory.class).getAdaptiveExtension();
35-
JobLoggerFactory jobLoggerFactory = ExtensionLoader.getExtensionLoader(
36-
JobLoggerFactory.class).getAdaptiveExtension();
3734
JobFeedbackQueueFactory jobFeedbackQueueFactory = ExtensionLoader.getExtensionLoader(
3835
JobFeedbackQueueFactory.class).getAdaptiveExtension();
3936
private EventCenterFactory eventCenterFactory = ExtensionLoader.getExtensionLoader(EventCenterFactory.class).getAdaptiveExtension();
@@ -90,7 +87,7 @@ public void afterPropertiesSet() throws Exception {
9087
application.setExecutableJobQueue(executableJobQueueFactory.getQueue(config));
9188
application.setExecutingJobQueue(executingJobQueueFactory.getQueue(config));
9289
application.setNodeGroupStore(nodeGroupStoreFactory.getStore(config));
93-
application.setJobLogger(jobLoggerFactory.getJobLogger(config));
90+
application.setJobLogger(new JobLoggerDelegate(config));
9491
application.setEventCenter(eventCenterFactory.getEventCenter(config));
9592
application.setRegistryStatMonitor(new RegistryStatMonitor(application));
9693
}

lts-admin/src/main/webapp/views/templates/jobAdd.vm

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,16 @@
135135
}
136136
});
137137

138+
$(document).on("change", "select[name='submitNodeGroup']", function () {
139+
var submitNodeGroup = $(this).val();
140+
if (submitNodeGroup == 'LTS-Admin') {
141+
$("select[name='needFeedback']").selectpicker("val", "false");
142+
$("select[name='needFeedback']").attr("disabled", "disabled");
143+
} else {
144+
$("select[name='needFeedback']").attr("disabled", null);
145+
}
146+
});
147+
138148
$(document).on("click", "#addBtn", function () {
139149
var params = {};
140150
$.each($('#form').parent().find(".form-control"), function () {

lts-admin/src/main/webapp/views/templates/jobLogger.vm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@
158158
$(document).ready(function () {
159159

160160
var LOG_TYPE = {
161+
RECEIVE: '接受任务',
161162
SENT: '派发任务',
162163
FINISHED: '完成任务',
163164
FIXED_DEAD: '修复死任务',

lts-admin/src/main/webapp/views/templates/nodeGroupManager.vm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,13 @@
8282
{{/each}}
8383
{{if results == 0}}
8484
<tr>
85-
<td colspan="15">暂无数据</td>
85+
<td colspan="4">暂无数据</td>
8686
</tr>
8787
{{/if}}
8888
</tbody>
8989
<tfoot>
9090
<tr>
91-
<td colspan="9">
91+
<td colspan="4">
9292
<span>共{{results}}条记录,每页展示{{pageSize}}条</span>
9393
<ul class="pagination-sm pull-right"></ul>
9494
</td>

lts-admin/src/main/webapp/views/templates/nodeJvmInfo.vm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,10 @@
106106
showJVMInfo(identity, data);
107107
});
108108
} else {
109-
if (json) {
109+
if (json && json['msg']) {
110110
swal(json['msg']);
111111
}
112+
showJVMInfo('', {});
112113
}
113114
}
114115
});

lts-admin/src/main/webapp/views/templates/nodeManager.vm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@
4141
<div class="col-sm-2">
4242
<select name="nodeType" class="form-control">
4343
<option value="">所有</option>
44-
<option value="JOB_CLIENT">JobClient</option>
45-
<option value="TASK_TRACKER">TaskTracker</option>
46-
<option value="JOB_TRACKER">JobTracker</option>
44+
<option value="JOB_CLIENT">JOB_CLIENT</option>
45+
<option value="TASK_TRACKER">TASK_TRACKER</option>
46+
<option value="JOB_TRACKER">JOB_TRACKER</option>
4747
</select>
4848
</div>
4949
</div>

lts-core/src/main/java/com/lts/core/cluster/AbstractJobNode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ final public void stop() {
7272
try {
7373
if (started.compareAndSet(true, false)) {
7474

75-
registry.unregister(node);
75+
if (registry != null) {
76+
registry.unregister(node);
77+
}
7678

7779
preRemotingStop();
7880

0 commit comments

Comments
 (0)