Search in sources :

Example 1 with ProcessDefinition

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

the class ProcessDefinitionService method queryProcessDefinitionListPaging.

/**
 * query process definition list paging
 *
 * @param loginUser login user
 * @param projectName project name
 * @param searchVal search value
 * @param pageNo page number
 * @param pageSize page size
 * @param userId user id
 * @return process definition page
 */
public Map<String, Object> queryProcessDefinitionListPaging(User loginUser, String projectName, String searchVal, Integer pageNo, Integer pageSize, Integer userId) {
    Map<String, Object> result = new HashMap<>(5);
    Project project = projectMapper.queryByName(projectName);
    Map<String, Object> checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName);
    Status resultStatus = (Status) checkResult.get(Constants.STATUS);
    if (resultStatus != Status.SUCCESS) {
        return checkResult;
    }
    Page<ProcessDefinition> page = new Page(pageNo, pageSize);
    IPage<ProcessDefinition> processDefinitionIPage = processDefineMapper.queryDefineListPaging(page, searchVal, userId, project.getId(), isAdmin(loginUser));
    PageInfo pageInfo = new PageInfo<ProcessData>(pageNo, pageSize);
    pageInfo.setTotalCount((int) processDefinitionIPage.getTotal());
    pageInfo.setLists(processDefinitionIPage.getRecords());
    result.put(Constants.DATA_LIST, pageInfo);
    putMsg(result, Status.SUCCESS);
    return result;
}
Also used : Status(org.apache.dolphinscheduler.api.enums.Status) Project(org.apache.dolphinscheduler.dao.entity.Project) PageInfo(org.apache.dolphinscheduler.api.utils.PageInfo) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) JSONObject(com.alibaba.fastjson.JSONObject) ProcessDefinition(org.apache.dolphinscheduler.dao.entity.ProcessDefinition) IPage(com.baomidou.mybatisplus.core.metadata.IPage) Page(com.baomidou.mybatisplus.extension.plugins.pagination.Page)

Example 2 with ProcessDefinition

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

the class ProcessDefinitionService method viewTree.

/**
 * Encapsulates the TreeView structure
 *
 * @param processId process definition id
 * @param limit limit
 * @return tree view json data
 * @throws Exception exception
 */
public Map<String, Object> viewTree(Integer processId, Integer limit) throws Exception {
    Map<String, Object> result = new HashMap<>();
    ProcessDefinition processDefinition = processDefineMapper.selectById(processId);
    if (null == processDefinition) {
        logger.info("process define not exists");
        putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processDefinition);
        return result;
    }
    DAG<String, TaskNode, TaskNodeRelation> dag = genDagGraph(processDefinition);
    /**
     * nodes that is running
     */
    Map<String, List<TreeViewDto>> runningNodeMap = new ConcurrentHashMap<>();
    /**
     * nodes that is waiting torun
     */
    Map<String, List<TreeViewDto>> waitingRunningNodeMap = new ConcurrentHashMap<>();
    /**
     * List of process instances
     */
    List<ProcessInstance> processInstanceList = processInstanceMapper.queryByProcessDefineId(processId, limit);
    for (ProcessInstance processInstance : processInstanceList) {
        processInstance.setDuration(DateUtils.differSec(processInstance.getStartTime(), processInstance.getEndTime()));
    }
    if (limit > processInstanceList.size()) {
        limit = processInstanceList.size();
    }
    TreeViewDto parentTreeViewDto = new TreeViewDto();
    parentTreeViewDto.setName("DAG");
    parentTreeViewDto.setType("");
    for (int i = limit - 1; i >= 0; i--) {
        ProcessInstance processInstance = processInstanceList.get(i);
        Date endTime = processInstance.getEndTime() == null ? new Date() : processInstance.getEndTime();
        parentTreeViewDto.getInstances().add(new Instance(processInstance.getId(), processInstance.getName(), "", processInstance.getState().toString(), processInstance.getStartTime(), endTime, processInstance.getHost(), DateUtils.format2Readable(endTime.getTime() - processInstance.getStartTime().getTime())));
    }
    List<TreeViewDto> parentTreeViewDtoList = new ArrayList<>();
    parentTreeViewDtoList.add(parentTreeViewDto);
    // Here is the encapsulation task instance
    for (String startNode : dag.getBeginNode()) {
        runningNodeMap.put(startNode, parentTreeViewDtoList);
    }
    while (Stopper.isRunning()) {
        Set<String> postNodeList = null;
        Iterator<Map.Entry<String, List<TreeViewDto>>> iter = runningNodeMap.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry<String, List<TreeViewDto>> en = iter.next();
            String nodeName = en.getKey();
            parentTreeViewDtoList = en.getValue();
            TreeViewDto treeViewDto = new TreeViewDto();
            treeViewDto.setName(nodeName);
            TaskNode taskNode = dag.getNode(nodeName);
            treeViewDto.setType(taskNode.getType());
            // set treeViewDto instances
            for (int i = limit - 1; i >= 0; i--) {
                ProcessInstance processInstance = processInstanceList.get(i);
                TaskInstance taskInstance = taskInstanceMapper.queryByInstanceIdAndName(processInstance.getId(), nodeName);
                if (taskInstance == null) {
                    treeViewDto.getInstances().add(new Instance(-1, "not running", null));
                } else {
                    Date startTime = taskInstance.getStartTime() == null ? new Date() : taskInstance.getStartTime();
                    Date endTime = taskInstance.getEndTime() == null ? new Date() : taskInstance.getEndTime();
                    int subProcessId = 0;
                    /**
                     * if process is sub process, the return sub id, or sub id=0
                     */
                    if (taskInstance.getTaskType().equals(TaskType.SUB_PROCESS.name())) {
                        String taskJson = taskInstance.getTaskJson();
                        taskNode = JSON.parseObject(taskJson, TaskNode.class);
                        subProcessId = Integer.parseInt(JSON.parseObject(taskNode.getParams()).getString(CMDPARAM_SUB_PROCESS_DEFINE_ID));
                    }
                    treeViewDto.getInstances().add(new Instance(taskInstance.getId(), taskInstance.getName(), taskInstance.getTaskType(), taskInstance.getState().toString(), taskInstance.getStartTime(), taskInstance.getEndTime(), taskInstance.getHost(), DateUtils.format2Readable(endTime.getTime() - startTime.getTime()), subProcessId));
                }
            }
            for (TreeViewDto pTreeViewDto : parentTreeViewDtoList) {
                pTreeViewDto.getChildren().add(treeViewDto);
            }
            postNodeList = dag.getSubsequentNodes(nodeName);
            if (CollectionUtils.isNotEmpty(postNodeList)) {
                for (String nextNodeName : postNodeList) {
                    List<TreeViewDto> treeViewDtoList = waitingRunningNodeMap.get(nextNodeName);
                    if (CollectionUtils.isNotEmpty(treeViewDtoList)) {
                        treeViewDtoList.add(treeViewDto);
                        waitingRunningNodeMap.put(nextNodeName, treeViewDtoList);
                    } else {
                        treeViewDtoList = new ArrayList<>();
                        treeViewDtoList.add(treeViewDto);
                        waitingRunningNodeMap.put(nextNodeName, treeViewDtoList);
                    }
                }
            }
            runningNodeMap.remove(nodeName);
        }
        if (waitingRunningNodeMap == null || waitingRunningNodeMap.size() == 0) {
            break;
        } else {
            runningNodeMap.putAll(waitingRunningNodeMap);
            waitingRunningNodeMap.clear();
        }
    }
    result.put(Constants.DATA_LIST, parentTreeViewDto);
    result.put(Constants.STATUS, Status.SUCCESS);
    result.put(Constants.MSG, Status.SUCCESS.getMsg());
    return result;
}
Also used : ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) ProcessInstance(org.apache.dolphinscheduler.dao.entity.ProcessInstance) Instance(org.apache.dolphinscheduler.api.dto.treeview.Instance) TaskInstance(org.apache.dolphinscheduler.dao.entity.TaskInstance) ArrayList(java.util.ArrayList) ProcessDefinition(org.apache.dolphinscheduler.dao.entity.ProcessDefinition) TaskNodeRelation(org.apache.dolphinscheduler.common.model.TaskNodeRelation) List(java.util.List) ArrayList(java.util.ArrayList) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) TaskInstance(org.apache.dolphinscheduler.dao.entity.TaskInstance) TaskNode(org.apache.dolphinscheduler.common.model.TaskNode) Date(java.util.Date) JSONObject(com.alibaba.fastjson.JSONObject) ProcessInstance(org.apache.dolphinscheduler.dao.entity.ProcessInstance) TreeViewDto(org.apache.dolphinscheduler.api.dto.treeview.TreeViewDto) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap)

Example 3 with ProcessDefinition

use of org.apache.dolphinscheduler.dao.entity.ProcessDefinition 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 4 with ProcessDefinition

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

the class ProcessDefinitionService method getTaskNodeListByDefinitionIdList.

/**
 * get task node details based on process definition
 *
 * @param defineIdList define id list
 * @return task node list
 * @throws Exception exception
 */
public Map<String, Object> getTaskNodeListByDefinitionIdList(String defineIdList) throws Exception {
    Map<String, Object> result = new HashMap<>();
    Map<Integer, List<TaskNode>> taskNodeMap = new HashMap<>();
    String[] idList = defineIdList.split(",");
    List<Integer> idIntList = new ArrayList<>();
    for (String definitionId : idList) {
        idIntList.add(Integer.parseInt(definitionId));
    }
    Integer[] idArray = idIntList.toArray(new Integer[idIntList.size()]);
    List<ProcessDefinition> processDefinitionList = processDefineMapper.queryDefinitionListByIdList(idArray);
    if (CollectionUtils.isEmpty(processDefinitionList)) {
        logger.info("process definition not exists");
        putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, defineIdList);
        return result;
    }
    for (ProcessDefinition processDefinition : processDefinitionList) {
        String processDefinitionJson = processDefinition.getProcessDefinitionJson();
        ProcessData processData = JSONUtils.parseObject(processDefinitionJson, ProcessData.class);
        List<TaskNode> taskNodeList = (processData.getTasks() == null) ? new ArrayList<>() : processData.getTasks();
        taskNodeMap.put(processDefinition.getId(), taskNodeList);
    }
    result.put(Constants.DATA_LIST, taskNodeMap);
    putMsg(result, Status.SUCCESS);
    return result;
}
Also used : TaskNode(org.apache.dolphinscheduler.common.model.TaskNode) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ProcessDefinition(org.apache.dolphinscheduler.dao.entity.ProcessDefinition) ProcessData(org.apache.dolphinscheduler.dao.entity.ProcessData) JSONObject(com.alibaba.fastjson.JSONObject) List(java.util.List) ArrayList(java.util.ArrayList)

Example 5 with ProcessDefinition

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

the class ProcessDefinitionServiceTest method testGetTaskNodeListByDefinitionId.

@Test
public void testGetTaskNodeListByDefinitionId() throws Exception {
    // process definition not exist
    Mockito.when(processDefineMapper.selectById(46)).thenReturn(null);
    Map<String, Object> processDefinitionNullRes = processDefinitionService.getTaskNodeListByDefinitionId(46);
    Assert.assertEquals(Status.PROCESS_DEFINE_NOT_EXIST, processDefinitionNullRes.get(Constants.STATUS));
    // process data null
    ProcessDefinition processDefinition = getProcessDefinition();
    Mockito.when(processDefineMapper.selectById(46)).thenReturn(processDefinition);
    Map<String, Object> successRes = processDefinitionService.getTaskNodeListByDefinitionId(46);
    Assert.assertEquals(Status.DATA_IS_NOT_VALID, successRes.get(Constants.STATUS));
    // success
    processDefinition.setProcessDefinitionJson(shellJson);
    Mockito.when(processDefineMapper.selectById(46)).thenReturn(processDefinition);
    Map<String, Object> dataNotValidRes = processDefinitionService.getTaskNodeListByDefinitionId(46);
    Assert.assertEquals(Status.SUCCESS, dataNotValidRes.get(Constants.STATUS));
}
Also used : JSONObject(com.alibaba.fastjson.JSONObject) ProcessDefinition(org.apache.dolphinscheduler.dao.entity.ProcessDefinition) SpringBootTest(org.springframework.boot.test.context.SpringBootTest) Test(org.junit.Test)

Aggregations

ProcessDefinition (org.apache.dolphinscheduler.dao.entity.ProcessDefinition)58 JSONObject (com.alibaba.fastjson.JSONObject)24 Test (org.junit.Test)24 Project (org.apache.dolphinscheduler.dao.entity.Project)23 HashMap (java.util.HashMap)21 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)18 ArrayList (java.util.ArrayList)15 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)13 ProcessInstance (org.apache.dolphinscheduler.dao.entity.ProcessInstance)11 Schedule (org.apache.dolphinscheduler.dao.entity.Schedule)11 TaskInstance (org.apache.dolphinscheduler.dao.entity.TaskInstance)11 Status (org.apache.dolphinscheduler.api.enums.Status)10 Date (java.util.Date)9 User (org.apache.dolphinscheduler.dao.entity.User)9 Transactional (org.springframework.transaction.annotation.Transactional)7 IPage (com.baomidou.mybatisplus.core.metadata.IPage)6 Page (com.baomidou.mybatisplus.extension.plugins.pagination.Page)6 ProcessData (org.apache.dolphinscheduler.dao.entity.ProcessData)5 JSONArray (com.alibaba.fastjson.JSONArray)4 TaskNode (org.apache.dolphinscheduler.common.model.TaskNode)4