[ 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()); 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(); List<Map<String, Object>> queryAllMission();
/**
* 查询所有定时脚本任务
*
* @return
*/
List<JobDetail> queryAllScriptScheduleMission();
/** /**
* 获取正在运行的任务job * 获取正在运行的任务job
* *
@@ -141,5 +133,17 @@ public interface QuartzSchedulerService {
*/ */
HashMap<String, String> createScriptScheduledMission(ScriptSchedulerVO scriptSchedulerVO); 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.rpc.scheduler.job.AgentScriptSchedulerJob;
import io.wdd.server.beans.po.ScriptSchedulerPO; import io.wdd.server.beans.po.ScriptSchedulerPO;
import io.wdd.server.service.ScriptSchedulerService; import io.wdd.server.service.ScriptSchedulerService;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.quartz.*; import org.quartz.*;
import org.quartz.DateBuilder.IntervalUnit; import org.quartz.DateBuilder.IntervalUnit;
import org.quartz.impl.matchers.GroupMatcher; import org.quartz.impl.matchers.GroupMatcher;
@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.InvocationTargetException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -72,7 +73,8 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService {
); );
this.addMission( this.addMission(
AgentScriptSchedulerJob.class, AgentScriptSchedulerJob.class,
scriptSchedulerDTO.getName(), // 方便删除任务,比较好定位
scriptSchedulerDTO.getSchedulerUuid(),
SCRIPT_SCHEDULE_MISSION_GROUP_NAME, SCRIPT_SCHEDULE_MISSION_GROUP_NAME,
scriptSchedulerDTO.getDescription(), scriptSchedulerDTO.getDescription(),
0, 0,
@@ -127,7 +129,6 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService {
* @param scriptSchedulerVO 定时脚本任务-前端页面-实体类 * @param scriptSchedulerVO 定时脚本任务-前端页面-实体类
* @return 定时脚本任务-中间转换状态-实体类 * @return 定时脚本任务-中间转换状态-实体类
*/ */
@SneakyThrows
private ScriptSchedulerDTO validateAndConvertToScriptSchedulerDTO(ScriptSchedulerVO scriptSchedulerVO) { private ScriptSchedulerDTO validateAndConvertToScriptSchedulerDTO(ScriptSchedulerVO scriptSchedulerVO) {
// 验证cron表达式 // 验证cron表达式
@@ -156,10 +157,14 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService {
// 生成DTO对象 // 生成DTO对象
ScriptSchedulerDTO dto = new ScriptSchedulerDTO(); ScriptSchedulerDTO dto = new ScriptSchedulerDTO();
BeanUtils.copyProperties( try {
dto, BeanUtils.copyProperties(
scriptSchedulerVO dto,
); scriptSchedulerVO
);
} catch (IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
}
// 初始化属性值 // 初始化属性值
dto.setAgentTopicNameToFutureResultKeyMap( dto.setAgentTopicNameToFutureResultKeyMap(
@@ -170,10 +175,11 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService {
dto.setCompleteCommandList(completeCommandList); dto.setCompleteCommandList(completeCommandList);
dto.setTargetMachineList(targetMachineList); dto.setTargetMachineList(targetMachineList);
// 生成 scheduler uuid // 生成 scheduler uuid
String uuid = RandomStringUtils.randomAlphabetic(32); if (StringUtils.isEmpty(scriptSchedulerVO.getSchedulerUuid())) {
dto.setSchedulerUuid(uuid); String uuid = RandomStringUtils.randomAlphabetic(32);
dto.setSchedulerUuid(uuid);
}
return dto; return dto;
} }
@@ -363,7 +369,9 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService {
); );
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
log.info( log.info(
"new jobTime: {}", "prepare to UPDATE Job {} Group {} to new jobTime: {}",
jobName,
jobGroupName,
jobTime jobTime
); );
trigger = trigger 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 * 获取所有正在运行的job
* *