From cb6da4dd0dbe69263c329330b6a31a67449c4bad Mon Sep 17 00:00:00 2001 From: wenmo <32723967+wenmo@users.noreply.github.com> Date: Sun, 24 Dec 2023 21:19:53 +0800 Subject: [PATCH] [Fix-2731] [scheduler] Fix push task to dolphinscheduler --- .../dinky/controller/SchedulerController.java | 4 - .../service/impl/SchedulerServiceImpl.java | 115 ++++++++++++------ .../dinky/scheduler/client/ProcessClient.java | 19 +-- .../dinky/scheduler/client/TaskClient.java | 2 +- .../scheduler/model/DagNodeLocation.java | 2 + .../scheduler/model/ProcessTaskRelation.java | 12 ++ .../dinky/scheduler/model/TaskDefinition.java | 3 + .../dinky/scheduler/model/TaskRequest.java | 3 + .../dinky/scheduler/utils/ReadFileUtil.java | 80 ------------ dinky-web/src/locales/en-US/pages.ts | 2 + dinky-web/src/locales/zh-CN/pages.ts | 2 + .../HeaderContainer/PushDolphin/function.tsx | 2 + .../HeaderContainer/PushDolphin/index.tsx | 7 ++ .../DataStudio/HeaderContainer/index.tsx | 5 - dinky-web/src/types/Studio/data.d.ts | 2 + dinky-web/src/types/Studio/init.d.ts | 1 + 16 files changed, 124 insertions(+), 137 deletions(-) delete mode 100644 dinky-scheduler/src/main/java/org/dinky/scheduler/utils/ReadFileUtil.java diff --git a/dinky-admin/src/main/java/org/dinky/controller/SchedulerController.java b/dinky-admin/src/main/java/org/dinky/controller/SchedulerController.java index 3c15894348..85eeff6748 100644 --- a/dinky-admin/src/main/java/org/dinky/controller/SchedulerController.java +++ b/dinky-admin/src/main/java/org/dinky/controller/SchedulerController.java @@ -35,7 +35,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import cn.hutool.core.collection.CollUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -84,9 +83,6 @@ public Result getTaskDefinition(@ApiParam(value = "dinky任务id example = "1") public Result> getTaskMainInfos(@ApiParam(value = "dinky任务id") @RequestParam Long dinkyTaskId) { List taskMainInfos = schedulerService.getTaskMainInfos(dinkyTaskId); - if (CollUtil.isEmpty(taskMainInfos)) { - return Result.failed(); - } return Result.succeed(taskMainInfos); } diff --git a/dinky-admin/src/main/java/org/dinky/service/impl/SchedulerServiceImpl.java b/dinky-admin/src/main/java/org/dinky/service/impl/SchedulerServiceImpl.java index 20156b5c2f..827c21f21f 100644 --- a/dinky-admin/src/main/java/org/dinky/service/impl/SchedulerServiceImpl.java +++ b/dinky-admin/src/main/java/org/dinky/service/impl/SchedulerServiceImpl.java @@ -33,14 +33,15 @@ import org.dinky.scheduler.model.DinkyTaskParams; import org.dinky.scheduler.model.DinkyTaskRequest; import org.dinky.scheduler.model.ProcessDefinition; +import org.dinky.scheduler.model.ProcessTaskRelation; import org.dinky.scheduler.model.Project; import org.dinky.scheduler.model.TaskDefinition; import org.dinky.scheduler.model.TaskMainInfo; import org.dinky.scheduler.model.TaskRequest; import org.dinky.service.CatalogueService; import org.dinky.service.SchedulerService; +import org.dinky.utils.JsonUtils; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -76,6 +77,13 @@ public class SchedulerServiceImpl implements SchedulerService { */ @Override public boolean pushAddTask(DinkyTaskRequest dinkyTaskRequest) { + // Use root catalog as process (workflow) name. + Catalogue catalogue = catalogueService.getOne( + new LambdaQueryWrapper().eq(Catalogue::getTaskId, dinkyTaskRequest.getTaskId())); + if (catalogue == null) { + log.error(Status.DS_GET_NODE_LIST_ERROR.getMessage()); + throw new BusException(Status.DS_GET_NODE_LIST_ERROR); + } DinkyTaskParams dinkyTaskParams = new DinkyTaskParams(); dinkyTaskParams.setTaskId(dinkyTaskRequest.getTaskId()); @@ -84,77 +92,91 @@ public boolean pushAddTask(DinkyTaskRequest dinkyTaskRequest) { dinkyTaskRequest.setTaskParams(JSONUtil.parseObj(dinkyTaskParams).toString()); dinkyTaskRequest.setTaskType(TASK_TYPE); - Catalogue catalogue = catalogueService.getOne( - new LambdaQueryWrapper().eq(Catalogue::getTaskId, dinkyTaskRequest.getTaskId())); - if (catalogue == null) { - log.error(Status.DS_GET_NODE_LIST_ERROR.getMessage()); - throw new BusException(Status.DS_GET_NODE_LIST_ERROR); - } - String processName = getDinkyNames(catalogue, 0); long projectCode = SystemInit.getProject().getCode(); + // Get process from dolphin scheduler ProcessDefinition process = processClient.getProcessDefinitionInfo(projectCode, processName); String taskName = catalogue.getName() + ":" + catalogue.getId(); dinkyTaskRequest.setName(taskName); TaskRequest taskRequest = new TaskRequest(); - JSONArray array = new JSONArray(); Long taskCode = taskClient.genTaskCode(projectCode); + // If the process does not exist, a process needs to be created. if (process == null) { dinkyTaskRequest.setCode(taskCode); BeanUtil.copyProperties(dinkyTaskRequest, taskRequest); taskRequest.setTimeoutFlag(dinkyTaskRequest.getTimeoutFlag()); taskRequest.setFlag(dinkyTaskRequest.getFlag()); + taskRequest.setIsCache(dinkyTaskRequest.getIsCache()); JSONObject jsonObject = JSONUtil.parseObj(taskRequest); - array.set(jsonObject); + JSONArray taskArray = new JSONArray(); + taskArray.set(jsonObject); log.info(Status.DS_ADD_WORK_FLOW_DEFINITION_SUCCESS.getMessage()); - // 随机出一个 x y 坐标 + DagNodeLocation dagNodeLocation = new DagNodeLocation(); dagNodeLocation.setTaskCode(taskCode); dagNodeLocation.setX(RandomUtil.randomLong(200, 500)); dagNodeLocation.setY(RandomUtil.randomLong(100, 400)); log.info("DagNodeLocation Info: {}", dagNodeLocation); + + ProcessTaskRelation processTaskRelation = ProcessTaskRelation.generateProcessTaskRelation(taskCode); + JSONObject processTaskRelationJSONObject = JSONUtil.parseObj(processTaskRelation); + JSONArray taskRelationArray = new JSONArray(); + taskRelationArray.set(processTaskRelationJSONObject); + processClient.createOrUpdateProcessDefinition( - projectCode, null, processName, taskCode, array.toString(), Arrays.asList(dagNodeLocation), false); + projectCode, + null, + processName, + taskCode, + taskRelationArray.toString(), + taskArray.toString(), + Arrays.asList(dagNodeLocation), + false); + return true; } - if (process != null && process.getReleaseState() == ReleaseState.ONLINE) { + // If the workflow is in an online state, it cannot be updated. + if (process.getReleaseState() == ReleaseState.ONLINE) { log.error(Status.DS_WORK_FLOW_DEFINITION_ONLINE.getMessage(), processName); } - TaskMainInfo taskMainInfo = taskClient.getTaskMainInfo(projectCode, processName, taskName, "DINKY"); + TaskMainInfo taskMainInfo = taskClient.getTaskMainInfo(projectCode, processName, taskName, TASK_TYPE); + // If task name exist, update task definition. if (taskMainInfo != null) { - // if task name exist, update task definition log.warn(Status.DS_WORK_FLOW_DEFINITION_TASK_NAME_EXIST.getMessage(), processName, taskName); return pushUpdateTask( projectCode, taskMainInfo.getProcessDefinitionCode(), taskMainInfo.getTaskCode(), dinkyTaskRequest); } - + // If the task does not exist, a dinky task needs to be created. dinkyTaskRequest.setCode(taskCode); BeanUtil.copyProperties(dinkyTaskRequest, taskRequest); taskRequest.setTimeoutFlag(dinkyTaskRequest.getTimeoutFlag()); taskRequest.setFlag(dinkyTaskRequest.getFlag()); + taskRequest.setIsCache(dinkyTaskRequest.getIsCache()); + String taskDefinitionJsonObj = JSONUtil.toJsonStr(taskRequest); - if (process != null) { - taskClient.createTaskDefinition( - projectCode, process.getCode(), dinkyTaskRequest.getUpstreamCodes(), taskDefinitionJsonObj); - // 更新 process 的 location 信息 - updateProcessDefinition(process, taskCode, taskRequest, array, projectCode); + taskClient.createTaskDefinition( + projectCode, process.getCode(), dinkyTaskRequest.getUpstreamCodes(), taskDefinitionJsonObj); + // update the location of process + updateProcessDefinition(process, taskCode, taskRequest, projectCode); - log.info(Status.DS_ADD_TASK_DEFINITION_SUCCESS.getMessage()); - return true; - } - return false; + log.info(Status.DS_ADD_TASK_DEFINITION_SUCCESS.getMessage()); + return true; } - private void updateProcessDefinition( - ProcessDefinition process, Long taskCode, TaskRequest taskRequest, JSONArray array, long projectCode) { - JSONObject jsonObject = JSONUtil.parseObj(taskRequest); - array.set(jsonObject); + private void updateProcessDefinition(ProcessDefinition process, Long taskCode, TaskRequest task, long projectCode) { - List locations = new ArrayList<>(); + DagData dagData = processClient.getProcessDefinitionInfo(projectCode, process.getCode()); + if (dagData == null) { + log.error(Status.DS_WORK_FLOW_DEFINITION_NOT_EXIST.getMessage()); + throw new BusException(Status.DS_WORK_FLOW_DEFINITION_NOT_EXIST); + } + List processTaskRelationList = dagData.getProcessTaskRelationList(); + List taskDefinitionList = dagData.getTaskDefinitionList(); + List locations = process.getLocations(); if (CollUtil.isNotEmpty(process.getLocations())) { boolean matched = process.getLocations().stream().anyMatch(location -> location.getTaskCode() == taskCode); @@ -175,13 +197,13 @@ private void updateProcessDefinition( .getAsLong(); long yMin = process.getLocations().stream() .mapToLong(DagNodeLocation::getY) - .max() + .min() .getAsLong(); // 随机出一个 x y 坐标 DagNodeLocation dagNodeLocation = new DagNodeLocation(); dagNodeLocation.setTaskCode(taskCode); - dagNodeLocation.setX(RandomUtil.randomLong(xMax, xMin)); - dagNodeLocation.setY(RandomUtil.randomLong(yMax, yMin)); + dagNodeLocation.setX(RandomUtil.randomLong(xMin == xMax ? 0 : xMin, xMax)); + dagNodeLocation.setY(RandomUtil.randomLong(yMin == yMax ? 0 : yMin, yMax)); locations = process.getLocations(); locations.add(dagNodeLocation); } @@ -194,13 +216,27 @@ private void updateProcessDefinition( locations.add(dagNodeLocation); } + JSONArray taskArray = new JSONArray(); + taskDefinitionList.removeIf(taskDefinition -> (task.getName()).equalsIgnoreCase(taskDefinition.getName())); + + taskArray.addAll(taskDefinitionList); + taskArray.add(task); + String processTaskRelationListJson = JsonUtils.toJsonString(processTaskRelationList); + processClient.createOrUpdateProcessDefinition( - projectCode, process.getCode(), process.getName(), taskCode, array.toString(), locations, true); + projectCode, + process.getCode(), + process.getName(), + taskCode, + processTaskRelationListJson, + taskArray.toString(), + locations, + true); log.info( Status.DS_PROCESS_DEFINITION_UPDATE.getMessage(), process.getName(), taskCode, - array.toString(), + taskArray.toString(), locations); } @@ -251,14 +287,13 @@ public boolean pushUpdateTask( BeanUtil.copyProperties(dinkyTaskRequest, taskRequest); taskRequest.setTimeoutFlag(dinkyTaskRequest.getTimeoutFlag()); taskRequest.setFlag(dinkyTaskRequest.getFlag()); + taskRequest.setIsCache(dinkyTaskRequest.getIsCache()); String taskDefinitionJsonObj = JSONUtil.toJsonStr(taskRequest); Long updatedTaskDefinition = taskClient.updateTaskDefinition( projectCode, taskCode, dinkyTaskRequest.getUpstreamCodes(), taskDefinitionJsonObj); - JSONObject jsonObject = JSONUtil.parseObj(taskRequest); - JSONArray array = new JSONArray(); - array.set(jsonObject); - updateProcessDefinition(process, taskCode, taskRequest, array, projectCode); + + updateProcessDefinition(process, taskCode, taskRequest, projectCode); if (updatedTaskDefinition != null && updatedTaskDefinition > 0) { log.info(Status.MODIFY_SUCCESS.getMessage()); return true; @@ -309,7 +344,7 @@ public TaskDefinition getTaskDefinitionInfo(long dinkyTaskId) { String processName = getDinkyNames(catalogue, 0); String taskName = catalogue.getName() + ":" + catalogue.getId(); - TaskMainInfo taskMainInfo = taskClient.getTaskMainInfo(projectCode, processName, taskName, "DINKY"); + TaskMainInfo taskMainInfo = taskClient.getTaskMainInfo(projectCode, processName, taskName, TASK_TYPE); TaskDefinition taskDefinition = null; if (taskMainInfo == null) { log.error(Status.DS_WORK_FLOW_DEFINITION_NOT_EXIST.getMessage(), processName, taskName); diff --git a/dinky-scheduler/src/main/java/org/dinky/scheduler/client/ProcessClient.java b/dinky-scheduler/src/main/java/org/dinky/scheduler/client/ProcessClient.java index fe1c492f6c..d18ad489a9 100644 --- a/dinky-scheduler/src/main/java/org/dinky/scheduler/client/ProcessClient.java +++ b/dinky-scheduler/src/main/java/org/dinky/scheduler/client/ProcessClient.java @@ -28,7 +28,7 @@ import org.dinky.scheduler.result.Result; import org.dinky.scheduler.utils.MyJSONUtil; import org.dinky.scheduler.utils.ParamUtil; -import org.dinky.scheduler.utils.ReadFileUtil; +import org.dinky.utils.JsonUtils; import java.util.ArrayList; import java.util.Collections; @@ -75,7 +75,7 @@ public List getProcessDefinition(Long projectCode, String pro .getDolphinschedulerToken() .getValue()) .form(ParamUtil.getPageParams(processName)) - .timeout(5000) + .timeout(20000) .execute() .body(); PageInfo data = MyJSONUtil.toPageBean(content); @@ -85,7 +85,11 @@ public List getProcessDefinition(Long projectCode, String pro } for (JSONObject jsonObject : data.getTotalList()) { - lists.add(MyJSONUtil.toBean(jsonObject, ProcessDefinition.class)); + ProcessDefinition processDefinition = MyJSONUtil.toBean(jsonObject, ProcessDefinition.class); + // The locations of processDefinition is json string + List locations = jsonObject.getBeanList("locations", DagNodeLocation.class); + processDefinition.setLocations(locations); + lists.add(processDefinition); } return lists; } @@ -127,7 +131,7 @@ public DagData getProcessDefinitionInfo(Long projectCode, Long processCode) { SystemConfiguration.getInstances() .getDolphinschedulerToken() .getValue()) - .timeout(5000) + .timeout(20000) .execute() .body(); @@ -148,6 +152,7 @@ public ProcessDefinition createOrUpdateProcessDefinition( Long processCode, String processName, Long taskCode, + String taskRelationJson, String taskDefinitionJson, List locations, boolean isModify) { @@ -160,8 +165,8 @@ public ProcessDefinition createOrUpdateProcessDefinition( params.put("name", processName); params.put("description", "系统添加"); params.put("tenantCode", "default"); - params.put("locations", locations); - params.put("taskRelationJson", ReadFileUtil.taskRelation(Collections.singletonMap("code", taskCode))); + params.put("locations", JsonUtils.toJsonString(locations)); + params.put("taskRelationJson", taskRelationJson); params.put("taskDefinitionJson", taskDefinitionJson); params.put("executionType", "PARALLEL"); @@ -178,7 +183,7 @@ public ProcessDefinition createOrUpdateProcessDefinition( .getDolphinschedulerToken() .getValue()) .form(params) - .timeout(5000) + .timeout(20000) .execute(); String content = httpResponse.body(); return MyJSONUtil.verifyResult(MyJSONUtil.toBean(content, new TypeReference>() {})); diff --git a/dinky-scheduler/src/main/java/org/dinky/scheduler/client/TaskClient.java b/dinky-scheduler/src/main/java/org/dinky/scheduler/client/TaskClient.java index feea21fc78..49893659a6 100644 --- a/dinky-scheduler/src/main/java/org/dinky/scheduler/client/TaskClient.java +++ b/dinky-scheduler/src/main/java/org/dinky/scheduler/client/TaskClient.java @@ -138,7 +138,7 @@ public TaskDefinition getTaskDefinition(Long projectCode, Long taskCode) { SystemConfiguration.getInstances() .getDolphinschedulerToken() .getValue()) - .timeout(5000) + .timeout(20000) .execute() .body(); diff --git a/dinky-scheduler/src/main/java/org/dinky/scheduler/model/DagNodeLocation.java b/dinky-scheduler/src/main/java/org/dinky/scheduler/model/DagNodeLocation.java index da1e473575..186c3781ae 100644 --- a/dinky-scheduler/src/main/java/org/dinky/scheduler/model/DagNodeLocation.java +++ b/dinky-scheduler/src/main/java/org/dinky/scheduler/model/DagNodeLocation.java @@ -26,6 +26,8 @@ @Data public class DagNodeLocation implements Serializable { + private static final long serialVersionUID = -5243356147439794746L; + private long taskCode; private long x; private long y; diff --git a/dinky-scheduler/src/main/java/org/dinky/scheduler/model/ProcessTaskRelation.java b/dinky-scheduler/src/main/java/org/dinky/scheduler/model/ProcessTaskRelation.java index be4393be13..5d53abe602 100644 --- a/dinky-scheduler/src/main/java/org/dinky/scheduler/model/ProcessTaskRelation.java +++ b/dinky-scheduler/src/main/java/org/dinky/scheduler/model/ProcessTaskRelation.java @@ -67,4 +67,16 @@ public class ProcessTaskRelation { @ApiModelProperty(value = "更新时间") private Date updateTime; + + public static ProcessTaskRelation generateProcessTaskRelation(long taskCode) { + ProcessTaskRelation processTaskRelation = new ProcessTaskRelation(); + processTaskRelation.setName(""); + processTaskRelation.setPreTaskCode(0); + processTaskRelation.setPreTaskVersion(0); + processTaskRelation.setPostTaskCode(taskCode); + processTaskRelation.setPostTaskVersion(1); + processTaskRelation.setConditionType(ConditionType.NONE); + processTaskRelation.setConditionParams("{}"); + return processTaskRelation; + } } diff --git a/dinky-scheduler/src/main/java/org/dinky/scheduler/model/TaskDefinition.java b/dinky-scheduler/src/main/java/org/dinky/scheduler/model/TaskDefinition.java index a0c6f6105c..db74bb45a6 100644 --- a/dinky-scheduler/src/main/java/org/dinky/scheduler/model/TaskDefinition.java +++ b/dinky-scheduler/src/main/java/org/dinky/scheduler/model/TaskDefinition.java @@ -74,6 +74,9 @@ public class TaskDefinition { @ApiModelProperty(value = "运行标志 yes 正常/no 禁止执行") private Flag flag; + @ApiModelProperty(value = "Cache run: yes/no ") + private Flag isCache; + @ApiModelProperty(value = "优先级") private Priority taskPriority; diff --git a/dinky-scheduler/src/main/java/org/dinky/scheduler/model/TaskRequest.java b/dinky-scheduler/src/main/java/org/dinky/scheduler/model/TaskRequest.java index 4e1dc395b9..5310b5f2b4 100644 --- a/dinky-scheduler/src/main/java/org/dinky/scheduler/model/TaskRequest.java +++ b/dinky-scheduler/src/main/java/org/dinky/scheduler/model/TaskRequest.java @@ -53,6 +53,9 @@ public class TaskRequest { @ApiModelProperty(value = "运行标志 yes 正常/no 禁止执行") private String flag; + @ApiModelProperty(value = "Cache run: yes/no") + private String isCache; + @ApiModelProperty(value = "任务参数 默认DINKY参数") private String taskParams; diff --git a/dinky-scheduler/src/main/java/org/dinky/scheduler/utils/ReadFileUtil.java b/dinky-scheduler/src/main/java/org/dinky/scheduler/utils/ReadFileUtil.java deleted file mode 100644 index 69e50c595d..0000000000 --- a/dinky-scheduler/src/main/java/org/dinky/scheduler/utils/ReadFileUtil.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.dinky.scheduler.utils; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.StrUtil; - -public class ReadFileUtil { - - private static final Logger logger = LoggerFactory.getLogger(ReadFileUtil.class); - - public static String taskDefinition(Map maps) { - InputStream in = ReadFileUtil.class.getResourceAsStream("/json/taskDefinition.json"); - String readFile = readFile(in); - if (maps == null || maps.isEmpty()) { - return readFile; - } - return StrUtil.format(readFile, maps); - } - - public static String taskRelation(Map maps) { - InputStream in = ReadFileUtil.class.getResourceAsStream("/json/taskRelation.json"); - String readFile = readFile(in); - if (maps == null || maps.isEmpty()) { - return readFile; - } - return StrUtil.format(readFile, maps); - } - - public static String createTaskDefinition(Map maps) { - InputStream in = ReadFileUtil.class.getResourceAsStream("/json/createTaskDefinition.json"); - String readFile = readFile(in); - if (maps == null || maps.isEmpty()) { - return readFile; - } - return StrUtil.format(readFile, maps); - } - - /** 读取文件 */ - public static String readFile(InputStream inputStream) { - try { - BufferedReader reader = IoUtil.getUtf8Reader(inputStream); - int ch; - StringBuilder sb = new StringBuilder(); - while ((ch = reader.read()) != -1) { - sb.append((char) ch); - } - IoUtil.close(reader); - return sb.toString(); - } catch (IOException e) { - logger.error(e.getMessage(), e); - return null; - } - } -} diff --git a/dinky-web/src/locales/en-US/pages.ts b/dinky-web/src/locales/en-US/pages.ts index bf1bde07ac..aec840dcb6 100644 --- a/dinky-web/src/locales/en-US/pages.ts +++ b/dinky-web/src/locales/en-US/pages.ts @@ -109,6 +109,8 @@ export default { 'datastudio.header.pushdolphin.timeoutFlagTip': 'Please select a timeout warning', 'datastudio.header.pushdolphin.flag': 'Run flag', 'datastudio.header.pushdolphin.flagTip': 'Please select the run flag', + 'datastudio.header.pushdolphin.isCache': 'Cache run', + 'datastudio.header.pushdolphin.isCacheTip': 'Please select cache run', 'datastudio.header.pushdolphin.timeoutNotifyStrategy': 'Timeout notification strategy', 'datastudio.header.pushdolphin.timeoutNotifyStrategyTip': 'Please select a timeout notification strategy', diff --git a/dinky-web/src/locales/zh-CN/pages.ts b/dinky-web/src/locales/zh-CN/pages.ts index 3c5111cf42..61fc1df775 100644 --- a/dinky-web/src/locales/zh-CN/pages.ts +++ b/dinky-web/src/locales/zh-CN/pages.ts @@ -102,6 +102,8 @@ export default { 'datastudio.header.pushdolphin.timeoutFlagTip': '请选择超时警告', 'datastudio.header.pushdolphin.flag': '运行标志', 'datastudio.header.pushdolphin.flagTip': '请选择运行标志', + 'datastudio.header.pushdolphin.isCache': '缓存执行', + 'datastudio.header.pushdolphin.isCacheTip': '请选择是否缓存执行', 'datastudio.header.pushdolphin.timeoutNotifyStrategy': '超时通知策略', 'datastudio.header.pushdolphin.timeoutNotifyStrategyTip': '请选择超时通知策略', 'datastudio.header.pushdolphin.timeout': '超时时间(分钟)', diff --git a/dinky-web/src/pages/DataStudio/HeaderContainer/PushDolphin/function.tsx b/dinky-web/src/pages/DataStudio/HeaderContainer/PushDolphin/function.tsx index 8c40293e92..91b3b4c215 100644 --- a/dinky-web/src/pages/DataStudio/HeaderContainer/PushDolphin/function.tsx +++ b/dinky-web/src/pages/DataStudio/HeaderContainer/PushDolphin/function.tsx @@ -30,6 +30,7 @@ export const transformPushDolphinParams = ( description: dolphinTaskDefinition.description, timeoutFlag: dolphinTaskDefinition.timeoutFlag === 'OPEN', flag: dolphinTaskDefinition.flag === 'YES', + isCache: dolphinTaskDefinition.isCache === 'YES', upstreamCodes: dolphinTaskDefinition.upstreamTaskMap ? Object.keys(dolphinTaskDefinition.upstreamTaskMap) : [], @@ -46,6 +47,7 @@ export const transformPushDolphinParams = ( description: pushDolphinParams.description, timeoutFlag: pushDolphinParams.timeoutFlag ? 'OPEN' : 'CLOSE', flag: pushDolphinParams.flag ? 'YES' : 'NO', + isCache: pushDolphinParams.isCache ? 'YES' : 'NO', timeoutNotifyStrategy: (pushDolphinParams.timeoutNotifyStrategy as string[]).join('') }; return falseTransformValue; diff --git a/dinky-web/src/pages/DataStudio/HeaderContainer/PushDolphin/index.tsx b/dinky-web/src/pages/DataStudio/HeaderContainer/PushDolphin/index.tsx index 5d99bb7de7..6819b6e5d4 100644 --- a/dinky-web/src/pages/DataStudio/HeaderContainer/PushDolphin/index.tsx +++ b/dinky-web/src/pages/DataStudio/HeaderContainer/PushDolphin/index.tsx @@ -239,6 +239,13 @@ export const PushDolphin: React.FC = (props) => { {...SWITCH_OPTIONS()} name={'flag'} /> + + {/*如果是失败告警,则需要设置告警策略*/} {formValues.timeoutFlag && ( diff --git a/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx b/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx index 64e7f4b4ee..74fa242f24 100644 --- a/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx +++ b/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx @@ -55,7 +55,6 @@ import { API_CONSTANTS } from '@/services/endpoints'; import { Jobs } from '@/types/DevOps/data.d'; import { DolphinTaskDefinition, DolphinTaskMinInfo } from '@/types/Studio/data.d'; import { l } from '@/utils/intl'; -import { SuccessMessageAsync } from '@/utils/messages'; import { ApartmentOutlined, BugOutlined, @@ -190,8 +189,6 @@ const HeaderContainer = (props: connect) => { const handlerDebug = async () => { if (!currentData) return; - const saved = currentData.step == JOB_LIFE_CYCLE.PUBLISH ? true : await handleSave(); - if (!saved) return; // @ts-ignore const editor = currentTab.monacoInstance.editor .getEditors() @@ -217,7 +214,6 @@ const HeaderContainer = (props: connect) => { jobState: res.data.status, runningLog: res.msg }); - await SuccessMessageAsync(l('pages.datastudio.editor.debug.success')); currentData.status = JOB_STATUS.RUNNING; // Common sql task is synchronized, so it needs to automatically update the status to finished. if (isSql(currentData.dialect)) { @@ -251,7 +247,6 @@ const HeaderContainer = (props: connect) => { jobState: res.data.status, runningLog: res.msg }); - await SuccessMessageAsync(l('pages.datastudio.editor.exec.success')); currentData.status = JOB_STATUS.RUNNING; // Common sql task is synchronized, so it needs to automatically update the status to finished. if (isSql(currentData.dialect)) { diff --git a/dinky-web/src/types/Studio/data.d.ts b/dinky-web/src/types/Studio/data.d.ts index 20d5cbb1db..e4a43e2321 100644 --- a/dinky-web/src/types/Studio/data.d.ts +++ b/dinky-web/src/types/Studio/data.d.ts @@ -267,6 +267,7 @@ export interface DolphinTaskDefinition { taskParamList: TaskParamProperty[]; taskParamMap: Map; flag: string; // 0 no 1 yes + isCache: string; // 0 no 1 yes taskPriority: string; // 0 highest 1 high 2 medium 3 low 4 lowest userName: string; projectName: string; @@ -303,6 +304,7 @@ export interface PushDolphinParams { timeout: number; timeoutFlag: boolean | string; flag: boolean | string; + isCache: boolean | string; timeoutNotifyStrategy: string[] | string; description: string; } diff --git a/dinky-web/src/types/Studio/init.d.ts b/dinky-web/src/types/Studio/init.d.ts index 21ac446411..1fa0d0165f 100644 --- a/dinky-web/src/types/Studio/init.d.ts +++ b/dinky-web/src/types/Studio/init.d.ts @@ -48,6 +48,7 @@ export const InitPushDolphinParams: PushDolphinParams = { timeout: 30, timeoutFlag: false, flag: false, + isCache: false, timeoutNotifyStrategy: ['WARN'], description: '' };