use of com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn in project Taier by DTStack.
the class UpstreamDependencyHandler method getJobKey.
/**
* 获得jobKey
*
* @param scheduleTaskShade 任务
* @param currentDate 当前时间
* @return jobKey
*/
public String getJobKey(ScheduleTaskShade scheduleTaskShade, Date currentDate) throws Exception {
ScheduleCorn corn = ScheduleConfManager.parseFromJson(scheduleTaskShade.getScheduleConf());
// 上一个周期
Date lastDate = corn.isMatch(currentDate) ? currentDate : corn.last(currentDate);
String lastDateStr = DateUtil.getDate(corn.isMatch(currentDate) ? currentDate : corn.last(currentDate), DateUtil.STANDARD_DATETIME_FORMAT);
if (StringUtils.isBlank(lastDateStr)) {
throw new RdosDefineException("no find upstream task of last cycle");
}
String jobKey = JobKeyUtils.generateJobKey(keyPreStr, scheduleTaskShade.getTaskId(), lastDateStr);
return needCreateKey(lastDate, currentDate, jobKey);
}
use of com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn in project Taier by DTStack.
the class ScheduleActionService method buildScheduleJob.
private ScheduleJob buildScheduleJob(ScheduleTaskShade batchTask, String jobId, String flowJobId) throws IOException, ParseException {
String cycTime = getCycTime(0);
String scheduleConf = batchTask.getScheduleConf();
ScheduleJob scheduleJob = new ScheduleJob();
scheduleJob.setJobId(jobId);
scheduleJob.setJobName(CommonConstant.RUN_JOB_NAME + CommonConstant.RUN_DELIMITER + batchTask.getName() + CommonConstant.RUN_DELIMITER + cycTime);
scheduleJob.setStatus(TaskStatus.ENGINEACCEPTED.getStatus());
scheduleJob.setComputeType(batchTask.getComputeType());
scheduleJob.setTenantId(batchTask.getTenantId());
scheduleJob.setJobKey(String.format("%s%s%s", "tempJob", batchTask.getTaskId(), new DateTime().toString("yyyyMMdd")));
scheduleJob.setTaskId(batchTask.getTaskId());
scheduleJob.setCreateUserId(getOrDefault(batchTask.getCreateUserId(), -1L));
scheduleJob.setType(EScheduleType.TEMP_JOB.getType());
scheduleJob.setCycTime(getOrDefault(cycTime, DateTime.now().toString("yyyyMMddHHmmss")));
if (StringUtils.isNotBlank(scheduleConf)) {
Map jsonMap = objMapper.readValue(scheduleConf, Map.class);
jsonMap.put("isFailRetry", false);
scheduleConf = JSON.toJSONString(jsonMap);
batchTask.setScheduleConf(scheduleConf);
ScheduleCorn scheduleCron = ScheduleConfManager.parseFromJson(scheduleConf);
ScheduleConf scheduleConfBean = scheduleCron.getScheduleConf();
scheduleJob.setDependencyType(getOrDefault(scheduleConfBean.getSelfReliance(), 0));
scheduleJob.setPeriodType(scheduleConfBean.getPeriodType());
scheduleJob.setMaxRetryNum(getOrDefault(scheduleConfBean.getMaxRetryNum(), 0));
}
scheduleJob.setFlowJobId(getOrDefault(flowJobId, "0"));
scheduleJob.setTaskType(getOrDefault(batchTask.getTaskType(), -2));
scheduleJob.setNodeAddress(environmentContext.getLocalAddress());
scheduleJob.setVersionId(getOrDefault(batchTask.getVersionId(), 0));
scheduleJob.setComputeType(getOrDefault(batchTask.getComputeType(), ComputeType.BATCH.getType()));
return scheduleJob;
}
use of com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn in project Taier by DTStack.
the class UpstreamNextJobDependencyHandler method getJobKey.
private String getJobKey(ScheduleTaskShade scheduleTaskShade, Date currentDate) throws Exception {
ScheduleCorn corn = ScheduleConfManager.parseFromJson(scheduleTaskShade.getScheduleConf());
// 上游任务
Date upstreamTask = corn.isMatch(currentDate) ? currentDate : corn.last(currentDate);
// 上游任务的上一个周期
Date lastDate = corn.last(upstreamTask);
String lastDateStr = DateUtil.getDate(lastDate, DateUtil.STANDARD_DATETIME_FORMAT);
if (StringUtils.isBlank(lastDateStr)) {
throw new RdosDefineException("no find upstream task of last cycle");
}
String jobKey = JobKeyUtils.generateJobKey(keyPreStr, scheduleTaskShade.getTaskId(), lastDateStr);
return needCreateKey(lastDate, currentDate, jobKey);
}
use of com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn in project Taier by DTStack.
the class AbstractJobBuilder method buildJob.
@Override
public List<ScheduleJobDetails> buildJob(ScheduleTaskShade scheduleTaskShade, String name, String triggerDay, String beginTime, String endTime, Long fillId, JobSortWorker jobSortWorker) throws Exception {
// 解析周期信息
ScheduleCorn corn = ScheduleConfManager.parseFromJson(scheduleTaskShade.getScheduleConf());
ScheduleConf scheduleConf = corn.getScheduleConf();
// 校验时间是否符合规范,且获得时间范围
Pair<Date, Date> triggerRange = getTriggerRange(triggerDay, beginTime, endTime);
// 获得实例命中的实际范围
Date startDate = getStartData(scheduleConf, triggerRange, scheduleTaskShade.getTaskId());
Date endDate = getEndDate(scheduleConf, triggerRange, scheduleTaskShade.getTaskId());
List<ScheduleJobDetails> jobBuilderBeanList = Lists.newArrayList();
Date next = corn.isMatch(startDate) ? startDate : corn.next(startDate);
while (next != null) {
// 如下下一次执行时间已经在结束时间之后,停止生成实例
if (next.after(endDate)) {
break;
}
ScheduleJobDetails jobBuilderBean = buildJobBuilderBean(scheduleTaskShade, name, fillId, jobSortWorker, corn, scheduleConf, next, NORMAL_TASK_FLOW_ID);
if (EScheduleJobType.WORK_FLOW.getVal().equals(scheduleTaskShade.getTaskType())) {
// 该任务是工作流任务 先生成子任务
List<ScheduleTaskShade> subTasks = scheduleTaskService.lambdaQuery().eq(ScheduleTaskShade::getFlowId, scheduleTaskShade.getTaskId()).eq(ScheduleTaskShade::getIsDeleted, Deleted.NORMAL.getStatus()).list();
List<ScheduleJobDetails> flowBean = Lists.newArrayList();
ScheduleJob scheduleJob = jobBuilderBean.getScheduleJob();
for (ScheduleTaskShade subTask : subTasks) {
flowBean.add(buildJobBuilderBean(subTask, name, fillId, jobSortWorker, corn, scheduleConf, next, scheduleJob.getJobId()));
}
jobBuilderBean.setFlowBean(flowBean);
}
jobBuilderBeanList.add(jobBuilderBean);
next = corn.next(next);
}
return jobBuilderBeanList;
}
Aggregations