1、调度监控优化

Former-commit-id: 44b8e49444d4c69dc67491f0c6c1b61c340f3064
master
王兵 4 years ago
parent 2b227382e8
commit 2b376f22ee

@ -1,33 +1,58 @@
package ${basePackage}.action.ajax.system;
import org.springframework.beans.factory.annotation.Autowired;
import ${basePackage}.frame.base.ErrorType;
import ${basePackage}.frame.schedule.Scheduler;
import ${basePackage}.frame.utils.StringUtil;
import ${basePackage}.module.system.ent.Schedule;
import ${basePackage}.module.system.req.ScheduleFindRequest;
import ${basePackage}.module.system.req.ScheduleStartRequest;
import ${basePackage}.module.system.req.ScheduleStopRequest;
import ${basePackage}.module.system.rsp.ScheduleFindResponse;
import org.springframework.beans.factory.annotation.Autowired;
import ${basePackage}.module.system.rsp.ScheduleStartResponse;
import ${basePackage}.module.system.rsp.ScheduleStopResponse;
import java.util.Iterator;
import java.util.List;
public class ScheduleAjax {
@Autowired
private Scheduler scheduler;
// public TaskSqlCreateResponse create(TaskSqlCreateRequest request) {
// return taskSqlManager.create(request, LocalData.getToken());
// }
//
// public TaskSqlDeleteResponse delete(TaskSqlDeleteRequest request) {
// return taskSqlManager.delete(request, LocalData.getToken());
// }
//
// public TaskSqlUpdateResponse update(TaskSqlUpdateRequest request) {
// return taskSqlManager.update(request, LocalData.getToken());
// }
public ScheduleStartResponse start(ScheduleStartRequest request) {
ScheduleStartResponse response = new ScheduleStartResponse();
if (!scheduler.start(request.getId())) {
response.addError(ErrorType.BUSINESS_ERROR, "启动失败!");
}
return response;
}
public ScheduleStopResponse stop(ScheduleStopRequest request) {
ScheduleStopResponse response = new ScheduleStopResponse();
if (!scheduler.stop(request.getId())) {
response.addError(ErrorType.BUSINESS_ERROR, "停止失败!");
}
return response;
}
public ScheduleFindResponse find(ScheduleFindRequest request) {
ScheduleFindResponse response = new ScheduleFindResponse();
List<Schedule> schedules = scheduler.taskList();
Iterator<Schedule> iterator = schedules.iterator();
while (iterator.hasNext()) {
Schedule next = iterator.next();
if (!StringUtil.isEmpty(request.getTaskId()) && !next.getId().contains(request.getTaskId())) {
iterator.remove();
}
if (!StringUtil.isEmpty(request.getTaskName()) && !next.getName().contains(request.getTaskName())) {
iterator.remove();
}
if (request.getRun() != null && next.isRun() != request.getRun()) {
iterator.remove();
}
}
response.setResult(schedules);
return response;
}

@ -14,6 +14,10 @@ public abstract class RunTask implements Runnable {
return "";
}
public String taskNote(){
return "";
}
public abstract ScheduledFuture<?> schedule(ThreadPoolTaskScheduler poolTaskScheduler);
public void configChange(ThreadPoolTaskScheduler scheduler) {

@ -1,7 +1,7 @@
package ${basePackage}.frame.schedule;
import ${basePackage}.module.system.ent.Schedule;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import ${basePackage}.module.system.ent.Schedule;
import java.util.ArrayList;
import java.util.HashMap;
@ -24,13 +24,7 @@ public class Scheduler extends ThreadPoolTaskScheduler {
ScheduledFuture<?> scheduledFuture = taskMap.get(task.taskId()).future;
scheduledFuture.cancel(false);
}
taskMap.put(task.taskId(), new TaskWrapper(
task.taskId(),
task.taskName(),
true,
(Class<RunTask>) task.getClass(),
task.schedule(this)
));
taskMap.put(task.taskId(), new TaskWrapper(task));
return true;
}
@ -43,13 +37,23 @@ public class Scheduler extends ThreadPoolTaskScheduler {
return true;
}
public boolean start(String taskId) {
if (taskMap.containsKey(taskId)) {
taskMap.get(taskId).run = true;
taskMap.get(taskId).future = taskMap.get(taskId).target.schedule(this);
return true;
}
return false;
}
public boolean stop(String taskId) {
if (taskMap.containsKey(taskId)) {
taskMap.get(taskId).run = false;
ScheduledFuture<?> scheduledFuture = taskMap.get(taskId).future;
scheduledFuture.cancel(false);
return true;
}
return true;
return false;
}
public List<Schedule> taskList() {
@ -58,6 +62,7 @@ public class Scheduler extends ThreadPoolTaskScheduler {
Schedule schedule = new Schedule();
schedule.setId(taskWrapper.taskId);
schedule.setName(taskWrapper.taskName);
schedule.setNote(taskWrapper.taskNote);
schedule.setRun(taskWrapper.run);
result.add(schedule);
}
@ -65,18 +70,20 @@ public class Scheduler extends ThreadPoolTaskScheduler {
}
class TaskWrapper {
RunTask target;
String taskId;
String taskName;
String taskNote;
boolean run;
Class<RunTask> target;
ScheduledFuture<?> future;
public TaskWrapper(String taskId, String taskName, boolean run, Class<RunTask> target, ScheduledFuture<?> future) {
this.taskId = taskId;
this.taskName = taskName;
this.run = run;
this.target = target;
this.future = future;
public TaskWrapper(RunTask runTask) {
this.target = runTask;
this.taskId = runTask.taskId();
this.taskName = runTask.taskName();
this.taskNote = runTask.taskNote();
this.future = runTask.schedule(Scheduler.this);
this.run = true;
}
}
}

@ -18,6 +18,12 @@ public class Schedule {
* NAME -
*/
private String name;
/**
* NOTE -
*/
private String note;
/**
* run -
*/
@ -39,6 +45,14 @@ public class Schedule {
this.name = name;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public boolean isRun() {
return run;
}

@ -12,6 +12,11 @@ import ${basePackage}.frame.validation.Dict;
*/
public class ScheduleFindRequest extends BaseFindRequest {
/**
* ID
*/
private String taskId;
/**
*
*/
@ -31,7 +36,15 @@ public class ScheduleFindRequest extends BaseFindRequest {
/**
*
*/
private Boolean valid;
private Boolean run;
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public String getTaskName() {
return this.taskName;
@ -57,11 +70,11 @@ public class ScheduleFindRequest extends BaseFindRequest {
this.taskType = taskType;
}
public Boolean getValid() {
return this.valid;
public Boolean getRun() {
return run;
}
public void setValid(Boolean valid) {
this.valid = valid;
public void setRun(Boolean run) {
this.run = run;
}
}

@ -0,0 +1,26 @@
package ${basePackage}.module.system.req;
import ${basePackage}.frame.base.BaseFindRequest;
/**
* ScheduleStartRequest -
*
* @author author
* @version 0.0.1
* @since 2020-05-24
*/
public class ScheduleStartRequest extends BaseFindRequest {
/**
* ID
*/
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}

@ -0,0 +1,26 @@
package ${basePackage}.module.system.req;
import ${basePackage}.frame.base.BaseFindRequest;
/**
* ScheduleStopRequest -
*
* @author author
* @version 0.0.1
* @since 2020-05-24
*/
public class ScheduleStopRequest extends BaseFindRequest {
/**
* ID
*/
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}

@ -0,0 +1,13 @@
package ${basePackage}.module.system.rsp;
import ${basePackage}.frame.base.BaseResponse;
/**
* ScheduleStartResponse -
*
* @author author
* @version 0.0.1
* @since 2020-05-24
*/
public class ScheduleStartResponse extends BaseResponse {
}

@ -0,0 +1,13 @@
package ${basePackage}.module.system.rsp;
import ${basePackage}.frame.base.BaseResponse;
/**
* ScheduleStopResponse -
*
* @author author
* @version 0.0.1
* @since 2020-05-24
*/
public class ScheduleStopResponse extends BaseResponse {
}

@ -17,7 +17,7 @@ public class TokenTask extends RunDelayRepeatTask {
@Override
public String taskId() {
return String.valueOf(IDgenerator.nextId());
return "1";
}
@Override
@ -25,6 +25,11 @@ public class TokenTask extends RunDelayRepeatTask {
return "登录凭证处理任务";
}
@Override
public String taskNote () {
return "处理过期登录凭证状态,及时注销。";
}
@Override
public Duration interval() {
return Duration.ofMinutes(1);

@ -105,6 +105,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

@ -68,6 +68,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

@ -54,6 +54,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

@ -57,6 +57,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

@ -55,6 +55,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

@ -48,6 +48,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

@ -47,6 +47,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

@ -70,6 +70,7 @@
<el-table
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

@ -50,6 +50,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

@ -1,16 +1,16 @@
<div id="app" v-cloak>
<el-card class="box-card">
<el-form class="search" :inline="true" :model="vm" ref="vm" label-position="right" label-width="90px">
<el-form-item label="任务ID" prop="id">
<el-input v-model="vm.id" clearable size="mini" placeholder="请输入任务名称"></el-input>
<el-form-item label="任务ID" prop="taskId">
<el-input v-model="vm.taskId" clearable size="mini" placeholder="请输入任务ID"></el-input>
</el-form-item>
<el-form-item label="任务名称" prop="name">
<el-input v-model="vm.name" clearable size="mini" placeholder="请输入任务名称"></el-input>
<el-form-item label="任务名称" prop="taskName">
<el-input v-model="vm.taskName" clearable size="mini" placeholder="请输入任务名称"></el-input>
</el-form-item>
<el-form-item label="是否有效" prop="run">
<el-form-item label="运行状态" prop="run">
<el-radio-group v-model="vm.run" clearable size="mini">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
<el-radio :label="true">运行</el-radio>
<el-radio :label="false">暂停</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
@ -25,6 +25,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column
@ -46,8 +47,14 @@
</el-table-column>
<el-table-column
align="center"
prop="note"
label="任务描述">
</el-table-column>
<el-table-column
align="center"
width="140"
prop="run"
label="是否有效">
label="状态">
<template slot-scope="scope">
<el-tag size="mini" effect="dark" type="success" v-if="scope.row.run">运行</el-tag>
<el-tag size="mini" effect="dark" type="danger" v-if="!scope.row.run">暂停</el-tag>
@ -56,13 +63,13 @@
<el-table-column
align="center"
fixed="right"
width="120"
width="200"
label="操作">
<template slot-scope="scope">
<wb-dropdown :arg="scope.row">
<wb-dropdown-item value="编辑" icon="el-icon-edit" @click="onEdit"></wb-dropdown-item>
<wb-dropdown-item value="删除" icon="el-icon-delete" @click="onDelete"></wb-dropdown-item>
</wb-dropdown>
<el-button-group>
<el-button type="primary" icon="el-icon-video-play" :disabled="scope.row.run" size="mini" @click="onStart(scope.row)">运行</el-button>
<el-button type="primary" icon="el-icon-video-pause" :disabled="!scope.row.run" size="mini" @click="onStop(scope.row)">暂停</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
@ -76,71 +83,47 @@
module: 'system',
target: 'schedule',
vm: {//条件及分页参数
taskId: '',
taskName: '',
taskNote: '',
taskType: '',
run: '',
pageNumber: 1,
pageSize: 10,
pageSize: 0,
totalCount: 0,
sortKey: 'CREATE_TIME',
sortType: 'DESC'
},
form: {//待提交表单
formTitle: "",
formShow: false,
id: '',
valid: "",
rowVersion: ""
},
formRules: {
},
treeData: []
}
},
methods: {
onCreate: function () {
this.form.formTitle = "资源新增";
this.form.formShow = true;
this.form.id = "";
this.form.resCode = "";
this.form.resName = "";
this.form.resType = "";
this.form.resValue = "";
this.form.valid = true;
},
onEdit: function (item) {
this.form.formTitle = "资源编辑";
this.form.formShow = true;
this.form.id = item.id;
this.form.resCode = item.resCode;
this.form.resName = item.resName;
this.form.resType = item.resType;
this.form.resValue = item.resValue;
this.form.valid = item.valid;
this.form.rowVersion = item.rowVersion;
onStart: function (item) {
new Ajax("system", "schedule", "start").post({id: item.id},function (response) {
if (response.errors.length > 0) {
nav.e(response.errors[0].message);
} else {
nav.s("开启成功");
this.onFind();
}
}.bind(this))
},
onDelete: function (item) {
this.$confirm('将删除该项, 是否继续?', '提示', {
onStop: function (item) {
this.$confirm('停止任务后,可能导致部分模块无法正常运行,以至出现无法预料的问题,是否确认停止?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
new Ajax("system", "schedule").delete({id: item.id},function (response) {
new Ajax("system", "schedule", "stop").post({id: item.id},function (response) {
if (response.errors.length > 0) {
nav.e(response.errors[0].message);
} else {
nav.s("删除成功");
nav.s("停止成功");
this.onFind();
}
}.bind(this))
}.bind(this)).catch(function (action) {
});
},
onChange: function (value) {
this.$refs.tree.filter(value);
},
filterTree: function (value, data) {
if (!value) return true;
return data.comment.indexOf(value) !== -1;
},
}
},
mounted: function () {
this.onFind();

@ -56,6 +56,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

@ -68,6 +68,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

@ -57,6 +57,7 @@
class="data"
@selection-change="onSelectionChange"
empty-text="无数据"
:stripe="true"
:data="result"
size="mini">
<el-table-column

Loading…
Cancel
Save

Powered by TurnKey Linux.