[ server ] [ scheduler ]- script scheduler update -2

This commit is contained in:
zeaslity
2023-02-06 11:58:38 +08:00
parent f7f43b5dab
commit d23608dec3
3 changed files with 100 additions and 19 deletions

View File

@@ -50,6 +50,24 @@ public class SchedulerController {
return R.ok(octopusQuartzService.queryAllScriptScheduleMission());
}
@ApiOperation(value = "[脚本]-删除定时脚本任务")
@PostMapping(value = "/script/delete")
public R<Boolean> deleteScriptScheduler(
@RequestParam(value = "scriptJobUUID") @ApiParam(value = "scriptJobUUID", name = "定时脚本任务UUID") String scriptJobUUID
) {
return R.ok(octopusQuartzService.deleteScriptScheduleMission(scriptJobUUID));
}
@ApiOperation(value = "[脚本]-修改定时脚本任务")
@PostMapping(value = "/script/modify")
public R<JobDetail> modifyScriptScheduler(
@ApiParam(name = "scheduleScript") @RequestBody() ScriptSchedulerVO scriptSchedulerVO
) {
return R.ok(octopusQuartzService.modifyScriptScheduleMission(scriptSchedulerVO));
}
/**
* --------------------------------------------------------------
* 普通的定时任务查询功能

View File

@@ -110,14 +110,6 @@ public interface QuartzSchedulerService {
*/
List<Map<String, Object>> queryAllMission();
/**
* 查询所有定时脚本任务
*
* @return
*/
List<JobDetail> queryAllScriptScheduleMission();
/**
* 获取正在运行的任务job
*
@@ -141,5 +133,17 @@ public interface QuartzSchedulerService {
*/
HashMap<String, String> createScriptScheduledMission(ScriptSchedulerVO scriptSchedulerVO);
/**
* 查询所有定时脚本任务
*
* @return
*/
List<JobDetail> queryAllScriptScheduleMission();
boolean deleteScriptScheduleMission(String schedulerUuid);
JobDetail modifyScriptScheduleMission(ScriptSchedulerVO scriptSchedulerVO);
}

View File

@@ -9,11 +9,11 @@ import io.wdd.rpc.scheduler.config.QuartzSchedulerUtils;
import io.wdd.rpc.scheduler.job.AgentScriptSchedulerJob;
import io.wdd.server.beans.po.ScriptSchedulerPO;
import io.wdd.server.service.ScriptSchedulerService;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.quartz.*;
import org.quartz.DateBuilder.IntervalUnit;
import org.quartz.impl.matchers.GroupMatcher;
@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.stream.Collectors;
@@ -72,7 +73,8 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService {
);
this.addMission(
AgentScriptSchedulerJob.class,
scriptSchedulerDTO.getName(),
// 方便删除任务,比较好定位
scriptSchedulerDTO.getSchedulerUuid(),
SCRIPT_SCHEDULE_MISSION_GROUP_NAME,
scriptSchedulerDTO.getDescription(),
0,
@@ -127,7 +129,6 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService {
* @param scriptSchedulerVO 定时脚本任务-前端页面-实体类
* @return 定时脚本任务-中间转换状态-实体类
*/
@SneakyThrows
private ScriptSchedulerDTO validateAndConvertToScriptSchedulerDTO(ScriptSchedulerVO scriptSchedulerVO) {
// 验证cron表达式
@@ -156,10 +157,14 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService {
// 生成DTO对象
ScriptSchedulerDTO dto = new ScriptSchedulerDTO();
BeanUtils.copyProperties(
dto,
scriptSchedulerVO
);
try {
BeanUtils.copyProperties(
dto,
scriptSchedulerVO
);
} catch (IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
}
// 初始化属性值
dto.setAgentTopicNameToFutureResultKeyMap(
@@ -170,10 +175,11 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService {
dto.setCompleteCommandList(completeCommandList);
dto.setTargetMachineList(targetMachineList);
// 生成 scheduler uuid
String uuid = RandomStringUtils.randomAlphabetic(32);
dto.setSchedulerUuid(uuid);
if (StringUtils.isEmpty(scriptSchedulerVO.getSchedulerUuid())) {
String uuid = RandomStringUtils.randomAlphabetic(32);
dto.setSchedulerUuid(uuid);
}
return dto;
}
@@ -363,7 +369,9 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService {
);
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
log.info(
"new jobTime: {}",
"prepare to UPDATE Job {} Group {} to new jobTime: {}",
jobName,
jobGroupName,
jobTime
);
trigger = trigger
@@ -554,6 +562,57 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService {
}
@Override
public boolean deleteScriptScheduleMission(String schedulerUuid) {
// 直接构造
JobKey jobKey = new JobKey(
schedulerUuid,
SCRIPT_SCHEDULE_MISSION_GROUP_NAME
);
try {
return scheduler.deleteJob(jobKey);
} catch (SchedulerException e) {
throw new RuntimeException(e);
}
}
@Override
public JobDetail modifyScriptScheduleMission(ScriptSchedulerVO scriptSchedulerVO) {
String uuid = scriptSchedulerVO.getSchedulerUuid();
// 直接构造
JobKey jobKey = new JobKey(
uuid,
SCRIPT_SCHEDULE_MISSION_GROUP_NAME
);
JobDetail jobDetail = null;
try {
jobDetail = scheduler.getJobDetail(jobKey);
} catch (SchedulerException e) {
// job 不存在或者什么信息
return null;
}
// 该Job存在
// 修改JobDetail信息
ScriptSchedulerDTO scriptSchedulerDTO = validateAndConvertToScriptSchedulerDTO(scriptSchedulerVO);
// 修改 Mission相应的 cron时间信息
updateMission(
uuid,
SCRIPT_SCHEDULE_MISSION_GROUP_NAME,
scriptSchedulerDTO.getCronExpress()
);
return jobDetail;
}
/**
* 获取所有正在运行的job
*