Search in sources :

Example 1 with Schedule

use of org.apache.dolphinscheduler.dao.entity.Schedule in project dolphinscheduler by apache.

the class ProcessDefinitionService method exportProcessMetaData.

/**
 * get export process metadata string
 * @param processDefinitionId process definition id
 * @param processDefinition process definition
 * @return export process metadata string
 */
public ProcessMeta exportProcessMetaData(Integer processDefinitionId, ProcessDefinition processDefinition) {
    // correct task param which has data source or dependent param
    String correctProcessDefinitionJson = addExportTaskNodeSpecialParam(processDefinition.getProcessDefinitionJson());
    processDefinition.setProcessDefinitionJson(correctProcessDefinitionJson);
    // export process metadata
    ProcessMeta exportProcessMeta = new ProcessMeta();
    exportProcessMeta.setProjectName(processDefinition.getProjectName());
    exportProcessMeta.setProcessDefinitionName(processDefinition.getName());
    exportProcessMeta.setProcessDefinitionJson(processDefinition.getProcessDefinitionJson());
    exportProcessMeta.setProcessDefinitionLocations(processDefinition.getLocations());
    exportProcessMeta.setProcessDefinitionConnects(processDefinition.getConnects());
    // schedule info
    List<Schedule> schedules = scheduleMapper.queryByProcessDefinitionId(processDefinitionId);
    if (!schedules.isEmpty()) {
        Schedule schedule = schedules.get(0);
        exportProcessMeta.setScheduleWarningType(schedule.getWarningType().toString());
        exportProcessMeta.setScheduleWarningGroupId(schedule.getWarningGroupId());
        exportProcessMeta.setScheduleStartTime(DateUtils.dateToString(schedule.getStartTime()));
        exportProcessMeta.setScheduleEndTime(DateUtils.dateToString(schedule.getEndTime()));
        exportProcessMeta.setScheduleCrontab(schedule.getCrontab());
        exportProcessMeta.setScheduleFailureStrategy(String.valueOf(schedule.getFailureStrategy()));
        exportProcessMeta.setScheduleReleaseState(String.valueOf(ReleaseState.OFFLINE));
        exportProcessMeta.setScheduleProcessInstancePriority(String.valueOf(schedule.getProcessInstancePriority()));
        exportProcessMeta.setScheduleWorkerGroupName(schedule.getWorkerGroup());
    }
    // create workflow json file
    return exportProcessMeta;
}
Also used : Schedule(org.apache.dolphinscheduler.dao.entity.Schedule) ProcessMeta(org.apache.dolphinscheduler.api.dto.ProcessMeta)

Example 2 with Schedule

use of org.apache.dolphinscheduler.dao.entity.Schedule in project dolphinscheduler by apache.

the class ProcessDefinitionService method deleteProcessDefinitionById.

/**
 * delete process definition by id
 *
 * @param loginUser login user
 * @param projectName project name
 * @param processDefinitionId process definition id
 * @return delete result code
 */
@Transactional(rollbackFor = Exception.class)
public Map<String, Object> deleteProcessDefinitionById(User loginUser, String projectName, Integer processDefinitionId) {
    Map<String, Object> result = new HashMap<>(5);
    Project project = projectMapper.queryByName(projectName);
    Map<String, Object> checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName);
    Status resultEnum = (Status) checkResult.get(Constants.STATUS);
    if (resultEnum != Status.SUCCESS) {
        return checkResult;
    }
    ProcessDefinition processDefinition = processDefineMapper.selectById(processDefinitionId);
    if (processDefinition == null) {
        putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processDefinitionId);
        return result;
    }
    // Determine if the login user is the owner of the process definition
    if (loginUser.getId() != processDefinition.getUserId() && loginUser.getUserType() != UserType.ADMIN_USER) {
        putMsg(result, Status.USER_NO_OPERATION_PERM);
        return result;
    }
    // check process definition is already online
    if (processDefinition.getReleaseState() == ReleaseState.ONLINE) {
        putMsg(result, Status.PROCESS_DEFINE_STATE_ONLINE, processDefinitionId);
        return result;
    }
    // get the timing according to the process definition
    List<Schedule> schedules = scheduleMapper.queryByProcessDefinitionId(processDefinitionId);
    if (!schedules.isEmpty() && schedules.size() > 1) {
        logger.warn("scheduler num is {},Greater than 1", schedules.size());
        putMsg(result, Status.DELETE_PROCESS_DEFINE_BY_ID_ERROR);
        return result;
    } else if (schedules.size() == 1) {
        Schedule schedule = schedules.get(0);
        if (schedule.getReleaseState() == ReleaseState.OFFLINE) {
            scheduleMapper.deleteById(schedule.getId());
        } else if (schedule.getReleaseState() == ReleaseState.ONLINE) {
            putMsg(result, Status.SCHEDULE_CRON_STATE_ONLINE, schedule.getId());
            return result;
        }
    }
    int delete = processDefineMapper.deleteById(processDefinitionId);
    if (delete > 0) {
        putMsg(result, Status.SUCCESS);
    } else {
        putMsg(result, Status.DELETE_PROCESS_DEFINE_BY_ID_ERROR);
    }
    return result;
}
Also used : Status(org.apache.dolphinscheduler.api.enums.Status) Project(org.apache.dolphinscheduler.dao.entity.Project) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) Schedule(org.apache.dolphinscheduler.dao.entity.Schedule) JSONObject(com.alibaba.fastjson.JSONObject) ProcessDefinition(org.apache.dolphinscheduler.dao.entity.ProcessDefinition) Transactional(org.springframework.transaction.annotation.Transactional)

Example 3 with Schedule

use of org.apache.dolphinscheduler.dao.entity.Schedule in project dolphinscheduler by apache.

the class ProcessDefinitionService method importProcessSchedule.

/**
 * import process schedule
 * @param loginUser login user
 * @param currentProjectName current project name
 * @param processMeta process meta data
 * @param processDefinitionName process definition name
 * @param processDefinitionId process definition id
 * @return insert schedule flag
 */
public int importProcessSchedule(User loginUser, String currentProjectName, ProcessMeta processMeta, String processDefinitionName, Integer processDefinitionId) {
    Date now = new Date();
    Schedule scheduleObj = new Schedule();
    scheduleObj.setProjectName(currentProjectName);
    scheduleObj.setProcessDefinitionId(processDefinitionId);
    scheduleObj.setProcessDefinitionName(processDefinitionName);
    scheduleObj.setCreateTime(now);
    scheduleObj.setUpdateTime(now);
    scheduleObj.setUserId(loginUser.getId());
    scheduleObj.setUserName(loginUser.getUserName());
    scheduleObj.setCrontab(processMeta.getScheduleCrontab());
    if (null != processMeta.getScheduleStartTime()) {
        scheduleObj.setStartTime(DateUtils.stringToDate(processMeta.getScheduleStartTime()));
    }
    if (null != processMeta.getScheduleEndTime()) {
        scheduleObj.setEndTime(DateUtils.stringToDate(processMeta.getScheduleEndTime()));
    }
    if (null != processMeta.getScheduleWarningType()) {
        scheduleObj.setWarningType(WarningType.valueOf(processMeta.getScheduleWarningType()));
    }
    if (null != processMeta.getScheduleWarningGroupId()) {
        scheduleObj.setWarningGroupId(processMeta.getScheduleWarningGroupId());
    }
    if (null != processMeta.getScheduleFailureStrategy()) {
        scheduleObj.setFailureStrategy(FailureStrategy.valueOf(processMeta.getScheduleFailureStrategy()));
    }
    if (null != processMeta.getScheduleReleaseState()) {
        scheduleObj.setReleaseState(ReleaseState.valueOf(processMeta.getScheduleReleaseState()));
    }
    if (null != processMeta.getScheduleProcessInstancePriority()) {
        scheduleObj.setProcessInstancePriority(Priority.valueOf(processMeta.getScheduleProcessInstancePriority()));
    }
    if (null != processMeta.getScheduleWorkerGroupName()) {
        scheduleObj.setWorkerGroup(processMeta.getScheduleWorkerGroupName());
    }
    return scheduleMapper.insert(scheduleObj);
}
Also used : Schedule(org.apache.dolphinscheduler.dao.entity.Schedule) Date(java.util.Date)

Example 4 with Schedule

use of org.apache.dolphinscheduler.dao.entity.Schedule in project dolphinscheduler by apache.

the class ProcessDefinitionServiceTest method getSchedule.

/**
 * get mock schedule
 * @return schedule
 */
private Schedule getSchedule() {
    Date date = new Date();
    Schedule schedule = new Schedule();
    schedule.setId(46);
    schedule.setProcessDefinitionId(1);
    schedule.setStartTime(date);
    schedule.setEndTime(date);
    schedule.setCrontab("0 0 5 * * ? *");
    schedule.setFailureStrategy(FailureStrategy.END);
    schedule.setUserId(1);
    schedule.setReleaseState(ReleaseState.OFFLINE);
    schedule.setProcessInstancePriority(Priority.MEDIUM);
    schedule.setWarningType(WarningType.NONE);
    schedule.setWarningGroupId(1);
    schedule.setWorkerGroup(Constants.DEFAULT_WORKER_GROUP);
    return schedule;
}
Also used : Schedule(org.apache.dolphinscheduler.dao.entity.Schedule) Date(java.util.Date)

Example 5 with Schedule

use of org.apache.dolphinscheduler.dao.entity.Schedule in project dolphinscheduler by apache.

the class ProcessScheduleJob method execute.

/**
 * Called by the Scheduler when a Trigger fires that is associated with the Job
 *
 * @param context JobExecutionContext
 * @throws JobExecutionException if there is an exception while executing the job.
 */
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
    Assert.notNull(getProcessService(), "please call init() method first");
    JobDataMap dataMap = context.getJobDetail().getJobDataMap();
    int projectId = dataMap.getInt(Constants.PROJECT_ID);
    int scheduleId = dataMap.getInt(Constants.SCHEDULE_ID);
    Date scheduledFireTime = context.getScheduledFireTime();
    Date fireTime = context.getFireTime();
    logger.info("scheduled fire time :{}, fire time :{}, process id :{}", scheduledFireTime, fireTime, scheduleId);
    // query schedule
    Schedule schedule = getProcessService().querySchedule(scheduleId);
    if (schedule == null) {
        logger.warn("process schedule does not exist in db,delete schedule job in quartz, projectId:{}, scheduleId:{}", projectId, scheduleId);
        deleteJob(projectId, scheduleId);
        return;
    }
    ProcessDefinition processDefinition = getProcessService().findProcessDefineById(schedule.getProcessDefinitionId());
    // release state : online/offline
    ReleaseState releaseState = processDefinition.getReleaseState();
    if (processDefinition == null || releaseState == ReleaseState.OFFLINE) {
        logger.warn("process definition does not exist in db or offline,need not to create command, projectId:{}, processId:{}", projectId, scheduleId);
        return;
    }
    Command command = new Command();
    command.setCommandType(CommandType.SCHEDULER);
    command.setExecutorId(schedule.getUserId());
    command.setFailureStrategy(schedule.getFailureStrategy());
    command.setProcessDefinitionId(schedule.getProcessDefinitionId());
    command.setScheduleTime(scheduledFireTime);
    command.setStartTime(fireTime);
    command.setWarningGroupId(schedule.getWarningGroupId());
    String workerGroup = StringUtils.isEmpty(schedule.getWorkerGroup()) ? Constants.DEFAULT_WORKER_GROUP : schedule.getWorkerGroup();
    command.setWorkerGroup(workerGroup);
    command.setWarningType(schedule.getWarningType());
    command.setProcessInstancePriority(schedule.getProcessInstancePriority());
    getProcessService().createCommand(command);
}
Also used : JobDataMap(org.quartz.JobDataMap) Command(org.apache.dolphinscheduler.dao.entity.Command) ReleaseState(org.apache.dolphinscheduler.common.enums.ReleaseState) Schedule(org.apache.dolphinscheduler.dao.entity.Schedule) ProcessDefinition(org.apache.dolphinscheduler.dao.entity.ProcessDefinition) Date(java.util.Date)

Aggregations

Schedule (org.apache.dolphinscheduler.dao.entity.Schedule)27 Project (org.apache.dolphinscheduler.dao.entity.Project)12 ProcessDefinition (org.apache.dolphinscheduler.dao.entity.ProcessDefinition)11 Test (org.junit.Test)9 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)9 Transactional (org.springframework.transaction.annotation.Transactional)6 Date (java.util.Date)5 User (org.apache.dolphinscheduler.dao.entity.User)5 IPage (com.baomidou.mybatisplus.core.metadata.IPage)4 Page (com.baomidou.mybatisplus.extension.plugins.pagination.Page)4 Status (org.apache.dolphinscheduler.api.enums.Status)4 JSONObject (com.alibaba.fastjson.JSONObject)3 IOException (java.io.IOException)3 HashMap (java.util.HashMap)3 ProcessMeta (org.apache.dolphinscheduler.api.dto.ProcessMeta)3 ScheduleParam (org.apache.dolphinscheduler.api.dto.ScheduleParam)3 ParseException (java.text.ParseException)2 ArrayList (java.util.ArrayList)2 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)2 PageInfo (org.apache.dolphinscheduler.api.utils.PageInfo)2