From 7df22bd52147f8bec8e3b8fe82e4192d6bd0ed09 Mon Sep 17 00:00:00 2001 From: Shiwen Cheng Date: Mon, 22 Mar 2021 15:06:57 +0800 Subject: [PATCH] [1.3.6-prepare][Feature-5087][SqlTask] Add a switch to send mail and print head logs in SqlTask #5088 (#5104) * [1.3.6-prepare][Improvement][UI] Rename from-mirror to form-mirror and from-model to form-model * [1.3.6-prepare][Feature-5087][SqlTask] Add a switch to send mail and print head logs in SqlTask #5088 --- .../alert/plugin/EmailAlertPlugin.java | 15 ++-- .../alert/utils/Constants.java | 2 - .../alert/utils/MailUtils.java | 39 +++++----- .../alert/plugin/EmailAlertPluginTest.java | 15 ++-- .../dolphinscheduler/common/Constants.java | 5 ++ .../common/task/sql/SqlParameters.java | 32 +++++++++ .../common/task/SqlParametersTest.java | 65 +++++++++++++++++ .../server/worker/task/sql/SqlTask.java | 72 ++++++++++++------- .../js/conf/home/pages/dag/_source/dag.scss | 2 +- .../dag/_source/formModel/formModel.scss | 2 +- .../pages/dag/_source/formModel/formModel.vue | 2 +- .../formModel/tasks/_source/scriptBox.vue | 4 +- .../dag/_source/formModel/tasks/datax.vue | 4 +- .../dag/_source/formModel/tasks/python.vue | 2 +- .../dag/_source/formModel/tasks/shell.vue | 2 +- .../pages/dag/_source/formModel/tasks/sql.vue | 55 ++++++++++---- .../dag/_source/formModel/tasks/sqoop.vue | 4 +- .../definition/pages/list/_source/email.vue | 2 +- .../definition/pages/list/_source/timing.vue | 4 +- dolphinscheduler-ui/src/js/conf/login/App.vue | 4 +- .../components/conditions/conditions.vue | 2 +- .../components/crontab/source/_times/day.vue | 2 +- .../components/crontab/source/_times/hour.vue | 2 +- .../crontab/source/_times/minute.vue | 2 +- .../crontab/source/_times/month.vue | 2 +- .../crontab/source/_times/second.vue | 2 +- .../components/crontab/source/_times/year.vue | 2 +- .../components/crontab/source/index.scss | 2 +- .../src/js/module/i18n/locale/en_US.js | 4 ++ .../src/js/module/i18n/locale/zh_CN.js | 4 ++ .../src/sass/common/index.scss | 2 +- .../src/sass/conf/login/index.scss | 2 +- pom.xml | 1 + 33 files changed, 265 insertions(+), 96 deletions(-) create mode 100644 dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/task/SqlParametersTest.java diff --git a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/plugin/EmailAlertPlugin.java b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/plugin/EmailAlertPlugin.java index 27fb301dcf..50ab137f94 100644 --- a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/plugin/EmailAlertPlugin.java +++ b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/plugin/EmailAlertPlugin.java @@ -26,11 +26,16 @@ import org.apache.dolphinscheduler.plugin.api.AlertPlugin; import org.apache.dolphinscheduler.plugin.model.AlertData; import org.apache.dolphinscheduler.plugin.model.AlertInfo; import org.apache.dolphinscheduler.plugin.model.PluginName; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.*; - /** * EmailAlertPlugin * @@ -104,12 +109,8 @@ public class EmailAlertPlugin implements AlertPlugin { return retMaps; } - boolean enabled = Boolean.parseBoolean(String.valueOf(retMaps.get(Constants.MAIL_ENABLED))); boolean status = Boolean.parseBoolean(String.valueOf(retMaps.get(Constants.STATUS))); - if (!enabled) { - logger.warn("mail wasn't sent since the mail config isn't set"); - retMaps.put(Constants.MESSAGE, "mail wasn't sent since the mail config isn't set"); - } else if (status) { + if (status) { logger.info("alert send success"); retMaps.put(Constants.MESSAGE, "email send success."); if (EnterpriseWeChatUtils.isEnable()) { diff --git a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/Constants.java b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/Constants.java index 2fc4749a55..966a760274 100644 --- a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/Constants.java +++ b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/Constants.java @@ -39,8 +39,6 @@ public class Constants { public static final String MESSAGE = "message"; - public static final String MAIL_ENABLED = "mail.enabled"; - public static final String MAIL_PROTOCOL = "mail.protocol"; public static final String MAIL_SERVER_HOST = "mail.server.host"; diff --git a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/MailUtils.java b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/MailUtils.java index 98f7b75769..9698eeabcb 100644 --- a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/MailUtils.java +++ b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/MailUtils.java @@ -19,18 +19,34 @@ package org.apache.dolphinscheduler.alert.utils; import org.apache.dolphinscheduler.alert.template.AlertTemplate; import org.apache.dolphinscheduler.alert.template.AlertTemplateFactory; import org.apache.dolphinscheduler.common.enums.ShowType; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; import org.apache.dolphinscheduler.common.utils.CollectionUtils; import org.apache.dolphinscheduler.common.utils.StringUtils; + +import org.apache.commons.mail.EmailException; +import org.apache.commons.mail.HtmlEmail; + +import java.io.File; +import java.io.IOException; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import javax.mail.Authenticator; +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.PasswordAuthentication; +import javax.mail.Session; +import javax.mail.Transport; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; +import javax.mail.internet.MimeUtility; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.mail.*; -import javax.mail.internet.*; -import java.io.*; -import java.util.*; - /** * mail utils @@ -85,15 +101,6 @@ public class MailUtils { */ public static Map sendMails(Collection receivers, Collection receiversCc, String title, String content, String showType) { Map retMap = new HashMap<>(); - - // if mail is default config, no need to process - if (StringUtils.isEmpty(MAIL_SERVER_HOST) || "xxx.xxx.com".equals(MAIL_SERVER_HOST)) { - retMap.put(Constants.MAIL_ENABLED, false); - retMap.put(Constants.STATUS, true); - return retMap; - } - - retMap.put(Constants.MAIL_ENABLED, true); retMap.put(Constants.STATUS, false); // if there is no receivers && no receiversCc, no need to process diff --git a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/plugin/EmailAlertPluginTest.java b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/plugin/EmailAlertPluginTest.java index 93ffe9ad55..4ec6a4cc50 100644 --- a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/plugin/EmailAlertPluginTest.java +++ b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/plugin/EmailAlertPluginTest.java @@ -16,22 +16,24 @@ */ package org.apache.dolphinscheduler.alert.plugin; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + import org.apache.dolphinscheduler.alert.utils.Constants; import org.apache.dolphinscheduler.common.enums.ShowType; import org.apache.dolphinscheduler.plugin.api.AlertPlugin; import org.apache.dolphinscheduler.plugin.model.AlertData; import org.apache.dolphinscheduler.plugin.model.AlertInfo; import org.apache.dolphinscheduler.plugin.model.PluginName; -import org.junit.Before; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; import java.util.Map; -import static org.junit.Assert.*; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class EmailAlertPluginTest { @@ -75,7 +77,6 @@ public class EmailAlertPluginTest { List list = new ArrayList(){{ add("xx@xx.com"); }}; alertInfo.addProp("receivers", list); Map ret = plugin.process(alertInfo); - assertFalse(Boolean.parseBoolean(String.valueOf(ret.get(Constants.MAIL_ENABLED)))); - assertTrue(Boolean.parseBoolean(String.valueOf(ret.get(Constants.STATUS)))); + assertFalse(Boolean.parseBoolean(String.valueOf(ret.get(Constants.STATUS)))); } } \ No newline at end of file diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java index aa01edd36d..163af3c95a 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java @@ -325,6 +325,11 @@ public final class Constants { */ public static final Pattern REGEX_MAIL_NAME = Pattern.compile("^([a-z0-9A-Z]+[_|\\-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"); + /** + * default display rows + */ + public static final int DEFAULT_DISPLAY_ROWS = 10; + /** * read permission */ diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/sql/SqlParameters.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/sql/SqlParameters.java index 4604234e8f..37f46f94a4 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/sql/SqlParameters.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/sql/SqlParameters.java @@ -49,10 +49,21 @@ public class SqlParameters extends AbstractParameters { */ private int sqlType; + /** + * send email + */ + private Boolean sendEmail; + + /** + * display rows + */ + private int displayRows; + /** * udf list */ private String udfs; + /** * show type * 0 TABLE @@ -61,14 +72,17 @@ public class SqlParameters extends AbstractParameters { * 3 TABLE+attachment */ private String showType; + /** * SQL connection parameters */ private String connParams; + /** * Pre Statements */ private List preStatements; + /** * Post Statements */ @@ -129,6 +143,22 @@ public class SqlParameters extends AbstractParameters { this.sqlType = sqlType; } + public Boolean getSendEmail() { + return sendEmail; + } + + public void setSendEmail(Boolean sendEmail) { + this.sendEmail = sendEmail; + } + + public int getDisplayRows() { + return displayRows; + } + + public void setDisplayRows(int displayRows) { + this.displayRows = displayRows; + } + public String getShowType() { return showType; } @@ -201,6 +231,8 @@ public class SqlParameters extends AbstractParameters { ", datasource=" + datasource + ", sql='" + sql + '\'' + ", sqlType=" + sqlType + + ", sendEmail=" + sendEmail + + ", displayRows=" + displayRows + ", udfs='" + udfs + '\'' + ", showType='" + showType + '\'' + ", connParams='" + connParams + '\'' + diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/task/SqlParametersTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/task/SqlParametersTest.java new file mode 100644 index 0000000000..3c1612c9b3 --- /dev/null +++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/task/SqlParametersTest.java @@ -0,0 +1,65 @@ +/* + * 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.apache.dolphinscheduler.common.task; + +import org.apache.dolphinscheduler.common.task.sql.SqlParameters; +import org.apache.dolphinscheduler.common.utils.CollectionUtils; + +import org.junit.Assert; +import org.junit.Test; + +public class SqlParametersTest { + + private final String type = "MYSQL"; + private final String sql = "select * from t_ds_user"; + private final String udfs = "test-udfs-1.0.0-SNAPSHOT.jar"; + private final int datasource = 1; + private final int sqlType = 0; + private final Boolean sendEmail = true; + private final int displayRows = 10; + private final String showType = "TABLE"; + private final String title = "sql test"; + + @Test + public void testSqlParameters() { + SqlParameters sqlParameters = new SqlParameters(); + Assert.assertTrue(CollectionUtils.isEmpty(sqlParameters.getResourceFilesList())); + + sqlParameters.setType(type); + sqlParameters.setSql(sql); + sqlParameters.setUdfs(udfs); + sqlParameters.setDatasource(datasource); + sqlParameters.setSqlType(sqlType); + sqlParameters.setSendEmail(sendEmail); + sqlParameters.setDisplayRows(displayRows); + sqlParameters.setShowType(showType); + sqlParameters.setTitle(title); + + Assert.assertEquals(type, sqlParameters.getType()); + Assert.assertEquals(sql, sqlParameters.getSql()); + Assert.assertEquals(udfs, sqlParameters.getUdfs()); + Assert.assertEquals(datasource, sqlParameters.getDatasource()); + Assert.assertEquals(sqlType, sqlParameters.getSqlType()); + Assert.assertEquals(sendEmail, sqlParameters.getSendEmail()); + Assert.assertEquals(displayRows, sqlParameters.getDisplayRows()); + Assert.assertEquals(showType, sqlParameters.getShowType()); + Assert.assertEquals(title, sqlParameters.getTitle()); + + Assert.assertTrue(sqlParameters.checkParameters()); + } +} diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sql/SqlTask.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sql/SqlTask.java index 687d049375..fa2940ab4c 100644 --- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sql/SqlTask.java +++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sql/SqlTask.java @@ -16,12 +16,17 @@ */ package org.apache.dolphinscheduler.server.worker.task.sql; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import org.apache.commons.lang.StringUtils; +import static org.apache.dolphinscheduler.common.Constants.COMMA; +import static org.apache.dolphinscheduler.common.Constants.HIVE_CONF; +import static org.apache.dolphinscheduler.common.Constants.PASSWORD; +import static org.apache.dolphinscheduler.common.Constants.SEMICOLON; +import static org.apache.dolphinscheduler.common.Constants.STATUS; +import static org.apache.dolphinscheduler.common.Constants.USER; +import static org.apache.dolphinscheduler.common.enums.DbType.HIVE; + import org.apache.dolphinscheduler.alert.utils.MailUtils; import org.apache.dolphinscheduler.common.Constants; -import org.apache.dolphinscheduler.common.enums.*; +import org.apache.dolphinscheduler.common.enums.CommandType; import org.apache.dolphinscheduler.common.enums.DbType; import org.apache.dolphinscheduler.common.enums.ShowType; import org.apache.dolphinscheduler.common.enums.TaskTimeoutStrategy; @@ -30,7 +35,11 @@ import org.apache.dolphinscheduler.common.task.AbstractParameters; import org.apache.dolphinscheduler.common.task.sql.SqlBinds; import org.apache.dolphinscheduler.common.task.sql.SqlParameters; import org.apache.dolphinscheduler.common.task.sql.SqlType; -import org.apache.dolphinscheduler.common.utils.*; +import org.apache.dolphinscheduler.common.utils.CollectionUtils; +import org.apache.dolphinscheduler.common.utils.CommonUtils; +import org.apache.dolphinscheduler.common.utils.EnumUtils; +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.common.utils.ParameterUtils; import org.apache.dolphinscheduler.dao.AlertDao; import org.apache.dolphinscheduler.dao.datasource.BaseDataSource; import org.apache.dolphinscheduler.dao.datasource.DataSourceFactory; @@ -41,17 +50,30 @@ import org.apache.dolphinscheduler.server.utils.ParamUtils; import org.apache.dolphinscheduler.server.utils.UDFUtils; import org.apache.dolphinscheduler.server.worker.task.AbstractTask; import org.apache.dolphinscheduler.service.bean.SpringApplicationContext; -import org.slf4j.Logger; -import java.sql.*; -import java.util.*; +import org.apache.commons.lang.StringUtils; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; -import static org.apache.dolphinscheduler.alert.utils.Constants.MAIL_ENABLED; -import static org.apache.dolphinscheduler.common.Constants.*; -import static org.apache.dolphinscheduler.common.enums.DbType.HIVE; +import org.slf4j.Logger; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; /** * sql task */ @@ -142,7 +164,7 @@ public class SqlTask extends AbstractTask { } catch (Exception e) { setExitStatusCode(Constants.EXIT_CODE_FAILURE); - logger.error("sql task error", e); + logger.error("sql task error: {}", e.toString()); throw e; } } @@ -208,7 +230,7 @@ public class SqlTask extends AbstractTask { public void executeFuncAndSql(SqlBinds mainSqlBinds, List preStatementsBinds, List postStatementsBinds, - List createFuncs){ + List createFuncs) throws Exception { Connection connection = null; PreparedStatement stmt = null; ResultSet resultSet = null; @@ -240,8 +262,8 @@ public class SqlTask extends AbstractTask { postSql(connection,postStatementsBinds); } catch (Exception e) { - logger.error("execute sql error",e); - throw new RuntimeException("execute sql error"); + logger.error("execute sql error: {}", e.getMessage()); + throw e; } finally { close(resultSet,stmt,connection); } @@ -269,15 +291,20 @@ public class SqlTask extends AbstractTask { rowCount++; } String result = JSONUtils.toJsonString(resultJSONArray); - logger.debug("execute sql : {}", result); + logger.debug("execute sql result : {}", result); + + int displayRows = sqlParameters.getDisplayRows() > 0 ? sqlParameters.getDisplayRows() : Constants.DEFAULT_DISPLAY_ROWS; + displayRows = Math.min(displayRows, resultJSONArray.size()); + logger.info("display sql result {} rows as follows:", displayRows); + for (int i = 0; i < displayRows; i++) { + String row = JSONUtils.toJsonString(resultJSONArray.get(i)); + logger.info("row {} : {}", i + 1, row); + } - try { + if (sqlParameters.getSendEmail() == null || sqlParameters.getSendEmail()) { sendAttachment(StringUtils.isNotEmpty(sqlParameters.getTitle()) ? sqlParameters.getTitle() : taskExecutionContext.getTaskName() + " query result sets", JSONUtils.toJsonString(resultJSONArray)); - } catch (Exception e) { - logger.warn("sql task sendAttachment error! msg : {} ", e.getMessage()); } - } /** @@ -457,10 +484,7 @@ public class SqlTask extends AbstractTask { if(EnumUtils.isValidEnum(ShowType.class,showTypeName)){ Map mailResult = MailUtils.sendMails(receiversList, receiversCcList, title, content, ShowType.valueOf(showTypeName).getDescp()); - if(!(boolean) mailResult.get(MAIL_ENABLED)){ - logger.info("mail info : {} {}", title, content); - logger.warn("mail wasn't sent since the mail config isn't set"); - }else if(!(boolean) mailResult.get(STATUS)){ + if(!(boolean) mailResult.get(STATUS)){ throw new RuntimeException("send mail failed!"); } }else{ diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.scss b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.scss index 18925d1d6b..5cbc7d817b 100755 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.scss +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.scss @@ -543,7 +543,7 @@ svg path:hover { } } -.from-mirror { +.form-mirror { width: 100%; position: relative; z-index: 0; diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.scss b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.scss index 9d9667f723..f3b3e0e9dd 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.scss +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.scss @@ -76,7 +76,7 @@ padding-bottom: 60px; } } -.from-model { +.form-model { padding-top: 26px; >div { clear: both; diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue index 69d5e5f71a..24a910a751 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue @@ -28,7 +28,7 @@
-
+
{{$t('Node name')}}
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/scriptBox.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/scriptBox.vue index 91e1cb7e08..1c1640843c 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/scriptBox.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/scriptBox.vue @@ -18,7 +18,7 @@
-
+
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/shell.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/shell.vue index 0c07a9afc1..cc64385ee3 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/shell.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/shell.vue @@ -19,7 +19,7 @@
{{$t('Script')}}