Search in sources :

Example 1 with ProcessData

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

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

the class ProcessDefinitionService method genDagGraph.

/**
 * Generate the DAG Graph based on the process definition id
 *
 * @param processDefinition process definition
 * @return dag graph
 * @throws Exception if exception happens
 */
private DAG<String, TaskNode, TaskNodeRelation> genDagGraph(ProcessDefinition processDefinition) throws Exception {
    String processDefinitionJson = processDefinition.getProcessDefinitionJson();
    ProcessData processData = JSONUtils.parseObject(processDefinitionJson, ProcessData.class);
    // check process data
    if (null != processData) {
        List<TaskNode> taskNodeList = processData.getTasks();
        processDefinition.setGlobalParamList(processData.getGlobalParams());
        ProcessDag processDag = DagHelper.getProcessDag(taskNodeList);
        // Generate concrete Dag to be executed
        return DagHelper.buildDagGraph(processDag);
    }
    return new DAG<>();
}
Also used : ProcessDag(org.apache.dolphinscheduler.common.process.ProcessDag) TaskNode(org.apache.dolphinscheduler.common.model.TaskNode) DAG(org.apache.dolphinscheduler.common.graph.DAG) ProcessData(org.apache.dolphinscheduler.dao.entity.ProcessData)

Example 3 with ProcessData

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

the class ProcessDefinitionService method updateProcessDefinition.

/**
 * update  process definition
 *
 * @param loginUser login user
 * @param projectName project name
 * @param name process definition name
 * @param id process definition id
 * @param processDefinitionJson process definition json
 * @param desc description
 * @param locations locations for nodes
 * @param connects connects for nodes
 * @return update result code
 */
public Map<String, Object> updateProcessDefinition(User loginUser, String projectName, int id, String name, String processDefinitionJson, String desc, String locations, String connects) {
    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;
    }
    ProcessData processData = JSONUtils.parseObject(processDefinitionJson, ProcessData.class);
    Map<String, Object> checkProcessJson = checkProcessNodeList(processData, processDefinitionJson);
    if ((checkProcessJson.get(Constants.STATUS) != Status.SUCCESS)) {
        return checkProcessJson;
    }
    ProcessDefinition processDefine = processService.findProcessDefineById(id);
    // check process definition exists
    if (processDefine == null) {
        putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, id);
        return result;
    }
    if (processDefine.getReleaseState() == ReleaseState.ONLINE) {
        // online can not permit edit
        putMsg(result, Status.PROCESS_DEFINE_NOT_ALLOWED_EDIT, processDefine.getName());
        return result;
    }
    if (!name.equals(processDefine.getName())) {
        // check whether the new process define name exist
        ProcessDefinition definition = processDefineMapper.verifyByDefineName(project.getId(), name);
        if (definition != null) {
            putMsg(result, Status.VERIFY_PROCESS_DEFINITION_NAME_UNIQUE_ERROR, name);
            return result;
        }
    }
    Date now = new Date();
    processDefine.setId(id);
    processDefine.setName(name);
    processDefine.setReleaseState(ReleaseState.OFFLINE);
    processDefine.setProjectId(project.getId());
    processDefine.setProcessDefinitionJson(processDefinitionJson);
    processDefine.setDescription(desc);
    processDefine.setLocations(locations);
    processDefine.setConnects(connects);
    processDefine.setTimeout(processData.getTimeout());
    processDefine.setTenantId(processData.getTenantId());
    processDefine.setModifyBy(loginUser.getUserName());
    processDefine.setResourceIds(getResourceIds(processData));
    // custom global params
    List<Property> globalParamsList = new ArrayList<>();
    if (CollectionUtils.isNotEmpty(processData.getGlobalParams())) {
        Set<Property> userDefParamsSet = new HashSet<>(processData.getGlobalParams());
        globalParamsList = new ArrayList<>(userDefParamsSet);
    }
    processDefine.setGlobalParamList(globalParamsList);
    processDefine.setUpdateTime(now);
    processDefine.setFlag(Flag.YES);
    if (processDefineMapper.updateById(processDefine) > 0) {
        putMsg(result, Status.SUCCESS);
    } else {
        putMsg(result, Status.UPDATE_PROCESS_DEFINITION_ERROR);
    }
    return result;
}
Also used : Status(org.apache.dolphinscheduler.api.enums.Status) 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) Date(java.util.Date) Project(org.apache.dolphinscheduler.dao.entity.Project) JSONObject(com.alibaba.fastjson.JSONObject) Property(org.apache.dolphinscheduler.common.process.Property) HashSet(java.util.HashSet)

Example 4 with ProcessData

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

the class BaseDAGService method processInstance2DAG.

/**
 * process instance to DAG
 *
 * @param processInstance input process instance
 * @return process instance dag.
 */
public static DAG<String, TaskNode, TaskNodeRelation> processInstance2DAG(ProcessInstance processInstance) {
    String processDefinitionJson = processInstance.getProcessInstanceJson();
    ProcessData processData = JSONUtils.parseObject(processDefinitionJson, ProcessData.class);
    List<TaskNode> taskNodeList = processData.getTasks();
    ProcessDag processDag = DagHelper.getProcessDag(taskNodeList);
    return DagHelper.buildDagGraph(processDag);
}
Also used : ProcessDag(org.apache.dolphinscheduler.common.process.ProcessDag) TaskNode(org.apache.dolphinscheduler.common.model.TaskNode) ProcessData(org.apache.dolphinscheduler.dao.entity.ProcessData)

Example 5 with ProcessData

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

the class DagHelperTest method testBuildDagGraph.

@Test
public void testBuildDagGraph() {
    String shellJson = "{\"globalParams\":[],\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-9527\",\"name\":\"shell-1\"," + "\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"#!/bin/bash\\necho \\\"shell-1\\\"\"}," + "\"description\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\"," + "\"timeout\":{\"strategy\":\"\",\"interval\":1,\"enable\":false},\"taskInstancePriority\":\"MEDIUM\"," + "\"workerGroupId\":-1,\"preTasks\":[]}],\"tenantId\":1,\"timeout\":0}";
    ProcessData processData = JSONUtils.parseObject(shellJson, ProcessData.class);
    assert processData != null;
    List<TaskNode> taskNodeList = processData.getTasks();
    ProcessDag processDag = DagHelper.getProcessDag(taskNodeList);
    DAG<String, TaskNode, TaskNodeRelation> dag = DagHelper.buildDagGraph(processDag);
    Assert.assertNotNull(dag);
}
Also used : ProcessDag(org.apache.dolphinscheduler.common.process.ProcessDag) TaskNode(org.apache.dolphinscheduler.common.model.TaskNode) ProcessData(org.apache.dolphinscheduler.dao.entity.ProcessData) TaskNodeRelation(org.apache.dolphinscheduler.common.model.TaskNodeRelation) Test(org.junit.Test)

Aggregations

ProcessData (org.apache.dolphinscheduler.dao.entity.ProcessData)10 TaskNode (org.apache.dolphinscheduler.common.model.TaskNode)7 JSONObject (com.alibaba.fastjson.JSONObject)5 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)5 HashMap (java.util.HashMap)4 ProcessDag (org.apache.dolphinscheduler.common.process.ProcessDag)4 ProcessDefinition (org.apache.dolphinscheduler.dao.entity.ProcessDefinition)4 ArrayList (java.util.ArrayList)2 Date (java.util.Date)2 HashSet (java.util.HashSet)2 Status (org.apache.dolphinscheduler.api.enums.Status)2 TaskNodeRelation (org.apache.dolphinscheduler.common.model.TaskNodeRelation)2 Property (org.apache.dolphinscheduler.common.process.Property)2 Project (org.apache.dolphinscheduler.dao.entity.Project)2 Test (org.junit.Test)2 List (java.util.List)1 DAG (org.apache.dolphinscheduler.common.graph.DAG)1 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)1