";
public static final String TD = "";
diff --git a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/EnterpriseWeChatUtils.java b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/EnterpriseWeChatUtils.java
index 15e7e18855..a4c3720581 100644
--- a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/EnterpriseWeChatUtils.java
+++ b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/EnterpriseWeChatUtils.java
@@ -17,11 +17,11 @@
package org.apache.dolphinscheduler.alert.utils;
import org.apache.dolphinscheduler.common.enums.ShowType;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.Alert;
import com.alibaba.fastjson.JSON;
import com.google.common.reflect.TypeToken;
-import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
diff --git a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/FuncUtils.java b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/FuncUtils.java
index 186a983e05..dd6ca4b8a6 100644
--- a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/FuncUtils.java
+++ b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/FuncUtils.java
@@ -16,7 +16,7 @@
*/
package org.apache.dolphinscheduler.alert.utils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
public class FuncUtils {
diff --git a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/JSONUtils.java b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/JSONUtils.java
index a88574f0e7..1cd9f490b2 100644
--- a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/JSONUtils.java
+++ b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/JSONUtils.java
@@ -18,7 +18,7 @@ package org.apache.dolphinscheduler.alert.utils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 d6edde240b..8bc8c35171 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
@@ -16,16 +16,13 @@
*/
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 freemarker.cache.StringTemplateLoader;
-import freemarker.template.Configuration;
-import freemarker.template.Template;
-import freemarker.template.TemplateException;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;
@@ -35,7 +32,6 @@ import javax.mail.internet.*;
import java.io.*;
import java.util.*;
-import static org.apache.dolphinscheduler.alert.utils.PropertyUtils.getInt;
/**
@@ -69,25 +65,7 @@ public class MailUtils {
public static final String sslTrust = PropertyUtils.getString(Constants.MAIL_SMTP_SSL_TRUST);
- private static Template MAIL_TEMPLATE;
-
- static {
- Configuration cfg = new Configuration(Configuration.VERSION_2_3_21);
- cfg.setDefaultEncoding(Constants.UTF_8);
- StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
- cfg.setTemplateLoader(stringTemplateLoader);
- InputStreamReader isr = null;
- try {
- isr = new InputStreamReader(new FileInputStream(ResourceUtils.getFile(Constants.CLASSPATH_MAIL_TEMPLATES_ALERT_MAIL_TEMPLATE_FTL)),
- Constants.UTF_8);
-
- MAIL_TEMPLATE = new Template("alert_mail_template", isr, cfg);
- } catch (Exception e) {
- MAIL_TEMPLATE = null;
- } finally {
- IOUtils.closeQuietly(isr);
- }
- }
+ public static final AlertTemplate alertTemplate = AlertTemplateFactory.getMessageTemplate();
/**
@@ -174,46 +152,7 @@ public class MailUtils {
* @return the html table form
*/
private static String htmlTable(String content, boolean showAll){
- if (StringUtils.isNotEmpty(content)){
- List mapItemsList = JSONUtils.toList(content, LinkedHashMap.class);
-
- if(!showAll && mapItemsList.size() > Constants.NUMBER_1000){
- mapItemsList = mapItemsList.subList(0,Constants.NUMBER_1000);
- }
-
- StringBuilder contents = new StringBuilder(200);
-
- boolean flag = true;
-
- String title = "";
- for (LinkedHashMap mapItems : mapItemsList){
-
- Set> entries = mapItems.entrySet();
-
- Iterator> iterator = entries.iterator();
-
- StringBuilder t = new StringBuilder(Constants.TR);
- StringBuilder cs = new StringBuilder(Constants.TR);
- while (iterator.hasNext()){
-
- Map.Entry entry = iterator.next();
- t.append(Constants.TH).append(entry.getKey()).append(Constants.TH_END);
- cs.append(Constants.TD).append(String.valueOf(entry.getValue())).append(Constants.TD_END);
-
- }
- t.append(Constants.TR_END);
- cs.append(Constants.TR_END);
- if (flag){
- title = t.toString();
- }
- flag = false;
- contents.append(cs);
- }
-
- return getTemplateContent(title,contents.toString());
- }
-
- return null;
+ return alertTemplate.getMessageFromTemplate(content,ShowType.TABLE,showAll);
}
/**
@@ -231,33 +170,9 @@ public class MailUtils {
* @return text in html form
*/
private static String htmlText(String content){
-
- if (StringUtils.isNotEmpty(content)){
- List list;
- try {
- list = JSONUtils.toList(content,String.class);
- }catch (Exception e){
- logger.error("json format exception",e);
- return null;
- }
-
- StringBuilder contents = new StringBuilder(100);
- for (String str : list){
- contents.append(Constants.TR);
- contents.append(Constants.TD).append(str).append(Constants.TD_END);
- contents.append(Constants.TR_END);
- }
-
- return getTemplateContent(null,contents.toString());
-
- }
-
- return null;
+ return alertTemplate.getMessageFromTemplate(content,ShowType.TEXT);
}
-
-
-
/**
* send mail as Excel attachment
* @param receivers the receiver list
@@ -422,32 +337,8 @@ public class MailUtils {
* @param e the exception
*/
private static void handleException(Collection receivers, Map retMap, Exception e) {
- logger.error("Send email to {} failed", StringUtils.join(",", receivers), e);
- retMap.put(Constants.MESSAGE, "Send email to {" + StringUtils.join(",", receivers) + "} failed," + e.toString());
+ logger.error("Send email to {} failed {}", receivers, e);
+ retMap.put(Constants.MESSAGE, "Send email to {" + StringUtils.join(receivers, ",") + "} failed," + e.toString());
}
- /**
- * get the content of the template
- * @param title the title
- * @param content the content to retrieve
- * @return the content in the template or null if exception occurs
- */
- private static String getTemplateContent(String title,String content){
- StringWriter out = new StringWriter();
- Map map = new HashMap<>();
- if(null != title){
- map.put(Constants.TITLE,title);
- }
- map.put(Constants.CONTENT,content);
- try {
- MAIL_TEMPLATE.process(map, out);
- return out.toString();
- } catch (TemplateException e) {
- logger.error(e.getMessage(),e);
- } catch (IOException e) {
- logger.error(e.getMessage(),e);
- }
-
- return null;
- }
-}
+}
\ No newline at end of file
diff --git a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/PropertyUtils.java b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/PropertyUtils.java
index 14ec4149eb..4367fbb4a8 100644
--- a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/PropertyUtils.java
+++ b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/PropertyUtils.java
@@ -16,8 +16,8 @@
*/
package org.apache.dolphinscheduler.alert.utils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.dolphinscheduler.common.utils.IOUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/dolphinscheduler-alert/src/main/resources/alert.properties b/dolphinscheduler-alert/src/main/resources/alert.properties
index 127ab5a91b..000d0653b7 100644
--- a/dolphinscheduler-alert/src/main/resources/alert.properties
+++ b/dolphinscheduler-alert/src/main/resources/alert.properties
@@ -18,6 +18,9 @@
#alert type is EMAIL/SMS
alert.type=EMAIL
+# alter msg template, default is html template
+#alert.template=html
+
# mail server configuration
mail.protocol=SMTP
mail.server.host=xxx.xxx.com
diff --git a/dolphinscheduler-alert/src/main/resources/mail_templates/alert_mail_template.ftl b/dolphinscheduler-alert/src/main/resources/mail_templates/alert_mail_template.ftl
deleted file mode 100644
index 1ca9cab17e..0000000000
--- a/dolphinscheduler-alert/src/main/resources/mail_templates/alert_mail_template.ftl
+++ /dev/null
@@ -1,17 +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.
--->
- dolphinscheduler <#if title??> ${title}#if> <#if content??> ${content}#if>
\ No newline at end of file
diff --git a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/template/AlertTemplateFactoryTest.java b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/template/AlertTemplateFactoryTest.java
new file mode 100644
index 0000000000..6865b895e2
--- /dev/null
+++ b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/template/AlertTemplateFactoryTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.alert.template;
+
+import org.apache.dolphinscheduler.alert.template.impl.DefaultHTMLTemplate;
+import org.apache.dolphinscheduler.alert.utils.Constants;
+import org.apache.dolphinscheduler.alert.utils.PropertyUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.mockito.Mockito.*;
+import static org.junit.Assert.*;
+
+/**
+ * test class for AlertTemplateFactory
+ */
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(PropertyUtils.class)
+public class AlertTemplateFactoryTest {
+
+ private static final Logger logger = LoggerFactory.getLogger(AlertTemplateFactoryTest.class);
+
+ /**
+ * GetMessageTemplate method test
+ */
+ @Test
+ public void testGetMessageTemplate(){
+
+ PowerMockito.mockStatic(PropertyUtils.class);
+ when(PropertyUtils.getString(Constants.ALERT_TEMPLATE)).thenReturn("html");
+
+ AlertTemplate defaultTemplate = AlertTemplateFactory.getMessageTemplate();
+
+ assertTrue(defaultTemplate instanceof DefaultHTMLTemplate);
+ }
+
+ /**
+ * GetMessageTemplate method throw Exception test
+ */
+ @Test
+ public void testGetMessageTemplateException(){
+
+ AlertTemplate defaultTemplate = AlertTemplateFactory.getMessageTemplate();
+ assertTrue(defaultTemplate instanceof DefaultHTMLTemplate);
+ }
+}
diff --git a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplateTest.java b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplateTest.java
new file mode 100644
index 0000000000..58609c07cb
--- /dev/null
+++ b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplateTest.java
@@ -0,0 +1,123 @@
+/*
+ * 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.alert.template.impl;
+
+import org.apache.dolphinscheduler.alert.utils.JSONUtils;
+import org.apache.dolphinscheduler.common.enums.ShowType;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import static org.junit.Assert.*;
+
+/**
+ * test class for DefaultHTMLTemplate
+ */
+public class DefaultHTMLTemplateTest{
+
+ private static final Logger logger = LoggerFactory.getLogger(DefaultHTMLTemplateTest.class);
+
+ /**
+ * only need test method GetMessageFromTemplate
+ */
+ @Test
+ public void testGetMessageFromTemplate(){
+
+ DefaultHTMLTemplate template = new DefaultHTMLTemplate();
+
+ String tableTypeMessage = template.getMessageFromTemplate(list2String(), ShowType.TABLE,true);
+
+ assertEquals(tableTypeMessage,generateMockTableTypeResultByHand());
+
+ String textTypeMessage = template.getMessageFromTemplate(list2String(), ShowType.TEXT,true);
+
+ assertEquals(textTypeMessage,generateMockTextTypeResultByHand());
+ }
+
+ /**
+ * generate some simulation data
+ */
+ private String list2String(){
+
+ LinkedHashMap map1 = new LinkedHashMap<>();
+ map1.put("mysql service name","mysql200");
+ map1.put("mysql address","192.168.xx.xx");
+ map1.put("port","3306");
+ map1.put("no index of number","80");
+ map1.put("database client connections","190");
+
+ LinkedHashMap map2 = new LinkedHashMap<>();
+ map2.put("mysql service name","mysql210");
+ map2.put("mysql address","192.168.xx.xx");
+ map2.put("port","3306");
+ map2.put("no index of number","10");
+ map2.put("database client connections","90");
+
+ List> maps = new ArrayList<>();
+ maps.add(0,map1);
+ maps.add(1,map2);
+ String mapjson = JSONUtils.toJsonString(maps);
+ logger.info(mapjson);
+
+ return mapjson;
+ }
+
+ private String generateMockTableTypeResultByHand(){
+
+ return "\n" +
+ " \n" +
+ " dolphinscheduler \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ "mysql service name mysql address port no index of number database client connections \n" +
+ "mysql200 192.168.xx.xx 3306 80 190 mysql210 192.168.xx.xx 3306 10 90
\n" +
+ " \n" +
+ "";
+ }
+
+ private String generateMockTextTypeResultByHand(){
+
+ return "\n" +
+ " \n" +
+ " dolphinscheduler \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ "{\"mysql service name\":\"mysql200\",\"mysql address\":\"192.168.xx.xx\",\"database client connections\":\"190\",\"port\":\"3306\",\"no index of number\":\"80\"} {\"mysql service name\":\"mysql210\",\"mysql address\":\"192.168.xx.xx\",\"database client connections\":\"90\",\"port\":\"3306\",\"no index of number\":\"10\"}
\n" +
+ " \n" +
+ "";
+ }
+}
diff --git a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/MailUtilsTest.java b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/MailUtilsTest.java
index 96f1d9f21e..612de3e31d 100644
--- a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/MailUtilsTest.java
+++ b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/MailUtilsTest.java
@@ -23,21 +23,11 @@ import org.apache.dolphinscheduler.dao.AlertDao;
import org.apache.dolphinscheduler.dao.DaoFactory;
import org.apache.dolphinscheduler.dao.entity.Alert;
import org.apache.dolphinscheduler.dao.entity.User;
-import freemarker.cache.StringTemplateLoader;
-import freemarker.template.Configuration;
-import freemarker.template.Template;
-import freemarker.template.TemplateException;
-import org.apache.commons.io.IOUtils;
import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.util.ResourceUtils;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.StringWriter;
import java.util.*;
@@ -48,8 +38,8 @@ public class MailUtilsTest {
private static final Logger logger = LoggerFactory.getLogger(MailUtilsTest.class);
@Test
public void testSendMails() {
- String[] receivers = new String[]{"xxx@qq.com"};
- String[] receiversCc = new String[]{"xxx@qq.com"};
+ String[] receivers = new String[]{"347801120@qq.com"};
+ String[] receiversCc = new String[]{"347801120@qq.com"};
String content ="[\"id:69\"," +
"\"name:UserBehavior-0--1193959466\"," +
@@ -114,7 +104,7 @@ public class MailUtilsTest {
@Test
public void testSendTableMail(){
- String[] mails = new String[]{"825193156@qq.com"};
+ String[] mails = new String[]{"347801120@qq.com"};
Alert alert = new Alert();
alert.setTitle("Mysql Exception");
alert.setShowType(ShowType.TABLE);
@@ -194,39 +184,4 @@ public class MailUtilsTest {
MailUtils.sendMails(Arrays.asList(mails),"gaojing",alert.getContent(),ShowType.TABLEATTACHMENT);
}
- @Test
- public void template(){
- Template MAIL_TEMPLATE;
- Configuration cfg = new Configuration(Configuration.VERSION_2_3_21);
- cfg.setDefaultEncoding(Constants.UTF_8);
- StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
- cfg.setTemplateLoader(stringTemplateLoader);
- InputStreamReader isr = null;
- try {
- isr = new InputStreamReader(new FileInputStream(ResourceUtils.getFile(Constants.CLASSPATH_MAIL_TEMPLATES_ALERT_MAIL_TEMPLATE_FTL)),
- Constants.UTF_8);
-
- MAIL_TEMPLATE = new Template("alert_mail_template", isr, cfg);
- } catch (Exception e) {
- MAIL_TEMPLATE = null;
- } finally {
- IOUtils.closeQuietly(isr);
- }
-
-
- StringWriter out = new StringWriter();
- Map map = new HashMap<>();
- map.put(Constants.TITLE,"title_test");
- try {
- MAIL_TEMPLATE.process(map, out);
- logger.info(out.toString());
-
- } catch (TemplateException e) {
- logger.error(e.getMessage(),e);
- } catch (IOException e) {
- logger.error(e.getMessage(),e);
- }
-
- }
-
}
diff --git a/dolphinscheduler-api/pom.xml b/dolphinscheduler-api/pom.xml
index a1141b5726..ae28a48bb5 100644
--- a/dolphinscheduler-api/pom.xml
+++ b/dolphinscheduler-api/pom.xml
@@ -27,13 +27,6 @@
${project.artifactId}
jar
-
- 5.5.23
- 2.5
- 1.9.3
- 2.9.2
-
-
org.apache.dolphinscheduler
@@ -117,31 +110,6 @@
spring-context
-
- org.apache.httpcomponents
- httpcore
-
-
-
- org.apache.httpcomponents
- httpclient
-
-
-
- com.fasterxml.jackson.core
- jackson-annotations
-
-
-
- com.fasterxml.jackson.core
- jackson-databind
-
-
-
- com.fasterxml.jackson.core
- jackson-core
-
-
com.alibaba
fastjson
@@ -171,19 +139,16 @@
io.springfox
springfox-swagger2
- ${springfox.version}
io.springfox
springfox-swagger-ui
- ${springfox.version}
com.github.xiaoymin
swagger-bootstrap-ui
- ${swagger.version}
@@ -230,13 +195,11 @@
tomcat
jasper-runtime
- ${jasper-runtime.version}
javax.servlet
servlet-api
- ${servlet-api.version}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/configuration/ServiceModelToSwagger2MapperImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/configuration/ServiceModelToSwagger2MapperImpl.java
index 90d820910a..dac88925a2 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/configuration/ServiceModelToSwagger2MapperImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/configuration/ServiceModelToSwagger2MapperImpl.java
@@ -19,7 +19,7 @@ package org.apache.dolphinscheduler.api.configuration;
import com.google.common.collect.Multimap;
import io.swagger.models.*;
import io.swagger.models.parameters.Parameter;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.context.MessageSource;
@@ -159,7 +159,8 @@ public class ServiceModelToSwagger2MapperImpl extends ServiceModelToSwagger2Mapp
Iterator it = from.getTags().iterator();
while(it.hasNext()){
String tag = it.next();
- list.add(StringUtils.isNotBlank(tag) ? messageSource.getMessage(tag, null, tag, locale) : " ");
+ list.add(
+ StringUtils.isNotBlank(tag) ? messageSource.getMessage(tag, null, tag, locale) : " ");
}
operation.setTags(list);
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/BaseController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/BaseController.java
index ba062472b3..46432569e1 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/BaseController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/BaseController.java
@@ -20,8 +20,8 @@ import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.Resource;
-import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.text.MessageFormat;
@@ -67,7 +67,7 @@ public class BaseController {
public static String getClientIpAddress(HttpServletRequest request) {
String clientIp = request.getHeader(HTTP_X_FORWARDED_FOR);
- if (StringUtils.isNotEmpty(clientIp) && !StringUtils.equalsIgnoreCase(HTTP_HEADER_UNKNOWN, clientIp)) {
+ if (StringUtils.isNotEmpty(clientIp) && !clientIp.equalsIgnoreCase(HTTP_HEADER_UNKNOWN)) {
int index = clientIp.indexOf(COMMA);
if (index != -1) {
return clientIp.substring(0, index);
@@ -77,7 +77,7 @@ public class BaseController {
}
clientIp = request.getHeader(HTTP_X_REAL_IP);
- if (StringUtils.isNotEmpty(clientIp) && !StringUtils.equalsIgnoreCase(HTTP_HEADER_UNKNOWN, clientIp)) {
+ if (StringUtils.isNotEmpty(clientIp) && !clientIp.equalsIgnoreCase(HTTP_HEADER_UNKNOWN)) {
return clientIp;
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataAnalysisController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataAnalysisController.java
index 92897ac7ff..1b1dc65e01 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataAnalysisController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataAnalysisController.java
@@ -188,7 +188,7 @@ public class DataAnalysisController extends BaseController{
public Result countQueueState(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value="projectId", required=false, defaultValue = "0") int projectId){
try{
- logger.info("count command state, user:{}, start date: {}, end date:{}, project id {}",
+ logger.info("count command state, user:{}, project id {}",
loginUser.getUserName(), projectId);
Map result = dataAnalysisService.countQueueState(loginUser, projectId);
return returnDataList(result);
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
index d4844a693d..9c04bf7d5c 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
@@ -461,7 +461,7 @@ public class DataSourceController extends BaseController {
@GetMapping(value="/kerberos-startup-state")
@ResponseStatus(HttpStatus.OK)
public Result getKerberosStartupState(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser){
- logger.info("login user {},get kerberos startup state : {}", loginUser.getUserName());
+ logger.info("login user {}", loginUser.getUserName());
try{
// if upload resource is HDFS and kerberos startup is true , else false
return success(Status.SUCCESS.getMsg(), CommonUtils.getKerberosStartupState());
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/LoginController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/LoginController.java
index 63b2d8447d..0e6ef95f96 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/LoginController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/LoginController.java
@@ -22,10 +22,10 @@ import org.apache.dolphinscheduler.api.service.SessionService;
import org.apache.dolphinscheduler.api.service.UsersService;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.User;
import io.swagger.annotations.*;
import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
index 275dfdd3db..de9cc12a36 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
@@ -16,12 +16,12 @@
*/
package org.apache.dolphinscheduler.api.controller;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.service.ProcessDefinitionService;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.utils.ParameterUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.User;
import io.swagger.annotations.*;
import org.slf4j.Logger;
@@ -460,8 +460,8 @@ public class ProcessDefinitionController extends BaseController{
}
}
- if(deleteFailedIdList.size() > 0){
- putMsg(result, Status.BATCH_DELETE_PROCESS_DEFINE_BY_IDS_ERROR,StringUtils.join(deleteFailedIdList.toArray(),","));
+ if(!deleteFailedIdList.isEmpty()){
+ putMsg(result, Status.BATCH_DELETE_PROCESS_DEFINE_BY_IDS_ERROR,StringUtils.join(deleteFailedIdList,","));
}else{
putMsg(result, Status.SUCCESS);
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceController.java
index 743be7bd04..542aad5c33 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceController.java
@@ -16,7 +16,6 @@
*/
package org.apache.dolphinscheduler.api.controller;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.service.ProcessInstanceService;
import org.apache.dolphinscheduler.api.utils.Result;
@@ -26,6 +25,7 @@ import org.apache.dolphinscheduler.common.enums.Flag;
import org.apache.dolphinscheduler.common.queue.ITaskQueue;
import org.apache.dolphinscheduler.common.queue.TaskQueueFactory;
import org.apache.dolphinscheduler.common.utils.ParameterUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.User;
import io.swagger.annotations.*;
import org.slf4j.Logger;
@@ -390,7 +390,7 @@ public class ProcessInstanceController extends BaseController{
}
}
if(deleteFailedIdList.size() > 0){
- putMsg(result, Status.BATCH_DELETE_PROCESS_INSTANCE_BY_IDS_ERROR,StringUtils.join(deleteFailedIdList.toArray(),","));
+ putMsg(result, Status.BATCH_DELETE_PROCESS_INSTANCE_BY_IDS_ERROR,StringUtils.join(deleteFailedIdList,","));
}else{
putMsg(result, Status.SUCCESS);
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java
index 66e065ee48..bc015c28aa 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java
@@ -267,11 +267,12 @@ public class ProjectController extends BaseController {
})
@PostMapping(value="/import-definition")
public Result importProcessDefinition(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
- @RequestParam("file") MultipartFile file){
+ @RequestParam("file") MultipartFile file,
+ @RequestParam("projectName") String projectName){
try{
- logger.info("import process definition by id, login user:{}",
- loginUser.getUserName());
- Map result = processDefinitionService.importProcessDefinition(loginUser,file);
+ logger.info("import process definition by id, login user:{}, project: {}",
+ loginUser.getUserName(), projectName);
+ Map result = processDefinitionService.importProcessDefinition(loginUser, file, projectName);
return returnDataList(result);
}catch (Exception e){
logger.error(IMPORT_PROCESS_DEFINE_ERROR.getMsg(),e);
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TenantController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TenantController.java
index 6b0a4ec496..afdb80bd2c 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TenantController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TenantController.java
@@ -137,7 +137,7 @@ public class TenantController extends BaseController{
@GetMapping(value="/list")
@ResponseStatus(HttpStatus.OK)
public Result queryTenantlist(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser){
- logger.info("login user {}, query tenant list");
+ logger.info("login user {}, query tenant list", loginUser.getUserName());
try{
Map result = tenantService.queryTenantList(loginUser);
return returnDataList(result);
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java
index b89dd0fa2c..42f89237ab 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java
@@ -324,7 +324,7 @@ public class UsersController extends BaseController{
@GetMapping(value="/get-user-info")
@ResponseStatus(HttpStatus.OK)
public Result getUserInfo(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser){
- logger.info("login user {},get user info : {}", loginUser.getUserName());
+ logger.info("login user {},get user info", loginUser.getUserName());
try{
Map result = usersService.getUserInfo(loginUser);
return returnDataList(result);
@@ -344,7 +344,7 @@ public class UsersController extends BaseController{
@GetMapping(value="/list")
@ResponseStatus(HttpStatus.OK)
public Result listUser(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser){
- logger.info("login user {}, user list");
+ logger.info("login user {}, user list", loginUser.getUserName());
try{
Map result = usersService.queryAllGeneralUsers(loginUser);
return returnDataList(result);
@@ -364,7 +364,7 @@ public class UsersController extends BaseController{
@GetMapping(value="/list-all")
@ResponseStatus(HttpStatus.OK)
public Result listAll(@RequestAttribute(value = Constants.SESSION_USER) User loginUser){
- logger.info("login user {}, user list");
+ logger.info("login user {}, user list", loginUser.getUserName());
try{
Map result = usersService.queryUserList(loginUser);
return returnDataList(result);
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AlertGroupService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AlertGroupService.java
index 63f50f936f..70310b6331 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AlertGroupService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AlertGroupService.java
@@ -21,7 +21,7 @@ import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.AlertType;
-import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.AlertGroup;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.entity.UserAlertGroup;
@@ -29,7 +29,6 @@ import org.apache.dolphinscheduler.dao.mapper.AlertGroupMapper;
import org.apache.dolphinscheduler.dao.mapper.UserAlertGroupMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java
index 1956738f9f..646a67ab04 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java
@@ -21,8 +21,8 @@ import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.common.utils.HadoopUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.User;
-import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
@@ -104,7 +104,7 @@ public class BaseService {
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
- if (StringUtils.equalsIgnoreCase(name, cookie.getName())) {
+ if (StringUtils.isNotEmpty(name) && name.equalsIgnoreCase(cookie.getName())) {
return cookie;
}
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataAnalysisService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataAnalysisService.java
index 9a7591ffc1..f4becbe36d 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataAnalysisService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataAnalysisService.java
@@ -27,8 +27,8 @@ import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.common.queue.ITaskQueue;
import org.apache.dolphinscheduler.common.queue.TaskQueueFactory;
import org.apache.dolphinscheduler.common.utils.DateUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.ProcessDao;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.dao.entity.*;
import org.apache.dolphinscheduler.dao.mapper.*;
import org.slf4j.Logger;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
index a8a392126a..576f0c3eba 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
@@ -23,12 +23,12 @@ import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.*;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.ProcessDao;
import org.apache.dolphinscheduler.dao.entity.*;
import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
import org.apache.dolphinscheduler.dao.mapper.ProcessInstanceMapper;
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/LoggerService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/LoggerService.java
index 20a4445235..61dc1a7193 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/LoggerService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/LoggerService.java
@@ -20,9 +20,9 @@ import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.log.LogClient;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.ProcessDao;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
index b114bc470c..ea997af21c 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
@@ -16,9 +16,16 @@
*/
package org.apache.dolphinscheduler.api.service;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.core.JsonProcessingException;
import org.apache.dolphinscheduler.api.dto.treeview.Instance;
import org.apache.dolphinscheduler.api.dto.treeview.TreeViewDto;
import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.utils.CheckUtils;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.*;
@@ -31,15 +38,8 @@ import org.apache.dolphinscheduler.common.thread.Stopper;
import org.apache.dolphinscheduler.common.utils.CollectionUtils;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.ProcessDao;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.dolphinscheduler.api.utils.CheckUtils;
import org.apache.dolphinscheduler.dao.entity.*;
import org.apache.dolphinscheduler.dao.mapper.*;
import org.slf4j.Logger;
@@ -56,8 +56,10 @@ import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
import static org.apache.dolphinscheduler.common.Constants.CMDPARAM_SUB_PROCESS_DEFINE_ID;
@@ -482,50 +484,21 @@ public class ProcessDefinitionService extends BaseDAGService {
* @param response response
*/
public void exportProcessDefinitionById(User loginUser, String projectName, Integer processDefinitionId, HttpServletResponse response) {
+ //export project info
Project project = projectMapper.queryByName(projectName);
+ //check user access for project
Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName);
Status resultStatus = (Status) checkResult.get(Constants.STATUS);
+
if (resultStatus == Status.SUCCESS) {
+ //get workflow info
ProcessDefinition processDefinition = processDefineMapper.queryByDefineId(processDefinitionId);
- if (processDefinition != null) {
- JSONObject jsonObject = JSONUtils.parseObject(processDefinition.getProcessDefinitionJson());
- JSONArray jsonArray = (JSONArray) jsonObject.get("tasks");
- for (int i = 0; i < jsonArray.size(); i++) {
- JSONObject taskNode = jsonArray.getJSONObject(i);
- if (taskNode.get("type") != null && taskNode.get("type") != "") {
- String taskType = taskNode.getString("type");
- if(taskType.equals(TaskType.SQL.name()) || taskType.equals(TaskType.PROCEDURE.name())){
- JSONObject sqlParameters = JSONUtils.parseObject(taskNode.getString("params"));
- DataSource dataSource = dataSourceMapper.selectById((Integer) sqlParameters.get("datasource"));
- if (dataSource != null) {
- sqlParameters.put("datasourceName", dataSource.getName());
- }
- taskNode.put("params", sqlParameters);
- }else if(taskType.equals(TaskType.DEPENDENT.name())){
- JSONObject dependentParameters = JSONUtils.parseObject(taskNode.getString("dependence"));
- if(dependentParameters != null){
- JSONArray dependTaskList = (JSONArray) dependentParameters.get("dependTaskList");
- for (int j = 0; j < dependTaskList.size(); j++) {
- JSONObject dependentTaskModel = dependTaskList.getJSONObject(j);
- JSONArray dependItemList = (JSONArray) dependentTaskModel.get("dependItemList");
- for (int k = 0; k < dependItemList.size(); k++) {
- JSONObject dependentItem = dependItemList.getJSONObject(k);
- int definitionId = dependentItem.getInteger("definitionId");
- ProcessDefinition definition = processDefineMapper.queryByDefineId(definitionId);
- if(definition != null){
- dependentItem.put("projectName",definition.getProjectName());
- dependentItem.put("definitionName",definition.getName());
- }
- }
- }
- taskNode.put("dependence", dependentParameters);
- }
- }
- }
- }
- jsonObject.put("tasks", jsonArray);
- processDefinition.setProcessDefinitionJson(jsonObject.toString());
+
+ if (null != processDefinition) {
+ //correct task param which has data source or dependent param
+ String correctProcessDefinitionJson = addTaskNodeSpecialParam(processDefinition.getProcessDefinitionJson());
+ processDefinition.setProcessDefinitionJson(correctProcessDefinitionJson);
Map row = new LinkedHashMap<>();
row.put("projectName", processDefinition.getProjectName());
@@ -535,8 +508,9 @@ public class ProcessDefinitionService extends BaseDAGService {
row.put("processDefinitionLocations", processDefinition.getLocations());
row.put("processDefinitionConnects", processDefinition.getConnects());
+ //schedule info
List schedules = scheduleMapper.queryByProcessDefinitionId(processDefinitionId);
- if (schedules.size() > 0) {
+ if (!schedules.isEmpty()) {
Schedule schedule = schedules.get(0);
row.put("scheduleWarningType", schedule.getWarningType());
row.put("scheduleWarningGroupId", schedule.getWarningGroupId());
@@ -556,6 +530,8 @@ public class ProcessDefinitionService extends BaseDAGService {
}
}
+
+ //create workflow json file
String rowsJson = JSONUtils.toJsonString(row);
response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
response.setHeader("Content-Disposition", "attachment;filename="+processDefinition.getName()+".json");
@@ -564,38 +540,136 @@ public class ProcessDefinitionService extends BaseDAGService {
try {
out = response.getOutputStream();
buff = new BufferedOutputStream(out);
- buff.write(rowsJson.getBytes("UTF-8"));
+ buff.write(rowsJson.getBytes(StandardCharsets.UTF_8));
buff.flush();
buff.close();
} catch (IOException e) {
- e.printStackTrace();
+ logger.warn("export process fail", e);
}finally {
- try {
- buff.close();
- out.close();
- } catch (Exception e) {
- e.printStackTrace();
+ if (null != buff) {
+ try {
+ buff.close();
+ } catch (Exception e) {
+ logger.warn("export process buffer not close", e);
+ }
}
+ if (null != out) {
+ try {
+ out.close();
+ } catch (Exception e) {
+ logger.warn("export process output stream not close", e);
+ }
+ }
+
}
}
}
}
+ /**
+ * correct task param which has datasource or dependent
+ * @param processDefinitionJson processDefinitionJson
+ * @return correct processDefinitionJson
+ */
+ public String addTaskNodeSpecialParam(String processDefinitionJson) {
+ JSONObject jsonObject = JSONUtils.parseObject(processDefinitionJson);
+ JSONArray jsonArray = (JSONArray) jsonObject.get("tasks");
+
+ for (int i = 0; i < jsonArray.size(); i++) {
+ JSONObject taskNode = jsonArray.getJSONObject(i);
+ if (StringUtils.isNotEmpty(taskNode.getString("type"))) {
+ String taskType = taskNode.getString("type");
+
+ if(checkTaskHasDataSource(taskType)){
+ // add sqlParameters
+ JSONObject sqlParameters = JSONUtils.parseObject(taskNode.getString("params"));
+ DataSource dataSource = dataSourceMapper.selectById((Integer) sqlParameters.get("datasource"));
+ if (null != dataSource) {
+ sqlParameters.put("datasourceName", dataSource.getName());
+ }
+ taskNode.put("params", sqlParameters);
+ }else if(checkTaskHasDependent(taskType)){
+ // add dependent param
+ JSONObject dependentParameters = JSONUtils.parseObject(taskNode.getString("dependence"));
+
+ if(null != dependentParameters){
+ JSONArray dependTaskList = (JSONArray) dependentParameters.get("dependTaskList");
+ for (int j = 0; j < dependTaskList.size(); j++) {
+ JSONObject dependentTaskModel = dependTaskList.getJSONObject(j);
+ JSONArray dependItemList = (JSONArray) dependentTaskModel.get("dependItemList");
+ for (int k = 0; k < dependItemList.size(); k++) {
+ JSONObject dependentItem = dependItemList.getJSONObject(k);
+ int definitionId = dependentItem.getInteger("definitionId");
+ ProcessDefinition definition = processDefineMapper.queryByDefineId(definitionId);
+ if(null != definition){
+ dependentItem.put("projectName",definition.getProjectName());
+ dependentItem.put("definitionName",definition.getName());
+ }
+ }
+ }
+ taskNode.put("dependence", dependentParameters);
+ }
+ }
+ }
+ }
+ jsonObject.put("tasks", jsonArray);
+ return jsonObject.toString();
+ }
+
+ /**
+ * check task if has dependent
+ * @param taskType task type
+ * @return if task has dependent return true else false
+ */
+ private boolean checkTaskHasDependent(String taskType) {
+ return taskType.equals(TaskType.DEPENDENT.name());
+ }
+
+ /**
+ * check task if has data source info
+ * @param taskType task type
+ * @return if task has data source return true else false
+ */
+ private boolean checkTaskHasDataSource(String taskType) {
+ return taskType.equals(TaskType.SQL.name()) || taskType.equals(TaskType.PROCEDURE.name());
+ }
+
+ /**
+ * check task if has sub process
+ * @param taskType task type
+ * @return if task has sub process return true else false
+ */
+ private boolean checkTaskHasSubProcess(String taskType) {
+ return taskType.equals(TaskType.SUB_PROCESS.name());
+ }
+
+ /**
+ * import process definition
+ * @param loginUser login user
+ * @param file process metadata json file
+ * @param currentProjectName current project name
+ * @return
+ */
@Transactional(rollbackFor = Exception.class)
- public Map importProcessDefinition(User loginUser, MultipartFile file) {
+ public Map importProcessDefinition(User loginUser, MultipartFile file, String currentProjectName) {
Map result = new HashMap<>(5);
- JSONObject json = null;
- try(InputStreamReader inputStreamReader = new InputStreamReader( file.getInputStream(), "UTF-8" )) {
+ JSONObject json;
+
+ //read workflow json
+ try(InputStreamReader inputStreamReader = new InputStreamReader( file.getInputStream(), StandardCharsets.UTF_8)) {
BufferedReader streamReader = new BufferedReader(inputStreamReader);
StringBuilder respomseStrBuilder = new StringBuilder();
- String inputStr = "";
+ String inputStr;
+
while ((inputStr = streamReader.readLine())!= null){
respomseStrBuilder.append( inputStr );
}
+
json = JSONObject.parseObject( respomseStrBuilder.toString() );
- if(json != null){
- String projectName = null;
+
+ if(null != json){
+ String originProjectName = null;
String processDefinitionName = null;
String processDefinitionJson = null;
String processDefinitionDesc = null;
@@ -613,151 +687,254 @@ public class ProcessDefinitionService extends BaseDAGService {
String scheduleWorkerGroupId = null;
String scheduleWorkerGroupName = null;
- if (ObjectUtils.allNotNull(json.get("projectName"))) {
- projectName = json.get("projectName").toString();
+ if (Objects.nonNull(json.get("projectName"))) {
+ originProjectName = json.get("projectName").toString();
} else {
putMsg(result, Status.DATA_IS_NULL, "processDefinitionName");
return result;
}
- if (ObjectUtils.allNotNull(json.get("processDefinitionName"))) {
+ if (Objects.nonNull(json.get("processDefinitionName"))) {
processDefinitionName = json.get("processDefinitionName").toString();
} else {
putMsg(result, Status.DATA_IS_NULL, "processDefinitionName");
return result;
}
- if (ObjectUtils.allNotNull(json.get("processDefinitionJson"))) {
+ if (Objects.nonNull(json.get("processDefinitionJson"))) {
processDefinitionJson = json.get("processDefinitionJson").toString();
} else {
putMsg(result, Status.DATA_IS_NULL, "processDefinitionJson");
return result;
}
- if (ObjectUtils.allNotNull(json.get("processDefinitionDescription"))) {
+ if (Objects.nonNull(json.get("processDefinitionDescription"))) {
processDefinitionDesc = json.get("processDefinitionDescription").toString();
}
- if (ObjectUtils.allNotNull(json.get("processDefinitionLocations"))) {
+ if (Objects.nonNull(json.get("processDefinitionLocations"))) {
processDefinitionLocations = json.get("processDefinitionLocations").toString();
}
- if (ObjectUtils.allNotNull(json.get("processDefinitionConnects"))) {
+ if (Objects.nonNull(json.get("processDefinitionConnects"))) {
processDefinitionConnects = json.get("processDefinitionConnects").toString();
}
- Project project = projectMapper.queryByName(projectName);
- if(project != null){
- processDefinitionName = recursionProcessDefinitionName(project.getId(), processDefinitionName, 1);
- }
+ //check user access for org project
+ Project originProject = projectMapper.queryByName(originProjectName);
+ Map checkResult = projectService.checkProjectAndAuth(loginUser, originProject, originProjectName);
+ Status resultStatus = (Status) checkResult.get(Constants.STATUS);
- JSONObject jsonObject = JSONUtils.parseObject(processDefinitionJson);
- JSONArray jsonArray = (JSONArray) jsonObject.get("tasks");
- for (int j = 0; j < jsonArray.size(); j++) {
- JSONObject taskNode = jsonArray.getJSONObject(j);
- String taskType = taskNode.getString("type");
- if(taskType.equals(TaskType.SQL.name()) || taskType.equals(TaskType.PROCEDURE.name())) {
- JSONObject sqlParameters = JSONUtils.parseObject(taskNode.getString("params"));
- List dataSources = dataSourceMapper.queryDataSourceByName(sqlParameters.getString("datasourceName"));
- if (dataSources.size() > 0) {
- DataSource dataSource = dataSources.get(0);
- sqlParameters.put("datasource", dataSource.getId());
- }
- taskNode.put("params", sqlParameters);
- }else if(taskType.equals(TaskType.DEPENDENT.name())){
- JSONObject dependentParameters = JSONUtils.parseObject(taskNode.getString("dependence"));
- if(dependentParameters != null){
- JSONArray dependTaskList = (JSONArray) dependentParameters.get("dependTaskList");
- for (int h = 0; h < dependTaskList.size(); h++) {
- JSONObject dependentTaskModel = dependTaskList.getJSONObject(h);
- JSONArray dependItemList = (JSONArray) dependentTaskModel.get("dependItemList");
- for (int k = 0; k < dependItemList.size(); k++) {
- JSONObject dependentItem = dependItemList.getJSONObject(k);
- Project dependentItemProject = projectMapper.queryByName(dependentItem.getString("projectName"));
- if(dependentItemProject != null){
- ProcessDefinition definition = processDefineMapper.queryByDefineName(dependentItemProject.getId(),dependentItem.getString("definitionName"));
- if(definition != null){
- dependentItem.put("projectId",dependentItemProject.getId());
- dependentItem.put("definitionId",definition.getId());
+ if (resultStatus == Status.SUCCESS) {
+ //use currentProjectName to query
+ Project targetProject = projectMapper.queryByName(currentProjectName);
+ if(null != targetProject){
+ processDefinitionName = recursionProcessDefinitionName(targetProject.getId(), processDefinitionName, 1);
+ }
+
+ JSONObject jsonObject = JSONUtils.parseObject(processDefinitionJson);
+ JSONArray jsonArray = (JSONArray) jsonObject.get("tasks");
+
+ for (int j = 0; j < jsonArray.size(); j++) {
+ JSONObject taskNode = jsonArray.getJSONObject(j);
+ String taskType = taskNode.getString("type");
+ if(checkTaskHasDataSource(taskType)) {
+ JSONObject sqlParameters = JSONUtils.parseObject(taskNode.getString("params"));
+ List dataSources = dataSourceMapper.queryDataSourceByName(sqlParameters.getString("datasourceName"));
+ if (!dataSources.isEmpty()) {
+ DataSource dataSource = dataSources.get(0);
+ sqlParameters.put("datasource", dataSource.getId());
+ }
+ taskNode.put("params", sqlParameters);
+ }else if(checkTaskHasDependent(taskType)){
+ JSONObject dependentParameters = JSONUtils.parseObject(taskNode.getString("dependence"));
+ if(dependentParameters != null){
+ JSONArray dependTaskList = (JSONArray) dependentParameters.get("dependTaskList");
+ for (int h = 0; h < dependTaskList.size(); h++) {
+ JSONObject dependentTaskModel = dependTaskList.getJSONObject(h);
+ JSONArray dependItemList = (JSONArray) dependentTaskModel.get("dependItemList");
+ for (int k = 0; k < dependItemList.size(); k++) {
+ JSONObject dependentItem = dependItemList.getJSONObject(k);
+ Project dependentItemProject = projectMapper.queryByName(dependentItem.getString("projectName"));
+ if(dependentItemProject != null){
+ ProcessDefinition definition = processDefineMapper.queryByDefineName(dependentItemProject.getId(),dependentItem.getString("definitionName"));
+ if(definition != null){
+ dependentItem.put("projectId",dependentItemProject.getId());
+ dependentItem.put("definitionId",definition.getId());
+ }
}
}
}
+ taskNode.put("dependence", dependentParameters);
}
- taskNode.put("dependence", dependentParameters);
}
}
- }
- jsonObject.put("tasks", jsonArray);
- Map createProcessDefinitionResult = createProcessDefinition(loginUser,projectName,processDefinitionName,jsonObject.toString(),processDefinitionDesc,processDefinitionLocations,processDefinitionConnects);
- Integer processDefinitionId = null;
- if (ObjectUtils.allNotNull(createProcessDefinitionResult.get("processDefinitionId"))) {
- processDefinitionId = Integer.parseInt(createProcessDefinitionResult.get("processDefinitionId").toString());
- }
- if (ObjectUtils.allNotNull(json.get("scheduleCrontab")) && processDefinitionId != null) {
- Date now = new Date();
- Schedule scheduleObj = new Schedule();
- scheduleObj.setProjectName(projectName);
- scheduleObj.setProcessDefinitionId(processDefinitionId);
- scheduleObj.setProcessDefinitionName(processDefinitionName);
- scheduleObj.setCreateTime(now);
- scheduleObj.setUpdateTime(now);
- scheduleObj.setUserId(loginUser.getId());
- scheduleObj.setUserName(loginUser.getUserName());
-
-
- scheduleCrontab = json.get("scheduleCrontab").toString();
- scheduleObj.setCrontab(scheduleCrontab);
- if (ObjectUtils.allNotNull(json.get("scheduleStartTime"))) {
- scheduleStartTime = json.get("scheduleStartTime").toString();
- scheduleObj.setStartTime(DateUtils.stringToDate(scheduleStartTime));
- }
- if (ObjectUtils.allNotNull(json.get("scheduleEndTime"))) {
- scheduleEndTime = json.get("scheduleEndTime").toString();
- scheduleObj.setEndTime(DateUtils.stringToDate(scheduleEndTime));
- }
- if (ObjectUtils.allNotNull(json.get("scheduleWarningType"))) {
- scheduleWarningType = json.get("scheduleWarningType").toString();
- scheduleObj.setWarningType(WarningType.valueOf(scheduleWarningType));
- }
- if (ObjectUtils.allNotNull(json.get("scheduleWarningGroupId"))) {
- scheduleWarningGroupId = json.get("scheduleWarningGroupId").toString();
- scheduleObj.setWarningGroupId(Integer.parseInt(scheduleWarningGroupId));
- }
- if (ObjectUtils.allNotNull(json.get("scheduleFailureStrategy"))) {
- scheduleFailureStrategy = json.get("scheduleFailureStrategy").toString();
- scheduleObj.setFailureStrategy(FailureStrategy.valueOf(scheduleFailureStrategy));
- }
- if (ObjectUtils.allNotNull(json.get("scheduleReleaseState"))) {
- scheduleReleaseState = json.get("scheduleReleaseState").toString();
- scheduleObj.setReleaseState(ReleaseState.valueOf(scheduleReleaseState));
+ //recursive sub-process parameter correction map key for old process id value for new process id
+ Map subProcessIdMap = new HashMap<>(20);
+
+ List subProcessList = jsonArray.stream()
+ .filter(elem -> checkTaskHasSubProcess(JSONUtils.parseObject(elem.toString()).getString("type")))
+ .collect(Collectors.toList());
+
+ if (!subProcessList.isEmpty()) {
+ importSubProcess(loginUser, targetProject, jsonArray, subProcessIdMap);
}
- if (ObjectUtils.allNotNull(json.get("scheduleProcessInstancePriority"))) {
- scheduleProcessInstancePriority = json.get("scheduleProcessInstancePriority").toString();
- scheduleObj.setProcessInstancePriority(Priority.valueOf(scheduleProcessInstancePriority));
+
+ jsonObject.put("tasks", jsonArray);
+
+ Map createProcessDefinitionResult = createProcessDefinition(loginUser,currentProjectName,processDefinitionName,jsonObject.toString(),processDefinitionDesc,processDefinitionLocations,processDefinitionConnects);
+ Integer processDefinitionId = null;
+ if (Objects.nonNull(createProcessDefinitionResult.get("processDefinitionId"))) {
+ processDefinitionId = Integer.parseInt(createProcessDefinitionResult.get("processDefinitionId").toString());
}
- if (ObjectUtils.allNotNull(json.get("scheduleWorkerGroupId"))) {
- scheduleWorkerGroupId = json.get("scheduleWorkerGroupId").toString();
- if(scheduleWorkerGroupId != null){
- scheduleObj.setWorkerGroupId(Integer.parseInt(scheduleWorkerGroupId));
- }else{
- if (ObjectUtils.allNotNull(json.get("scheduleWorkerGroupName"))) {
- scheduleWorkerGroupName = json.get("scheduleWorkerGroupName").toString();
- List workerGroups = workerGroupMapper.queryWorkerGroupByName(scheduleWorkerGroupName);
- if(workerGroups.size() > 0){
- scheduleObj.setWorkerGroupId(workerGroups.get(0).getId());
+ if (Objects.nonNull(json.get("scheduleCrontab")) && processDefinitionId != null) {
+ 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());
+
+
+ scheduleCrontab = json.get("scheduleCrontab").toString();
+ scheduleObj.setCrontab(scheduleCrontab);
+ if (Objects.nonNull(json.get("scheduleStartTime"))) {
+ scheduleStartTime = json.get("scheduleStartTime").toString();
+ scheduleObj.setStartTime(DateUtils.stringToDate(scheduleStartTime));
+ }
+ if (Objects.nonNull(json.get("scheduleEndTime"))) {
+ scheduleEndTime = json.get("scheduleEndTime").toString();
+ scheduleObj.setEndTime(DateUtils.stringToDate(scheduleEndTime));
+ }
+ if (Objects.nonNull(json.get("scheduleWarningType"))) {
+ scheduleWarningType = json.get("scheduleWarningType").toString();
+ scheduleObj.setWarningType(WarningType.valueOf(scheduleWarningType));
+ }
+ if (Objects.nonNull(json.get("scheduleWarningGroupId"))) {
+ scheduleWarningGroupId = json.get("scheduleWarningGroupId").toString();
+ scheduleObj.setWarningGroupId(Integer.parseInt(scheduleWarningGroupId));
+ }
+ if (Objects.nonNull(json.get("scheduleFailureStrategy"))) {
+ scheduleFailureStrategy = json.get("scheduleFailureStrategy").toString();
+ scheduleObj.setFailureStrategy(FailureStrategy.valueOf(scheduleFailureStrategy));
+ }
+ if (Objects.nonNull(json.get("scheduleReleaseState"))) {
+ scheduleReleaseState = json.get("scheduleReleaseState").toString();
+ scheduleObj.setReleaseState(ReleaseState.valueOf(scheduleReleaseState));
+ }
+ if (Objects.nonNull(json.get("scheduleProcessInstancePriority"))) {
+ scheduleProcessInstancePriority = json.get("scheduleProcessInstancePriority").toString();
+ scheduleObj.setProcessInstancePriority(Priority.valueOf(scheduleProcessInstancePriority));
+ }
+ if (Objects.nonNull(json.get("scheduleWorkerGroupId"))) {
+ scheduleWorkerGroupId = json.get("scheduleWorkerGroupId").toString();
+ if(scheduleWorkerGroupId != null){
+ scheduleObj.setWorkerGroupId(Integer.parseInt(scheduleWorkerGroupId));
+ }else{
+ if (Objects.nonNull(json.get("scheduleWorkerGroupName"))) {
+ scheduleWorkerGroupName = json.get("scheduleWorkerGroupName").toString();
+ List workerGroups = workerGroupMapper.queryWorkerGroupByName(scheduleWorkerGroupName);
+ if(!workerGroups.isEmpty()){
+ scheduleObj.setWorkerGroupId(workerGroups.get(0).getId());
+ }
}
}
}
+ scheduleMapper.insert(scheduleObj);
}
- scheduleMapper.insert(scheduleObj);
+
+ putMsg(result, Status.SUCCESS);
+ return result;
}
}else{
- putMsg(result, Status.EXPORT_PROCESS_DEFINE_BY_ID_ERROR);
+ putMsg(result, Status.IMPORT_PROCESS_DEFINE_ERROR);
return result;
}
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
- putMsg(result, Status.SUCCESS);
return result;
}
+ /**
+ * check import process has sub process
+ * recursion create sub process
+ * @param loginUser login user
+ * @param targetProject target project
+ */
+ public void importSubProcess(User loginUser, Project targetProject, JSONArray jsonArray, Map subProcessIdMap) {
+ for (int i = 0; i < jsonArray.size(); i++) {
+ JSONObject taskNode = jsonArray.getJSONObject(i);
+ String taskType = taskNode.getString("type");
+
+ if (checkTaskHasSubProcess(taskType)) {
+ //get sub process info
+ JSONObject subParams = JSONUtils.parseObject(taskNode.getString("params"));
+ Integer subProcessId = subParams.getInteger("processDefinitionId");
+ ProcessDefinition subProcess = processDefineMapper.queryByDefineId(subProcessId);
+ String subProcessJson = subProcess.getProcessDefinitionJson();
+ //check current project has sub process
+ ProcessDefinition currentProjectSubProcess = processDefineMapper.queryByDefineName(targetProject.getId(), subProcess.getName());
+
+ if (null == currentProjectSubProcess) {
+ JSONArray subJsonArray = (JSONArray) JSONUtils.parseObject(subProcess.getProcessDefinitionJson()).get("tasks");
+
+ List subProcessList = subJsonArray.stream()
+ .filter(item -> checkTaskHasSubProcess(JSONUtils.parseObject(item.toString()).getString("type")))
+ .collect(Collectors.toList());
+
+ if (!subProcessList.isEmpty()) {
+ importSubProcess(loginUser, targetProject, subJsonArray, subProcessIdMap);
+ //sub process processId correct
+ if (!subProcessIdMap.isEmpty()) {
+
+ for (Map.Entry entry : subProcessIdMap.entrySet()) {
+ String oldSubProcessId = "\"processDefinitionId\":" + entry.getKey();
+ String newSubProcessId = "\"processDefinitionId\":" + entry.getValue();
+ subProcessJson = subProcessJson.replaceAll(oldSubProcessId, newSubProcessId);
+ }
+
+ subProcessIdMap.clear();
+ }
+ }
+
+ //if sub-process recursion
+ Date now = new Date();
+ //create sub process in target project
+ ProcessDefinition processDefine = new ProcessDefinition();
+ processDefine.setName(subProcess.getName());
+ processDefine.setVersion(subProcess.getVersion());
+ processDefine.setReleaseState(subProcess.getReleaseState());
+ processDefine.setProjectId(targetProject.getId());
+ processDefine.setUserId(loginUser.getId());
+ processDefine.setProcessDefinitionJson(subProcessJson);
+ processDefine.setDescription(subProcess.getDescription());
+ processDefine.setLocations(subProcess.getLocations());
+ processDefine.setConnects(subProcess.getConnects());
+ processDefine.setTimeout(subProcess.getTimeout());
+ processDefine.setTenantId(subProcess.getTenantId());
+ processDefine.setGlobalParams(subProcess.getGlobalParams());
+ processDefine.setCreateTime(now);
+ processDefine.setUpdateTime(now);
+ processDefine.setFlag(subProcess.getFlag());
+ processDefine.setReceivers(subProcess.getReceivers());
+ processDefine.setReceiversCc(subProcess.getReceiversCc());
+ processDefineMapper.insert(processDefine);
+
+ logger.info("create sub process, project: {}, process name: {}", targetProject.getName(), processDefine.getName());
+
+ //modify task node
+ ProcessDefinition newSubProcessDefine = processDefineMapper.queryByDefineName(processDefine.getProjectId(),processDefine.getName());
+
+ if (null != newSubProcessDefine) {
+ subProcessIdMap.put(subProcessId, newSubProcessDefine.getId());
+ subParams.put("processDefinitionId", newSubProcessDefine.getId());
+ taskNode.put("params", subParams);
+ }
+
+ }
+ }
+ }
+ }
/**
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
index db9a6ef8ff..87e1a0ede1 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
@@ -37,7 +37,6 @@ import org.apache.dolphinscheduler.dao.ProcessDao;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.dao.entity.*;
import org.apache.dolphinscheduler.dao.mapper.*;
import org.slf4j.Logger;
@@ -195,12 +194,11 @@ public class ProcessInstanceService extends BaseDAGService {
processInstance.setDuration(DateUtils.differSec(processInstance.getStartTime(),processInstance.getEndTime()));
}
- Set exclusionSet = new HashSet(){{
- add(Constants.CLASS);
- add("locations");
- add("connects");
- add("processInstanceJson");
- }};
+ Set exclusionSet = new HashSet();
+ exclusionSet.add(Constants.CLASS);
+ exclusionSet.add("locations");
+ exclusionSet.add("connects");
+ exclusionSet.add("processInstanceJson");
PageInfo pageInfo = new PageInfo(pageNo, pageSize);
pageInfo.setTotalCount((int) processInstanceList.getTotal());
@@ -490,13 +488,14 @@ public class ProcessInstanceService extends BaseDAGService {
}
ProcessInstance processInstance = processDao.findProcessInstanceDetailById(processInstanceId);
List taskInstanceList = processDao.findValidTaskListByProcessId(processInstanceId);
- //process instance priority
- int processInstancePriority = processInstance.getProcessInstancePriority().ordinal();
- if (processInstance == null) {
+
+ if (null == processInstance) {
putMsg(result, Status.PROCESS_INSTANCE_NOT_EXIST, processInstanceId);
return result;
}
+ //process instance priority
+ int processInstancePriority = processInstance.getProcessInstancePriority().ordinal();
// delete zk queue
if (CollectionUtils.isNotEmpty(taskInstanceList)){
for (TaskInstance taskInstance : taskInstanceList){
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
index 66bf214608..3093daed5a 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
@@ -16,12 +16,15 @@
*/
package org.apache.dolphinscheduler.api.service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.collections.BeanMap;
+import org.apache.commons.lang.StringUtils;
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.ResourceType;
-import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.common.utils.FileUtils;
import org.apache.dolphinscheduler.common.utils.HadoopUtils;
import org.apache.dolphinscheduler.common.utils.PropertyUtils;
@@ -29,10 +32,6 @@ import org.apache.dolphinscheduler.dao.entity.Resource;
import org.apache.dolphinscheduler.dao.entity.Tenant;
import org.apache.dolphinscheduler.dao.entity.UdfFunc;
import org.apache.dolphinscheduler.dao.entity.User;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.collections.BeanMap;
-import org.apache.commons.lang.StringUtils;
import org.apache.dolphinscheduler.dao.mapper.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -113,14 +112,12 @@ public class ResourcesService extends BaseService {
putMsg(result, Status.RESOURCE_SUFFIX_FORBID_CHANGE);
return result;
}
- //
+
//If resource type is UDF, only jar packages are allowed to be uploaded, and the suffix must be .jar
- if (Constants.UDF.equals(type.name())) {
- if (!JAR.equalsIgnoreCase(fileSuffix)) {
- logger.error(Status.UDF_RESOURCE_SUFFIX_NOT_JAR.getMsg());
- putMsg(result, Status.UDF_RESOURCE_SUFFIX_NOT_JAR);
- return result;
- }
+ if (Constants.UDF.equals(type.name()) && !JAR.equalsIgnoreCase(fileSuffix)) {
+ logger.error(Status.UDF_RESOURCE_SUFFIX_NOT_JAR.getMsg());
+ putMsg(result, Status.UDF_RESOURCE_SUFFIX_NOT_JAR);
+ return result;
}
if (file.getSize() > Constants.maxFileSize) {
logger.error("file size is too large: {}", file.getOriginalFilename());
@@ -226,12 +223,16 @@ public class ResourcesService extends BaseService {
}
//check resource aleady exists
- if (!resource.getAlias().equals(name)) {
- if (checkResourceExists(name, 0, type.ordinal())) {
- logger.error("resource {} already exists, can't recreate", name);
- putMsg(result, Status.RESOURCE_EXIST);
- return result;
- }
+ if (!resource.getAlias().equals(name) && checkResourceExists(name, 0, type.ordinal())) {
+ logger.error("resource {} already exists, can't recreate", name);
+ putMsg(result, Status.RESOURCE_EXIST);
+ return result;
+ }
+
+ // query tenant by user id
+ String tenantCode = getTenantCode(resource.getUserId(),result);
+ if (StringUtils.isEmpty(tenantCode)){
+ return result;
}
//get the file suffix
@@ -271,10 +272,6 @@ public class ResourcesService extends BaseService {
return result;
}
- // hdfs move
- // query tenant by user id
- User user = userMapper.queryDetailsById(resource.getUserId());
- String tenantCode = tenantMapper.queryById(user.getTenantId()).getTenantCode();
// get file hdfs path
// delete hdfs file by type
String originHdfsFileName = "";
@@ -430,10 +427,15 @@ public class ResourcesService extends BaseService {
return result;
}
- String tenantCode = tenantMapper.queryById(loginUser.getTenantId()).getTenantCode();
+ Tenant tenant = tenantMapper.queryById(loginUser.getTenantId());
+ if (tenant == null){
+ putMsg(result, Status.TENANT_NOT_EXIST);
+ return result;
+ }
String hdfsFilename = "";
// delete hdfs file by type
+ String tenantCode = tenant.getTenantCode();
hdfsFilename = getHdfsFileName(resource, tenantCode, hdfsFilename);
//delete data in database
@@ -522,8 +524,11 @@ public class ResourcesService extends BaseService {
}
}
- User user = userMapper.queryDetailsById(resource.getUserId());
- String tenantCode = tenantMapper.queryById(user.getTenantId()).getTenantCode();
+ String tenantCode = getTenantCode(resource.getUserId(),result);
+ if (StringUtils.isEmpty(tenantCode)){
+ return result;
+ }
+
// hdfs path
String hdfsFileName = HadoopUtils.getHdfsFilename(tenantCode, resource.getAlias());
logger.info("resource hdfs path is {} ", hdfsFileName);
@@ -644,18 +649,20 @@ public class ResourcesService extends BaseService {
if (StringUtils.isNotEmpty(resourceViewSuffixs)) {
List strList = Arrays.asList(resourceViewSuffixs.split(","));
if (!strList.contains(nameSuffix)) {
- logger.error("resouce suffix {} not support updateProcessInstance, resource id {}", nameSuffix, resourceId);
+ logger.error("resource suffix {} not support updateProcessInstance, resource id {}", nameSuffix, resourceId);
putMsg(result, Status.RESOURCE_SUFFIX_NOT_SUPPORT_VIEW);
return result;
}
}
+ String tenantCode = getTenantCode(resource.getUserId(),result);
+ if (StringUtils.isEmpty(tenantCode)){
+ return result;
+ }
resource.setSize(content.getBytes().length);
resource.setUpdateTime(new Date());
resourcesMapper.updateById(resource);
- User user = userMapper.queryDetailsById(resource.getUserId());
- String tenantCode = tenantMapper.queryById(user.getTenantId()).getTenantCode();
result = uploadContentToHdfs(resource.getAlias(), tenantCode, content);
if (!result.getCode().equals(Status.SUCCESS.getCode())) {
@@ -897,4 +904,29 @@ public class ResourcesService extends BaseService {
}
}
+ /**
+ * get tenantCode by UserId
+ *
+ * @param userId user id
+ * @param result return result
+ * @return
+ */
+ private String getTenantCode(int userId,Result result){
+
+ User user = userMapper.queryDetailsById(userId);
+ if(user == null){
+ logger.error("user {} not exists", userId);
+ putMsg(result, Status.USER_NOT_EXIST,userId);
+ return null;
+ }
+
+ Tenant tenant = tenantMapper.queryById(user.getTenantId());
+ if (tenant == null){
+ logger.error("tenant not exists");
+ putMsg(result, Status.TENANT_NOT_EXIST);
+ return null;
+ }
+ return tenant.getTenantCode();
+ }
+
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SchedulerService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SchedulerService.java
index 042e16f9f9..3c4a42e6cf 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SchedulerService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SchedulerService.java
@@ -25,6 +25,7 @@ import org.apache.dolphinscheduler.common.enums.*;
import org.apache.dolphinscheduler.common.model.Server;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.ProcessDao;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.Project;
@@ -38,7 +39,6 @@ import org.apache.dolphinscheduler.server.quartz.ProcessScheduleJob;
import org.apache.dolphinscheduler.server.quartz.QuartzExecutors;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.lang3.StringUtils;
import org.quartz.CronExpression;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -374,12 +374,12 @@ public class SchedulerService extends BaseService {
try {
switch (scheduleStatus) {
case ONLINE: {
- logger.info("Call master client set schedule online, project id: {}, flow id: {},host: {}, port: {}", project.getId(), processDefinition.getId(), masterServers);
+ logger.info("Call master client set schedule online, project id: {}, flow id: {},host: {}", project.getId(), processDefinition.getId(), masterServers);
setSchedule(project.getId(), id);
break;
}
case OFFLINE: {
- logger.info("Call master client set schedule offline, project id: {}, flow id: {},host: {}, port: {}", project.getId(), processDefinition.getId(), masterServers);
+ logger.info("Call master client set schedule offline, project id: {}, flow id: {},host: {}", project.getId(), processDefinition.getId(), masterServers);
deleteSchedule(project.getId(), id);
break;
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SessionService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SessionService.java
index 89478d3e0e..f3f66d730d 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SessionService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SessionService.java
@@ -139,7 +139,6 @@ public class SessionService extends BaseService{
* @param loginUser login user
*/
public void signOut(String ip, User loginUser) {
- try {
/**
* query session by user id and ip
*/
@@ -147,8 +146,5 @@ public class SessionService extends BaseService{
//delete session
sessionMapper.deleteById(session.getId());
- }catch (Exception e){
-
- }
}
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java
index c1c5acd44c..74afa2a44e 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java
@@ -23,6 +23,7 @@ import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
import org.apache.dolphinscheduler.common.utils.CollectionUtils;
import org.apache.dolphinscheduler.common.utils.DateUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.ProcessDao;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
import org.apache.dolphinscheduler.dao.entity.Project;
@@ -32,7 +33,6 @@ import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
import org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -116,10 +116,9 @@ public class TaskInstanceService extends BaseService {
page, project.getId(), processInstanceId, searchVal, taskName, statusArray, host, start, end
);
PageInfo pageInfo = new PageInfo(pageNo, pageSize);
- Set exclusionSet = new HashSet(){{
- add(Constants.CLASS);
- add("taskJson");
- }};
+ Set exclusionSet = new HashSet<>();
+ exclusionSet.add(Constants.CLASS);
+ exclusionSet.add("taskJson");
List taskInstanceList = taskInstanceIPage.getRecords();
for(TaskInstance taskInstance : taskInstanceList){
taskInstance.setDuration(DateUtils.differSec(taskInstance.getStartTime(),
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TenantService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TenantService.java
index c73ca1bc7b..2522384d3e 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TenantService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TenantService.java
@@ -18,7 +18,6 @@ package org.apache.dolphinscheduler.api.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
@@ -26,6 +25,7 @@ import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.utils.CollectionUtils;
import org.apache.dolphinscheduler.common.utils.HadoopUtils;
import org.apache.dolphinscheduler.common.utils.PropertyUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
import org.apache.dolphinscheduler.dao.entity.Tenant;
@@ -34,7 +34,6 @@ import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
import org.apache.dolphinscheduler.dao.mapper.ProcessInstanceMapper;
import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
import org.apache.dolphinscheduler.dao.mapper.UserMapper;
-import org.apache.hadoop.fs.FileStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
index a4664b6c3e..a9a9239ce3 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
@@ -29,7 +29,7 @@ import org.apache.dolphinscheduler.common.utils.HadoopUtils;
import org.apache.dolphinscheduler.common.utils.PropertyUtils;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.*;
import org.apache.dolphinscheduler.dao.mapper.*;
import org.slf4j.Logger;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/WorkerGroupService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/WorkerGroupService.java
index 2d0743a5ab..c44c446d5c 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/WorkerGroupService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/WorkerGroupService.java
@@ -20,6 +20,7 @@ import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.utils.CollectionUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.entity.WorkerGroup;
@@ -27,7 +28,6 @@ import org.apache.dolphinscheduler.dao.mapper.ProcessInstanceMapper;
import org.apache.dolphinscheduler.dao.mapper.WorkerGroupMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/CheckUtils.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/CheckUtils.java
index a7867f1ba2..7099378b1d 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/CheckUtils.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/CheckUtils.java
@@ -21,8 +21,8 @@ import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.task.AbstractParameters;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.common.utils.TaskParametersUtils;
-import org.apache.commons.lang.StringUtils;
import java.text.MessageFormat;
import java.util.HashMap;
@@ -148,7 +148,7 @@ public class CheckUtils {
* @return true if regex pattern is right, otherwise return false
*/
private static boolean regexChecks(String str, Pattern pattern) {
- if (org.apache.commons.lang3.StringUtils.isEmpty(str)) {
+ if (StringUtils.isEmpty(str)) {
return false;
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/ZooKeeperState.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/ZooKeeperState.java
index e94d52e30c..523f8103aa 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/ZooKeeperState.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/ZooKeeperState.java
@@ -16,7 +16,7 @@
*/
package org.apache.dolphinscheduler.api.utils;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/ZookeeperMonitor.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/ZookeeperMonitor.java
index 040d00ee2c..66f57f6a11 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/ZookeeperMonitor.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/ZookeeperMonitor.java
@@ -17,10 +17,10 @@
package org.apache.dolphinscheduler.api.utils;
import org.apache.dolphinscheduler.common.enums.ZKNodeType;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.common.zk.AbstractZKClient;
import org.apache.dolphinscheduler.common.model.Server;
import org.apache.dolphinscheduler.dao.entity.ZookeeperRecord;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/AbstractControllerTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/AbstractControllerTest.java
index f9be9383d8..1ca9b4a098 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/AbstractControllerTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/AbstractControllerTest.java
@@ -19,8 +19,8 @@ package org.apache.dolphinscheduler.api.controller;
import org.apache.dolphinscheduler.api.ApiApplicationServer;
import org.apache.dolphinscheduler.api.service.SessionService;
import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.User;
-import org.apache.commons.lang3.StringUtils;
import org.junit.*;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
@@ -32,8 +32,6 @@ import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
@Ignore
@RunWith(SpringRunner.class)
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java
index a9a5f67b0b..f388445f0c 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java
@@ -18,11 +18,12 @@ package org.apache.dolphinscheduler.api.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.lang3.time.DateUtils;
+import java.util.Calendar;
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.dao.entity.AccessToken;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.AccessTokenMapper;
@@ -152,7 +153,7 @@ public class AccessTokenServiceTest {
accessToken.setId(1);
accessToken.setUserId(1);
accessToken.setToken("AccessTokenServiceTest");
- Date date = DateUtils.addDays(new Date(),30);
+ Date date = DateUtils.add(new Date(),Calendar.DAY_OF_MONTH, 30);
accessToken.setExpireTime(date);
return accessToken;
}
@@ -175,7 +176,7 @@ public class AccessTokenServiceTest {
* @return
*/
private String getDate(){
- Date date = DateUtils.addDays(new Date(),30);
- return org.apache.dolphinscheduler.common.utils.DateUtils.dateToString(date);
+ Date date = DateUtils.add(new Date(), Calendar.DAY_OF_MONTH, 30);
+ return DateUtils.dateToString(date);
}
}
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
index 90c800fcaa..b8207972f6 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
@@ -16,38 +16,80 @@
*/
package org.apache.dolphinscheduler.api.service;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
import org.apache.dolphinscheduler.api.ApiApplicationServer;
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.common.utils.FileUtils;
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.dao.entity.DataSource;
+import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
+import org.apache.dolphinscheduler.dao.entity.Project;
import org.apache.dolphinscheduler.dao.entity.User;
-import com.alibaba.fastjson.JSON;
+import org.apache.dolphinscheduler.dao.mapper.DataSourceMapper;
+import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
+import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
+import org.apache.http.entity.ContentType;
+import org.json.JSONException;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.skyscreamer.jsonassert.JSONAssert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.HashMap;
import java.util.Map;
-@RunWith(SpringRunner.class)
+@RunWith(MockitoJUnitRunner.Silent.class)
@SpringBootTest(classes = ApiApplicationServer.class)
public class ProcessDefinitionServiceTest {
private static final Logger logger = LoggerFactory.getLogger(ProcessDefinitionServiceTest.class);
- @Autowired
+ @InjectMocks
ProcessDefinitionService processDefinitionService;
+ @Mock
+ private DataSourceMapper dataSourceMapper;
+
+ @Mock
+ private ProcessDefinitionMapper processDefineMapper;
+
+ @Mock
+ private ProjectMapper projectMapper;
+
+ @Mock
+ private ProjectService projectService;
+
@Test
public void queryProccessDefinitionList() throws Exception {
+ String projectName = "project_test1";
+ Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName));
+ Project project = getProject(projectName);
User loginUser = new User();
loginUser.setId(-1);
loginUser.setUserType(UserType.GENERAL_USER);
+ Map result = new HashMap<>(5);
+ putMsg(result, Status.PROJECT_NOT_FOUNT, projectName);
+
+ Mockito.when(projectService.checkProjectAndAuth(loginUser,project,projectName)).thenReturn(result);
+
Map map = processDefinitionService.queryProccessDefinitionList(loginUser,"project_test1");
Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map.get(Constants.STATUS));
logger.info(JSON.toJSONString(map));
@@ -55,10 +97,20 @@ public class ProcessDefinitionServiceTest {
@Test
public void queryProcessDefinitionListPagingTest() throws Exception {
+ String projectName = "project_test1";
+ Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName));
+
+ Project project = getProject(projectName);
User loginUser = new User();
loginUser.setId(-1);
loginUser.setUserType(UserType.GENERAL_USER);
+
+ Map result = new HashMap<>(5);
+ putMsg(result, Status.PROJECT_NOT_FOUNT, projectName);
+
+ Mockito.when(projectService.checkProjectAndAuth(loginUser,project,projectName)).thenReturn(result);
+
Map map = processDefinitionService.queryProcessDefinitionListPaging(loginUser, "project_test1", "",1, 5,0);
Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map.get(Constants.STATUS));
@@ -67,13 +119,243 @@ public class ProcessDefinitionServiceTest {
@Test
public void deleteProcessDefinitionByIdTest() throws Exception {
+ String projectName = "project_test1";
+ Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName));
+ Project project = getProject(projectName);
User loginUser = new User();
loginUser.setId(-1);
loginUser.setUserType(UserType.GENERAL_USER);
- Map map = processDefinitionService.deleteProcessDefinitionById(loginUser, "li_sql_test", 6);
+
+ Map result = new HashMap<>(5);
+ putMsg(result, Status.PROJECT_NOT_FOUNT, projectName);
+ Mockito.when(projectService.checkProjectAndAuth(loginUser,project,projectName)).thenReturn(result);
+
+ Map map = processDefinitionService.deleteProcessDefinitionById(loginUser, "project_test1", 6);
Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map.get(Constants.STATUS));
logger.info(JSON.toJSONString(map));
}
+
+ /**
+ * add datasource param and dependent when export process
+ * @throws JSONException
+ */
+ @Test
+ public void testAddTaskNodeSpecialParam() throws JSONException {
+
+ Mockito.when(dataSourceMapper.selectById(1)).thenReturn(getDataSource());
+ Mockito.when(processDefineMapper.queryByDefineId(2)).thenReturn(getProcessDefinition());
+
+
+ String sqlDependentJson = "{\"globalParams\":[]," +
+ "\"tasks\":[{\"type\":\"SQL\",\"id\":\"tasks-27297\",\"name\":\"sql\"," +
+ "\"params\":{\"type\":\"MYSQL\",\"datasource\":1,\"sql\":\"select * from test\"," +
+ "\"udfs\":\"\",\"sqlType\":\"1\",\"title\":\"\",\"receivers\":\"\",\"receiversCc\":\"\",\"showType\":\"TABLE\"" +
+ ",\"localParams\":[],\"connParams\":\"\"," +
+ "\"preStatements\":[],\"postStatements\":[]}," +
+ "\"description\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\"," +
+ "\"retryInterval\":\"1\",\"timeout\":{\"strategy\":\"\"," +
+ "\"enable\":false},\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1," +
+ "\"preTasks\":[\"dependent\"]},{\"type\":\"DEPENDENT\",\"id\":\"tasks-33787\"," +
+ "\"name\":\"dependent\",\"params\":{},\"description\":\"\",\"runFlag\":\"NORMAL\"," +
+ "\"dependence\":{\"relation\":\"AND\",\"dependTaskList\":[{\"relation\":\"AND\"," +
+ "\"dependItemList\":[{\"projectId\":2,\"definitionId\":46,\"depTasks\":\"ALL\"," +
+ "\"cycle\":\"day\",\"dateValue\":\"today\"}]}]},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\"," +
+ "\"timeout\":{\"strategy\":\"\",\"enable\":false},\"taskInstancePriority\":\"MEDIUM\"," +
+ "\"workerGroupId\":-1,\"preTasks\":[]}],\"tenantId\":1,\"timeout\":0}";
+
+ String corSqlDependentJson = processDefinitionService.addTaskNodeSpecialParam(sqlDependentJson);
+
+
+ JSONAssert.assertEquals(sqlDependentJson,corSqlDependentJson,false);
+
+ }
+
+ /**
+ * import sub process test
+ */
+ @Test
+ public void testImportSubProcess() {
+
+ User loginUser = new User();
+ loginUser.setId(1);
+ loginUser.setUserType(UserType.ADMIN_USER);
+
+ Project testProject = getProject("test");
+
+ //Recursive subprocess sub2 process in sub1 process and sub1process in top process
+ String topProcessJson = "{\"globalParams\":[]," +
+ "\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-38634\",\"name\":\"shell1\"," +
+ "\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"#!/bin/bash\\necho \\\"shell-1\\\"\"}," +
+ "\"description\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\"," +
+ "\"retryInterval\":\"1\",\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false}," +
+ "\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1,\"preTasks\":[]}," +
+ "{\"type\":\"SUB_PROCESS\",\"id\":\"tasks-44207\",\"name\":\"shell-4\"," +
+ "\"params\":{\"processDefinitionId\":39},\"description\":\"\",\"runFlag\":\"NORMAL\"," +
+ "\"dependence\":{},\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false}," +
+ "\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1," +
+ "\"preTasks\":[\"shell1\"]}],\"tenantId\":1,\"timeout\":0}";
+
+ String sub1ProcessJson = "{\"globalParams\":[],\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-84090\"," +
+ "\"name\":\"shell-4\",\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"#!/bin/bash\\necho \\\"shell-4\\\"\"}," +
+ "\"description\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\"," +
+ "\"retryInterval\":\"1\",\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false}," +
+ "\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1,\"preTasks\":[]},{\"type\":\"SUB_PROCESS\"," +
+ "\"id\":\"tasks-87364\",\"name\":\"shell-5\"," +
+ "\"params\":{\"processDefinitionId\":46},\"description\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{}," +
+ "\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false},\"taskInstancePriority\":\"MEDIUM\"," +
+ "\"workerGroupId\":-1,\"preTasks\":[\"shell-4\"]}],\"tenantId\":1,\"timeout\":0}";
+
+ String sub2ProcessJson = "{\"globalParams\":[]," +
+ "\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-52423\",\"name\":\"shell-5\"," +
+ "\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"echo \\\"shell-5\\\"\"},\"description\":\"\"," +
+ "\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\"," +
+ "\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false},\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1," +
+ "\"preTasks\":[]}],\"tenantId\":1,\"timeout\":0}";
+
+
+ JSONObject jsonObject = JSONUtils.parseObject(topProcessJson);
+ JSONArray jsonArray = (JSONArray) jsonObject.get("tasks");
+
+ String originSubJson = jsonArray.toString();
+
+ Map subProcessIdMap = new HashMap<>(20);
+
+ ProcessDefinition shellDefinition1 = new ProcessDefinition();
+ shellDefinition1.setId(39);
+ shellDefinition1.setName("shell-4");
+ shellDefinition1.setProjectId(2);
+ shellDefinition1.setProcessDefinitionJson(sub1ProcessJson);
+
+ ProcessDefinition shellDefinition2 = new ProcessDefinition();
+ shellDefinition2.setId(46);
+ shellDefinition2.setName("shell-5");
+ shellDefinition2.setProjectId(2);
+ shellDefinition2.setProcessDefinitionJson(sub2ProcessJson);
+
+ Mockito.when(processDefineMapper.queryByDefineId(39)).thenReturn(shellDefinition1);
+ Mockito.when(processDefineMapper.queryByDefineId(46)).thenReturn(shellDefinition2);
+ Mockito.when(processDefineMapper.queryByDefineName(testProject.getId(), "shell-5")).thenReturn(null);
+ Mockito.when(processDefineMapper.queryByDefineName(testProject.getId(), "shell-4")).thenReturn(null);
+ Mockito.when(processDefineMapper.queryByDefineName(testProject.getId(), "testProject")).thenReturn(shellDefinition2);
+
+ processDefinitionService.importSubProcess(loginUser,testProject,jsonArray,subProcessIdMap);
+
+ String correctSubJson = jsonArray.toString();
+
+ Assert.assertEquals(originSubJson, correctSubJson);
+
+ }
+
+ @Test
+ public void testImportProcessDefinitionById() throws IOException {
+
+ String processJson = "{\"projectName\":\"testProject\",\"processDefinitionName\":\"shell-4\"," +
+ "\"processDefinitionJson\":\"{\\\"tenantId\\\":1,\\\"globalParams\\\":[]," +
+ "\\\"tasks\\\":[{\\\"workerGroupId\\\":-1,\\\"description\\\":\\\"\\\",\\\"runFlag\\\":\\\"NORMAL\\\"," +
+ "\\\"type\\\":\\\"SHELL\\\",\\\"params\\\":{\\\"rawScript\\\":\\\"#!/bin/bash\\\\necho \\\\\\\"shell-4\\\\\\\"\\\"," +
+ "\\\"localParams\\\":[],\\\"resourceList\\\":[]},\\\"timeout\\\":{\\\"enable\\\":false,\\\"strategy\\\":\\\"\\\"}," +
+ "\\\"maxRetryTimes\\\":\\\"0\\\",\\\"taskInstancePriority\\\":\\\"MEDIUM\\\",\\\"name\\\":\\\"shell-4\\\"," +
+ "\\\"dependence\\\":{},\\\"retryInterval\\\":\\\"1\\\",\\\"preTasks\\\":[],\\\"id\\\":\\\"tasks-84090\\\"}," +
+ "{\\\"taskInstancePriority\\\":\\\"MEDIUM\\\",\\\"name\\\":\\\"shell-5\\\",\\\"workerGroupId\\\":-1," +
+ "\\\"description\\\":\\\"\\\",\\\"dependence\\\":{},\\\"preTasks\\\":[\\\"shell-4\\\"],\\\"id\\\":\\\"tasks-87364\\\"," +
+ "\\\"runFlag\\\":\\\"NORMAL\\\",\\\"type\\\":\\\"SUB_PROCESS\\\",\\\"params\\\":{\\\"processDefinitionId\\\":46}," +
+ "\\\"timeout\\\":{\\\"enable\\\":false,\\\"strategy\\\":\\\"\\\"}}],\\\"timeout\\\":0}\"," +
+ "\"processDefinitionDescription\":\"\",\"processDefinitionLocations\":\"{\\\"tasks-84090\\\":{\\\"name\\\":\\\"shell-4\\\"," +
+ "\\\"targetarr\\\":\\\"\\\",\\\"x\\\":128,\\\"y\\\":114},\\\"tasks-87364\\\":{\\\"name\\\":\\\"shell-5\\\"," +
+ "\\\"targetarr\\\":\\\"tasks-84090\\\",\\\"x\\\":266,\\\"y\\\":115}}\"," +
+ "\"processDefinitionConnects\":\"[{\\\"endPointSourceId\\\":\\\"tasks-84090\\\"," +
+ "\\\"endPointTargetId\\\":\\\"tasks-87364\\\"}]\"}";
+
+ String subProcessJson = "{\"globalParams\":[]," +
+ "\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-52423\",\"name\":\"shell-5\"," +
+ "\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"echo \\\"shell-5\\\"\"},\"description\":\"\"," +
+ "\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\"," +
+ "\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false},\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1," +
+ "\"preTasks\":[]}],\"tenantId\":1,\"timeout\":0}";
+
+ FileUtils.writeStringToFile(new File("/tmp/task.json"),processJson);
+
+ File file = new File("/tmp/task.json");
+
+ FileInputStream fileInputStream = new FileInputStream("/tmp/task.json");
+
+ MultipartFile multipartFile = new MockMultipartFile(file.getName(), file.getName(),
+ ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
+
+ User loginUser = new User();
+ loginUser.setId(1);
+ loginUser.setUserType(UserType.ADMIN_USER);
+
+ String currentProjectName = "testProject";
+ Map result = new HashMap<>(5);
+ putMsg(result, Status.SUCCESS, currentProjectName);
+
+ ProcessDefinition shellDefinition2 = new ProcessDefinition();
+ shellDefinition2.setId(46);
+ shellDefinition2.setName("shell-5");
+ shellDefinition2.setProjectId(2);
+ shellDefinition2.setProcessDefinitionJson(subProcessJson);
+
+ Mockito.when(projectMapper.queryByName(currentProjectName)).thenReturn(getProject(currentProjectName));
+ Mockito.when(projectService.checkProjectAndAuth(loginUser, getProject(currentProjectName), currentProjectName)).thenReturn(result);
+ Mockito.when(processDefineMapper.queryByDefineId(46)).thenReturn(shellDefinition2);
+
+ //import process
+ Map importProcessResult = processDefinitionService.importProcessDefinition(loginUser, multipartFile, currentProjectName);
+
+ Assert.assertEquals(Status.SUCCESS, importProcessResult.get(Constants.STATUS));
+
+ boolean delete = file.delete();
+
+ Assert.assertTrue(delete);
+
+
+ }
+
+ /**
+ * get mock datasource
+ * @return DataSource
+ */
+ private DataSource getDataSource(){
+ DataSource dataSource = new DataSource();
+ dataSource.setId(2);
+ dataSource.setName("test");
+ return dataSource;
+ }
+
+ /**
+ * get mock processDefinition
+ * @return ProcessDefinition
+ */
+ private ProcessDefinition getProcessDefinition(){
+ ProcessDefinition processDefinition = new ProcessDefinition();
+ processDefinition.setId(46);
+ processDefinition.setName("testProject");
+ processDefinition.setProjectId(2);
+ return processDefinition;
+ }
+
+ /**
+ * get mock Project
+ * @param projectName projectName
+ * @return Project
+ */
+ private Project getProject(String projectName){
+ Project project = new Project();
+ project.setId(1);
+ project.setName(projectName);
+ project.setUserId(1);
+ return project;
+ }
+
+ private void putMsg(Map result, Status status, Object... statusParams) {
+ result.put(Constants.STATUS, status);
+ if (statusParams != null && statusParams.length > 0) {
+ result.put(Constants.MSG, MessageFormat.format(status.getMsg(), statusParams));
+ } else {
+ result.put(Constants.MSG, status.getMsg());
+ }
+ }
}
\ No newline at end of file
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java
index 8e94ccac52..c0caaaaa71 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java
@@ -16,38 +16,601 @@
*/
package org.apache.dolphinscheduler.api.service;
-import org.apache.dolphinscheduler.api.ApiApplicationServer;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.utils.PageInfo;
+import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.ResourceType;
import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.common.utils.CollectionUtils;
+import org.apache.dolphinscheduler.common.utils.FileUtils;
+import org.apache.dolphinscheduler.common.utils.HadoopUtils;
+import org.apache.dolphinscheduler.common.utils.PropertyUtils;
+import org.apache.dolphinscheduler.dao.entity.Resource;
+import org.apache.dolphinscheduler.dao.entity.Tenant;
+import org.apache.dolphinscheduler.dao.entity.UdfFunc;
import org.apache.dolphinscheduler.dao.entity.User;
+import org.apache.dolphinscheduler.dao.mapper.*;
import org.junit.Assert;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.mock.web.MockMultipartFile;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = ApiApplicationServer.class)
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({HadoopUtils.class,PropertyUtils.class, FileUtils.class,org.apache.dolphinscheduler.api.utils.FileUtils.class})
public class ResourcesServiceTest {
private static final Logger logger = LoggerFactory.getLogger(ResourcesServiceTest.class);
- @Autowired
+ @InjectMocks
private ResourcesService resourcesService;
+ @Mock
+ private ResourceMapper resourcesMapper;
+ @Mock
+ private TenantMapper tenantMapper;
+ @Mock
+ private ResourceUserMapper resourceUserMapper;
+ @Mock
+ private HadoopUtils hadoopUtils;
+ @Mock
+ private UserMapper userMapper;
+ @Mock
+ private UdfFuncMapper udfFunctionMapper;
+
+ @Before
+ public void setUp() {
+
+ PowerMockito.mockStatic(HadoopUtils.class);
+ PowerMockito.mockStatic(FileUtils.class);
+ PowerMockito.mockStatic(org.apache.dolphinscheduler.api.utils.FileUtils.class);
+ try {
+ // new HadoopUtils
+ PowerMockito.whenNew(HadoopUtils.class).withNoArguments().thenReturn(hadoopUtils);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ PowerMockito.when(HadoopUtils.getInstance()).thenReturn(hadoopUtils);
+ PowerMockito.mockStatic(PropertyUtils.class);
+ }
+
+ @Test
+ public void testCreateResource(){
+
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(false);
+ User user = new User();
+ //HDFS_NOT_STARTUP
+ Result result = resourcesService.createResource(user,"ResourcesServiceTest","ResourcesServiceTest",ResourceType.FILE,null);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.HDFS_NOT_STARTUP.getMsg(),result.getMsg());
+
+ //RESOURCE_FILE_IS_EMPTY
+ MockMultipartFile mockMultipartFile = new MockMultipartFile("test.pdf",new String().getBytes());
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+ result = resourcesService.createResource(user,"ResourcesServiceTest","ResourcesServiceTest",ResourceType.FILE,mockMultipartFile);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_FILE_IS_EMPTY.getMsg(),result.getMsg());
+
+ //RESOURCE_SUFFIX_FORBID_CHANGE
+ mockMultipartFile = new MockMultipartFile("test.pdf","test.pdf","pdf",new String("test").getBytes());
+ PowerMockito.when(FileUtils.suffix("test.pdf")).thenReturn("pdf");
+ PowerMockito.when(FileUtils.suffix("ResourcesServiceTest.jar")).thenReturn("jar");
+ result = resourcesService.createResource(user,"ResourcesServiceTest.jar","ResourcesServiceTest",ResourceType.FILE,mockMultipartFile);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_SUFFIX_FORBID_CHANGE.getMsg(),result.getMsg());
+
+ //UDF_RESOURCE_SUFFIX_NOT_JAR
+ mockMultipartFile = new MockMultipartFile("ResourcesServiceTest.pdf","ResourcesServiceTest.pdf","pdf",new String("test").getBytes());
+ result = resourcesService.createResource(user,"ResourcesServiceTest.pdf","ResourcesServiceTest",ResourceType.UDF,mockMultipartFile);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.UDF_RESOURCE_SUFFIX_NOT_JAR.getMsg(),result.getMsg());
+
+
+ //UDF_RESOURCE_SUFFIX_NOT_JAR
+ Mockito.when(tenantMapper.queryById(0)).thenReturn(getTenant());
+ Mockito.when(resourcesMapper.queryResourceList("ResourcesServiceTest.jar", 0, 1)).thenReturn(getResourceList());
+ mockMultipartFile = new MockMultipartFile("ResourcesServiceTest.jar","ResourcesServiceTest.jar","pdf",new String("test").getBytes());
+ result = resourcesService.createResource(user,"ResourcesServiceTest.jar","ResourcesServiceTest",ResourceType.UDF,mockMultipartFile);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_EXIST.getMsg(),result.getMsg());
+
+ //SUCCESS
+ Mockito.when(resourcesMapper.queryResourceList("ResourcesServiceTest.jar", 0, 1)).thenReturn(new ArrayList<>());
+ result = resourcesService.createResource(user,"ResourcesServiceTest.jar","ResourcesServiceTest",ResourceType.UDF,mockMultipartFile);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS.getMsg(),result.getMsg());
+
+ }
+
+ @Test
+ public void testUpdateResource(){
+
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(false);
+ User user = new User();
+ //HDFS_NOT_STARTUP
+ Result result = resourcesService.updateResource(user,1,"ResourcesServiceTest","ResourcesServiceTest",ResourceType.FILE);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.HDFS_NOT_STARTUP.getMsg(),result.getMsg());
+
+ //RESOURCE_NOT_EXIST
+ Mockito.when(resourcesMapper.selectById(1)).thenReturn(getResource());
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+ result = resourcesService.updateResource(user,0,"ResourcesServiceTest","ResourcesServiceTest",ResourceType.FILE);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(),result.getMsg());
+
+ //USER_NO_OPERATION_PERM
+ result = resourcesService.updateResource(user,1,"ResourcesServiceTest","ResourcesServiceTest",ResourceType.FILE);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.USER_NO_OPERATION_PERM.getMsg(),result.getMsg());
+
+ //SUCCESS
+ user.setId(1);
+ result = resourcesService.updateResource(user,1,"ResourcesServiceTest.jar","ResourcesServiceTest.jar",ResourceType.FILE);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS.getMsg(),result.getMsg());
+
+ //RESOURCE_EXIST
+ Mockito.when(resourcesMapper.queryResourceList("ResourcesServiceTest1.jar", 0, 0)).thenReturn(getResourceList());
+ result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest1.jar",ResourceType.FILE);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_EXIST.getMsg(),result.getMsg());
+ //USER_NOT_EXIST
+ result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest1.jar",ResourceType.UDF);
+ logger.info(result.toString());
+ Assert.assertTrue(Status.USER_NOT_EXIST.getCode() == result.getCode());
+
+ //TENANT_NOT_EXIST
+ Mockito.when(userMapper.queryDetailsById(1)).thenReturn(getUser());
+ result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest1.jar",ResourceType.UDF);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.TENANT_NOT_EXIST.getMsg(),result.getMsg());
+
+ //RESOURCE_NOT_EXIST
+ Mockito.when(tenantMapper.queryById(1)).thenReturn(getTenant());
+ PowerMockito.when(HadoopUtils.getHdfsFilename(Mockito.any(), Mockito.any())).thenReturn("test1");
+
+ try {
+ Mockito.when(hadoopUtils.exists("test")).thenReturn(true);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest1.jar",ResourceType.UDF);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(),result.getMsg());
+
+ //SUCCESS
+ PowerMockito.when(HadoopUtils.getHdfsFilename(Mockito.any(), Mockito.any())).thenReturn("test");
+ result = resourcesService.updateResource(user,1,"ResourcesServiceTest1.jar","ResourcesServiceTest1.jar",ResourceType.UDF);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS.getMsg(),result.getMsg());
+
+ }
+
+ @Test
+ public void testQueryResourceListPaging(){
+ User loginUser = new User();
+ loginUser.setUserType(UserType.ADMIN_USER);
+ IPage resourcePage = new Page<>(1,10);
+ resourcePage.setTotal(1);
+ resourcePage.setRecords(getResourceList());
+ Mockito.when(resourcesMapper.queryResourcePaging(Mockito.any(Page.class),
+ Mockito.eq(0), Mockito.eq(0), Mockito.eq("test"))).thenReturn(resourcePage);
+ Map result = resourcesService.queryResourceListPaging(loginUser,ResourceType.FILE,"test",1,10);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ PageInfo pageInfo = (PageInfo) result.get(Constants.DATA_LIST);
+ Assert.assertTrue(CollectionUtils.isNotEmpty(pageInfo.getLists()));
+
+ }
+
+ @Test
+ public void testQueryResourceList(){
+ User loginUser = new User();
+ loginUser.setId(0);
+ loginUser.setUserType(UserType.ADMIN_USER);
+ Mockito.when(resourcesMapper.queryResourceListAuthored(0, 0)).thenReturn(getResourceList());
+ Map result = resourcesService.queryResourceList(loginUser, ResourceType.FILE);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ List resourceList = (List) result.get(Constants.DATA_LIST);
+ Assert.assertTrue(CollectionUtils.isNotEmpty(resourceList));
+ }
@Test
- public void querytResourceList(){
+ public void testDelete(){
+
User loginUser = new User();
- loginUser.setId(-1);
- loginUser.setUserType(UserType.GENERAL_USER);
+ loginUser.setId(0);
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(false);
+ Mockito.when(tenantMapper.queryById(1)).thenReturn(getTenant());
+
+ try {
+ // HDFS_NOT_STARTUP
+ Result result = resourcesService.delete(loginUser,1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.HDFS_NOT_STARTUP.getMsg(), result.getMsg());
+
+ //RESOURCE_NOT_EXIST
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+ Mockito.when(resourcesMapper.selectById(1)).thenReturn(getResource());
+ result = resourcesService.delete(loginUser,2);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(), result.getMsg());
+
+ // USER_NO_OPERATION_PERM
+ result = resourcesService.delete(loginUser,2);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(), result.getMsg());
+
+ //TENANT_NOT_EXIST
+ loginUser.setUserType(UserType.ADMIN_USER);
+ loginUser.setTenantId(2);
+ result = resourcesService.delete(loginUser,1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.TENANT_NOT_EXIST.getMsg(), result.getMsg());
+
+ //SUCCESS
+ loginUser.setTenantId(1);
+ Mockito.when(hadoopUtils.delete(Mockito.anyString(), Mockito.anyBoolean())).thenReturn(true);
+ result = resourcesService.delete(loginUser,1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
+
+ } catch (Exception e) {
+ logger.error("delete error",e);
+ Assert.assertTrue(false);
+ }
+ }
+
+ @Test
+ public void testVerifyResourceName(){
+
+ User user = new User();
+ user.setId(1);
+ Mockito.when(resourcesMapper.queryResourceList("test", 0, 0)).thenReturn(getResourceList());
+ Result result = resourcesService.verifyResourceName("test",ResourceType.FILE,user);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_EXIST.getMsg(), result.getMsg());
+
+ //TENANT_NOT_EXIST
+ Mockito.when(tenantMapper.queryById(1)).thenReturn(getTenant());
+ result = resourcesService.verifyResourceName("test1",ResourceType.FILE,user);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.TENANT_NOT_EXIST.getMsg(), result.getMsg());
+
+
+ //RESOURCE_FILE_EXIST
+ user.setTenantId(1);
+ try {
+ Mockito.when(hadoopUtils.exists("test")).thenReturn(true);
+ } catch (IOException e) {
+ logger.error("hadoop error",e);
+ }
+ PowerMockito.when(HadoopUtils.getHdfsFilename("123", "test1")).thenReturn("test");
+ result = resourcesService.verifyResourceName("test1",ResourceType.FILE,user);
+ logger.info(result.toString());
+ Assert.assertTrue(Status.RESOURCE_FILE_EXIST.getCode()==result.getCode());
+
+ //SUCCESS
+ result = resourcesService.verifyResourceName("test2",ResourceType.FILE,user);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
+
+ }
+
+ @Test
+ public void testReadResource(){
+
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(false);
+
+ //HDFS_NOT_STARTUP
+ Result result = resourcesService.readResource(1,1,10);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.HDFS_NOT_STARTUP.getMsg(),result.getMsg());
+
+ //RESOURCE_NOT_EXIST
+ Mockito.when(resourcesMapper.selectById(1)).thenReturn(getResource());
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+ result = resourcesService.readResource(2,1,10);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(),result.getMsg());
+
+
+ //RESOURCE_SUFFIX_NOT_SUPPORT_VIEW
+ PowerMockito.when(FileUtils.getResourceViewSuffixs()).thenReturn("class");
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+ result = resourcesService.readResource(1,1,10);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_SUFFIX_NOT_SUPPORT_VIEW.getMsg(),result.getMsg());
+
+ //USER_NOT_EXIST
+ PowerMockito.when(FileUtils.getResourceViewSuffixs()).thenReturn("jar");
+ PowerMockito.when(FileUtils.suffix("ResourcesServiceTest.jar")).thenReturn("jar");
+ result = resourcesService.readResource(1,1,10);
+ logger.info(result.toString());
+ Assert.assertTrue(Status.USER_NOT_EXIST.getCode()==result.getCode());
+
+
+ //TENANT_NOT_EXIST
+ Mockito.when(userMapper.queryDetailsById(1)).thenReturn(getUser());
+ result = resourcesService.readResource(1,1,10);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.TENANT_NOT_EXIST.getMsg(),result.getMsg());
+
+
+ //RESOURCE_FILE_NOT_EXIST
+ Mockito.when(tenantMapper.queryById(1)).thenReturn(getTenant());
+ try {
+ Mockito.when(hadoopUtils.exists(Mockito.anyString())).thenReturn(false);
+ } catch (IOException e) {
+ logger.error("hadoop error",e);
+ }
+ result = resourcesService.readResource(1,1,10);
+ logger.info(result.toString());
+ Assert.assertTrue(Status.RESOURCE_FILE_NOT_EXIST.getCode()==result.getCode());
+
+ //SUCCESS
+ try {
+ Mockito.when(hadoopUtils.exists(null)).thenReturn(true);
+ Mockito.when(hadoopUtils.catFile(null,1,10)).thenReturn(getContent());
+ } catch (IOException e) {
+ logger.error("hadoop error",e);
+ }
+ result = resourcesService.readResource(1,1,10);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS.getMsg(),result.getMsg());
- Map map = resourcesService.queryResourceList(loginUser, ResourceType.FILE);
- Assert.assertEquals(Status.SUCCESS, map.get(Constants.STATUS));
+
+ }
+
+ @Test
+ public void testOnlineCreateResource() {
+
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(false);
+ PowerMockito.when(HadoopUtils.getHdfsResDir("hdfsdDir")).thenReturn("hdfsDir");
+ PowerMockito.when(HadoopUtils.getHdfsUdfDir("udfDir")).thenReturn("udfDir");
+ User user = getUser();
+ //HDFS_NOT_STARTUP
+ Result result = resourcesService.onlineCreateResource(user,ResourceType.FILE,"test","jar","desc","content");
+ logger.info(result.toString());
+ Assert.assertEquals(Status.HDFS_NOT_STARTUP.getMsg(),result.getMsg());
+
+ //RESOURCE_SUFFIX_NOT_SUPPORT_VIEW
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+ PowerMockito.when(FileUtils.getResourceViewSuffixs()).thenReturn("class");
+ result = resourcesService.onlineCreateResource(user,ResourceType.FILE,"test","jar","desc","content");
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_SUFFIX_NOT_SUPPORT_VIEW.getMsg(),result.getMsg());
+
+ //RuntimeException
+ try {
+ PowerMockito.when(FileUtils.getResourceViewSuffixs()).thenReturn("jar");
+ Mockito.when(tenantMapper.queryById(1)).thenReturn(getTenant());
+ result = resourcesService.onlineCreateResource(user, ResourceType.FILE, "test", "jar", "desc", "content");
+ }catch (RuntimeException ex){
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(), ex.getMessage());
+ }
+
+ //SUCCESS
+ Mockito.when(FileUtils.getUploadFilename(Mockito.anyString(), Mockito.anyString())).thenReturn("test");
+ PowerMockito.when(FileUtils.writeContent2File(Mockito.anyString(), Mockito.anyString())).thenReturn(true);
+ result = resourcesService.onlineCreateResource(user,ResourceType.FILE,"test","jar","desc","content");
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS.getMsg(),result.getMsg());
+
+
+ }
+
+ @Test
+ public void testUpdateResourceContent(){
+
+ User loginUser = new User();
+ loginUser.setId(0);
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(false);
+
+ // HDFS_NOT_STARTUP
+ Result result = resourcesService.updateResourceContent(1,"content");
+ logger.info(result.toString());
+ Assert.assertEquals(Status.HDFS_NOT_STARTUP.getMsg(), result.getMsg());
+
+ //RESOURCE_NOT_EXIST
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+ Mockito.when(resourcesMapper.selectById(1)).thenReturn(getResource());
+ result = resourcesService.updateResourceContent(2,"content");
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(), result.getMsg());
+
+ //RESOURCE_SUFFIX_NOT_SUPPORT_VIEW
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+ PowerMockito.when(FileUtils.getResourceViewSuffixs()).thenReturn("class");
+ result = resourcesService.updateResourceContent(1,"content");
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_SUFFIX_NOT_SUPPORT_VIEW.getMsg(),result.getMsg());
+
+ //USER_NOT_EXIST
+ PowerMockito.when(FileUtils.getResourceViewSuffixs()).thenReturn("jar");
+ PowerMockito.when(FileUtils.suffix("ResourcesServiceTest.jar")).thenReturn("jar");
+ result = resourcesService.updateResourceContent(1,"content");
+ logger.info(result.toString());
+ Assert.assertTrue(Status.USER_NOT_EXIST.getCode() == result.getCode());
+
+
+ //TENANT_NOT_EXIST
+ Mockito.when(userMapper.queryDetailsById(1)).thenReturn(getUser());
+ result = resourcesService.updateResourceContent(1,"content");
+ logger.info(result.toString());
+ Assert.assertTrue(Status.TENANT_NOT_EXIST.getCode() == result.getCode());
+
+ //SUCCESS
+ Mockito.when(tenantMapper.queryById(1)).thenReturn(getTenant());
+ Mockito.when(FileUtils.getUploadFilename(Mockito.anyString(), Mockito.anyString())).thenReturn("test");
+ PowerMockito.when(FileUtils.writeContent2File(Mockito.anyString(), Mockito.anyString())).thenReturn(true);
+ result = resourcesService.updateResourceContent(1,"content");
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
+ }
+
+ @Test
+ public void testDownloadResource(){
+
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+ Mockito.when(tenantMapper.queryById(1)).thenReturn(getTenant());
+ Mockito.when(userMapper.queryDetailsById(1)).thenReturn(getUser());
+ org.springframework.core.io.Resource resourceMock = Mockito.mock(org.springframework.core.io.Resource.class);
+ try {
+ //resource null
+ org.springframework.core.io.Resource resource = resourcesService.downloadResource(1);
+ Assert.assertNull(resource);
+
+ Mockito.when(resourcesMapper.selectById(1)).thenReturn(getResource());
+ PowerMockito.when(org.apache.dolphinscheduler.api.utils.FileUtils.file2Resource(Mockito.any())).thenReturn(resourceMock);
+ resource = resourcesService.downloadResource(1);
+ Assert.assertNotNull(resource);
+ } catch (Exception e) {
+ logger.error("DownloadResource error",e);
+ Assert.assertTrue(false);
+ }
+
+ }
+
+ @Test
+ public void testUnauthorizedFile(){
+ User user = getUser();
+ //USER_NO_OPERATION_PERM
+ Map result = resourcesService.unauthorizedFile(user,1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.USER_NO_OPERATION_PERM,result.get(Constants.STATUS));
+
+ //SUCCESS
+ user.setUserType(UserType.ADMIN_USER);
+ Mockito.when(resourcesMapper.queryResourceExceptUserId(1)).thenReturn(getResourceList());
+ result = resourcesService.unauthorizedFile(user,1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS));
+ List resources = (List) result.get(Constants.DATA_LIST);
+ Assert.assertTrue(CollectionUtils.isNotEmpty(resources));
+
+ }
+
+ @Test
+ public void testUnauthorizedUDFFunction(){
+
+ User user = getUser();
+ //USER_NO_OPERATION_PERM
+ Map result = resourcesService.unauthorizedUDFFunction(user,1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.USER_NO_OPERATION_PERM,result.get(Constants.STATUS));
+
+ //SUCCESS
+ user.setUserType(UserType.ADMIN_USER);
+ Mockito.when(udfFunctionMapper.queryUdfFuncExceptUserId(1)).thenReturn(getUdfFuncList());
+ result = resourcesService.unauthorizedUDFFunction(user,1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS));
+ List udfFuncs = (List) result.get(Constants.DATA_LIST);
+ Assert.assertTrue(CollectionUtils.isNotEmpty(udfFuncs));
+ }
+
+
+ @Test
+ public void testAuthorizedUDFFunction(){
+ User user = getUser();
+ //USER_NO_OPERATION_PERM
+ Map result = resourcesService.authorizedUDFFunction(user,1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.USER_NO_OPERATION_PERM,result.get(Constants.STATUS));
+ //SUCCESS
+ user.setUserType(UserType.ADMIN_USER);
+ Mockito.when(udfFunctionMapper.queryAuthedUdfFunc(1)).thenReturn(getUdfFuncList());
+ result = resourcesService.authorizedUDFFunction(user,1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS));
+ List udfFuncs = (List) result.get(Constants.DATA_LIST);
+ Assert.assertTrue(CollectionUtils.isNotEmpty(udfFuncs));
+ }
+
+ @Test
+ public void testAuthorizedFile(){
+
+ User user = getUser();
+ //USER_NO_OPERATION_PERM
+ Map result = resourcesService.authorizedFile(user,1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.USER_NO_OPERATION_PERM,result.get(Constants.STATUS));
+ //SUCCESS
+ user.setUserType(UserType.ADMIN_USER);
+ Mockito.when(resourcesMapper.queryAuthorizedResourceList(1)).thenReturn(getResourceList());
+ result = resourcesService.authorizedFile(user,1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS));
+ List resources = (List) result.get(Constants.DATA_LIST);
+ Assert.assertTrue(CollectionUtils.isNotEmpty(resources));
+ }
+
+
+ private List getResourceList(){
+
+ List resources = new ArrayList<>();
+ resources.add(getResource());
+ return resources;
+ }
+
+
+ private Tenant getTenant() {
+ Tenant tenant = new Tenant();
+ tenant.setTenantCode("123");
+ return tenant;
+ }
+
+ private Resource getResource(){
+
+ Resource resource = new Resource();
+ resource.setUserId(1);
+ resource.setDescription("ResourcesServiceTest.jar");
+ resource.setAlias("ResourcesServiceTest.jar");
+ resource.setType(ResourceType.FILE);
+ return resource;
+ }
+
+ private UdfFunc getUdfFunc(){
+
+ UdfFunc udfFunc = new UdfFunc();
+ udfFunc.setId(1);
+ return udfFunc;
+ }
+
+ private List getUdfFuncList(){
+
+ List udfFuncs = new ArrayList<>();
+ udfFuncs.add(getUdfFunc());
+ return udfFuncs;
+ }
+
+ private User getUser(){
+ User user = new User();
+ user.setId(1);
+ user.setTenantId(1);
+ return user;
+ }
+ private List getContent(){
+ List contentList = new ArrayList<>();
+ contentList.add("test");
+ return contentList;
}
}
\ No newline at end of file
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/SessionServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/SessionServiceTest.java
index 72545a347c..7e98721207 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/SessionServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/SessionServiceTest.java
@@ -16,10 +16,11 @@
*/
package org.apache.dolphinscheduler.api.service;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.time.DateUtils;
+import java.util.Calendar;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.common.utils.DateUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.Session;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.SessionMapper;
@@ -121,6 +122,9 @@ public class SessionServiceTest {
String ip = "127.0.0.1";
User user = new User();
user.setId(userId);
+
+ Mockito.when(sessionMapper.queryByUserIdAndIp(userId,ip)).thenReturn(getSession());
+
sessionService.signOut(ip ,user);
}
@@ -130,7 +134,7 @@ public class SessionServiceTest {
Session session = new Session();
session.setId(sessionId);
session.setIp("127.0.0.1");
- session.setLastLoginTime(DateUtils.addDays(new Date(),40));
+ session.setLastLoginTime(DateUtils.add(new Date(), Calendar.DAY_OF_MONTH, 40));
session.setUserId(1);
return session;
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/ClickHouseDataSource.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/ClickHouseDataSource.java
index dfcda99141..457ddb0a1d 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/ClickHouseDataSource.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/ClickHouseDataSource.java
@@ -66,7 +66,6 @@ public class ClickHouseDataSource extends BaseDataSource {
con.close();
} catch (SQLException e) {
logger.error("ClickHouse datasource try conn close conn error", e);
- throw e;
}
}
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/DB2ServerDataSource.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/DB2ServerDataSource.java
index e6d7b94b51..44ee200c5d 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/DB2ServerDataSource.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/DB2ServerDataSource.java
@@ -66,7 +66,6 @@ public class DB2ServerDataSource extends BaseDataSource {
con.close();
} catch (SQLException e) {
logger.error("DB2 Server datasource try conn close conn error", e);
- throw e;
}
}
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/HiveDataSource.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/HiveDataSource.java
index 2970354e6b..101efae793 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/HiveDataSource.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/HiveDataSource.java
@@ -69,7 +69,6 @@ public class HiveDataSource extends BaseDataSource {
con.close();
} catch (SQLException e) {
logger.error("hive datasource try conn close conn error", e);
- throw e;
}
}
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/MySQLDataSource.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/MySQLDataSource.java
index f50de0dee3..3cf2b2ce8c 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/MySQLDataSource.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/MySQLDataSource.java
@@ -64,7 +64,6 @@ public class MySQLDataSource extends BaseDataSource {
con.close();
} catch (SQLException e) {
logger.error("Mysql datasource try conn close conn error", e);
- throw e;
}
}
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/OracleDataSource.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/OracleDataSource.java
index ddc30d939a..551c7823cb 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/OracleDataSource.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/OracleDataSource.java
@@ -66,7 +66,6 @@ public class OracleDataSource extends BaseDataSource {
con.close();
} catch (SQLException e) {
logger.error("Oracle datasource try conn close conn error", e);
- throw e;
}
}
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/PostgreDataSource.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/PostgreDataSource.java
index ecc29c73e8..5241b4c7ef 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/PostgreDataSource.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/PostgreDataSource.java
@@ -68,7 +68,6 @@ public class PostgreDataSource extends BaseDataSource {
con.close();
} catch (SQLException e) {
logger.error("Postgre datasource try conn close conn error", e);
- throw e;
}
}
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/SQLServerDataSource.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/SQLServerDataSource.java
index 7a51ff7a45..fe398eb88b 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/SQLServerDataSource.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/SQLServerDataSource.java
@@ -62,7 +62,6 @@ public class SQLServerDataSource extends BaseDataSource {
con.close();
} catch (SQLException e) {
logger.error("SQL Server datasource try conn close conn error", e);
- throw e;
}
}
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/SparkDataSource.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/SparkDataSource.java
index 638664c47d..eb455124de 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/SparkDataSource.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/job/db/SparkDataSource.java
@@ -71,7 +71,6 @@ public class SparkDataSource extends BaseDataSource {
con.close();
} catch (SQLException e) {
logger.error("Spark datasource try conn close conn error", e);
- throw e;
}
}
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java
index e3bca6ecbf..3519d5c535 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java
@@ -59,4 +59,5 @@ public class DateInterval {
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
+
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/TaskNodeRelation.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/TaskNodeRelation.java
index 91436399c5..2fbc0e1654 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/TaskNodeRelation.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/TaskNodeRelation.java
@@ -53,6 +53,7 @@ public class TaskNodeRelation {
}
+ @Override
public boolean equals(Object o){
if (!(o instanceof TaskNodeRelation)) {
return false;
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/queue/TaskQueueZkImpl.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/queue/TaskQueueZkImpl.java
index 45c6122341..8f5677d1b9 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/queue/TaskQueueZkImpl.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/queue/TaskQueueZkImpl.java
@@ -37,8 +37,27 @@ public class TaskQueueZkImpl implements ITaskQueue {
private static final Logger logger = LoggerFactory.getLogger(TaskQueueZkImpl.class);
+ private final ZookeeperOperator zookeeperOperator;
+
@Autowired
- private ZookeeperOperator zookeeperOperator;
+ public TaskQueueZkImpl(ZookeeperOperator zookeeperOperator) {
+ this.zookeeperOperator = zookeeperOperator;
+
+ try {
+ String tasksQueuePath = getTasksPath(Constants.DOLPHINSCHEDULER_TASKS_QUEUE);
+ String tasksKillPath = getTasksPath(Constants.DOLPHINSCHEDULER_TASKS_KILL);
+
+ for (String key : new String[]{tasksQueuePath,tasksKillPath}){
+ if (!zookeeperOperator.isExisted(key)){
+ zookeeperOperator.persist(key, "");
+ logger.info("create tasks queue parent node success : {}", key);
+ }
+ }
+ } catch (Exception e) {
+ logger.error("create tasks queue parent node failure", e);
+ }
+ }
+
/**
* get all tasks from tasks queue
@@ -321,20 +340,20 @@ public class TaskQueueZkImpl implements ITaskQueue {
public void delete(){
try {
String tasksQueuePath = getTasksPath(Constants.DOLPHINSCHEDULER_TASKS_QUEUE);
- String tasksCancelPath = getTasksPath(Constants.DOLPHINSCHEDULER_TASKS_KILL);
+ String tasksKillPath = getTasksPath(Constants.DOLPHINSCHEDULER_TASKS_KILL);
- for(String taskQueuePath : new String[]{tasksQueuePath,tasksCancelPath}){
- if(zookeeperOperator.isExisted(taskQueuePath)){
- List list = zookeeperOperator.getChildrenKeys(taskQueuePath);
+ for (String key : new String[]{tasksQueuePath,tasksKillPath}){
+ if (zookeeperOperator.isExisted(key)){
+ List list = zookeeperOperator.getChildrenKeys(key);
for (String task : list) {
- zookeeperOperator.remove(taskQueuePath + Constants.SINGLE_SLASH + task);
- logger.info("delete task from tasks queue : {}/{} ",taskQueuePath,task);
+ zookeeperOperator.remove(key + Constants.SINGLE_SLASH + task);
+ logger.info("delete task from tasks queue : {}/{} ", key, task);
}
}
}
} catch (Exception e) {
- logger.error("delete all tasks in tasks queue failure",e);
+ logger.error("delete all tasks in tasks queue failure", e);
}
}
@@ -344,7 +363,7 @@ public class TaskQueueZkImpl implements ITaskQueue {
* @return
*/
public String getTasksPath(String key){
- return "/dolphinscheduler" + Constants.SINGLE_SLASH + key;
+ return zookeeperOperator.getZookeeperConfig().getDsRoot() + Constants.SINGLE_SLASH + key;
}
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ArrayUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ArrayUtils.java
new file mode 100644
index 0000000000..163c56bbcc
--- /dev/null
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ArrayUtils.java
@@ -0,0 +1,26 @@
+/*
+ * 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.utils;
+
+
+public class ArrayUtils {
+
+ public static boolean isEmpty(final int[] array) {
+ return array == null || array.length == 0;
+ }
+}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ConnectionUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ConnectionUtils.java
index 2bbb45b64c..c1c3ff5d57 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ConnectionUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ConnectionUtils.java
@@ -51,7 +51,6 @@ public class ConnectionUtils {
}
} catch (SQLException e) {
logger.error(e.getMessage(),e);
- throw new RuntimeException(e);
} finally {
try {
if (stmt != null) {
@@ -60,7 +59,6 @@ public class ConnectionUtils {
}
} catch (SQLException e) {
logger.error(e.getMessage(),e);
- throw new RuntimeException(e);
} finally {
try {
if (conn != null) {
@@ -69,7 +67,6 @@ public class ConnectionUtils {
}
} catch (SQLException e) {
logger.error(e.getMessage(),e);
- throw new RuntimeException(e);
}
}
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
index 3455d5344c..ec060d486b 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
@@ -1,397 +1 @@
-/*
- * 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.utils;
-
-import org.apache.dolphinscheduler.common.Constants;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.text.SimpleDateFormat;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.Calendar;
-import java.util.Date;
-
-/**
- * date utils
- */
-public class DateUtils {
-
- private static final Logger logger = LoggerFactory.getLogger(DateUtils.class);
-
- /**
- * date to local datetime
- *
- * @param date date
- * @return local datetime
- */
- private static LocalDateTime date2LocalDateTime(Date date) {
- return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
- }
-
- /**
- * local datetime to date
- *
- * @param localDateTime local datetime
- * @return date
- */
- private static Date localDateTime2Date(LocalDateTime localDateTime) {
- Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
- return Date.from(instant);
- }
-
- /**
- * get current date str
- *
- * @return date string
- */
- public static String getCurrentTime() {
- return getCurrentTime(Constants.YYYY_MM_DD_HH_MM_SS);
- }
-
- /**
- * get the date string in the specified format of the current time
- *
- * @param format date format
- * @return date string
- */
- public static String getCurrentTime(String format) {
- return LocalDateTime.now().format(DateTimeFormatter.ofPattern(format));
- }
-
- /**
- * get the formatted date string
- *
- * @param date date
- * @param format e.g. yyyy-MM-dd HH:mm:ss
- * @return date string
- */
- public static String format(Date date, String format) {
- return format(date2LocalDateTime(date), format);
- }
-
- /**
- * get the formatted date string
- *
- * @param localDateTime local data time
- * @param format yyyy-MM-dd HH:mm:ss
- * @return date string
- */
- public static String format(LocalDateTime localDateTime, String format) {
- return localDateTime.format(DateTimeFormatter.ofPattern(format));
- }
-
- /**
- * convert time to yyyy-MM-dd HH:mm:ss format
- *
- * @param date date
- * @return date string
- */
- public static String dateToString(Date date) {
- return format(date, Constants.YYYY_MM_DD_HH_MM_SS);
- }
-
-
- /**
- * convert string to date and time
- *
- * @param date date
- * @param format format
- * @return date
- */
- public static Date parse(String date, String format) {
- try {
- LocalDateTime ldt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(format));
- return localDateTime2Date(ldt);
- } catch (Exception e) {
- logger.error("error while parse date:" + date, e);
- }
- return null;
- }
-
-
- /**
- * convert date str to yyyy-MM-dd HH:mm:ss format
- *
- * @param str date string
- * @return yyyy-MM-dd HH:mm:ss format
- */
- public static Date stringToDate(String str) {
- return parse(str, Constants.YYYY_MM_DD_HH_MM_SS);
- }
-
- /**
- * get seconds between two dates
- *
- * @param d1 date1
- * @param d2 date2
- * @return differ seconds
- */
- public static long differSec(Date d1, Date d2) {
- if(d1 == null || d2 == null){
- return 0;
- }
- return (long) Math.ceil(differMs(d1, d2) / 1000.0);
- }
-
- /**
- * get ms between two dates
- *
- * @param d1 date1
- * @param d2 date2
- * @return differ ms
- */
- public static long differMs(Date d1, Date d2) {
- return Math.abs(d1.getTime() - d2.getTime());
- }
-
-
- /**
- * get hours between two dates
- *
- * @param d1 date1
- * @param d2 date2
- * @return differ hours
- */
- public static long diffHours(Date d1, Date d2) {
- return (long) Math.ceil(diffMin(d1, d2) / 60.0);
- }
-
- /**
- * get minutes between two dates
- *
- * @param d1 date1
- * @param d2 date2
- * @return differ minutes
- */
- public static long diffMin(Date d1, Date d2) {
- return (long) Math.ceil(differSec(d1, d2) / 60.0);
- }
-
-
- /**
- * get the date of the specified date in the days before and after
- *
- * @param date date
- * @param day day
- * @return the date of the specified date in the days before and after
- */
- public static Date getSomeDay(Date date, int day) {
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(date);
- calendar.add(Calendar.DATE, day);
- return calendar.getTime();
- }
-
- /**
- * compare two dates
- *
- * @param future future date
- * @param old old date
- * @return true if future time greater than old time
- */
- public static boolean compare(Date future, Date old) {
- return future.getTime() > old.getTime();
- }
-
- /**
- * convert schedule string to date
- *
- * @param schedule schedule
- * @return convert schedule string to date
- */
- public static Date getScheduleDate(String schedule) {
- return stringToDate(schedule);
- }
-
- /**
- * format time to readable
- *
- * @param ms ms
- * @return format time
- */
- public static String format2Readable(long ms) {
-
- long days = ms / (1000 * 60 * 60 * 24);
- long hours = (ms % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
- long minutes = (ms % (1000 * 60 * 60)) / (1000 * 60);
- long seconds = (ms % (1000 * 60)) / 1000;
-
- return String.format("%02d %02d:%02d:%02d", days, hours, minutes, seconds);
-
- }
-
- /**
- * get monday
- *
- * note: Set the first day of the week to Monday, the default is Sunday
- * @param date date
- * @return get monday
- */
- public static Date getMonday(Date date) {
- Calendar cal = Calendar.getInstance();
-
- cal.setTime(date);
-
- cal.setFirstDayOfWeek(Calendar.MONDAY);
- cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
-
- return cal.getTime();
- }
-
- /**
- * get sunday
- *
- * note: Set the first day of the week to Monday, the default is Sunday
- * @param date date
- * @return get sunday
- */
- public static Date getSunday(Date date) {
- Calendar cal = Calendar.getInstance();
- cal.setTime(date);
-
- cal.setFirstDayOfWeek(Calendar.MONDAY);
- cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
-
- return cal.getTime();
- }
-
- /**
- * get first day of month
- *
- * @param date date
- * @return first day of month
- * */
- public static Date getFirstDayOfMonth(Date date) {
- Calendar cal = Calendar.getInstance();
-
- cal.setTime(date);
- cal.set(Calendar.DAY_OF_MONTH, 1);
-
- return cal.getTime();
- }
-
- /**
- * get some hour of day
- *
- * @param date date
- * @param offsetHour hours
- * @return some hour of day
- * */
- public static Date getSomeHourOfDay(Date date, int offsetHour) {
- Calendar cal = Calendar.getInstance();
-
- cal.setTime(date);
- cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY) + offsetHour);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
-
- return cal.getTime();
- }
-
- /**
- * get last day of month
- *
- * @param date date
- * @return get last day of month
- */
- public static Date getLastDayOfMonth(Date date) {
- Calendar cal = Calendar.getInstance();
-
- cal.setTime(date);
-
- cal.add(Calendar.MONTH, 1);
- cal.set(Calendar.DAY_OF_MONTH, 1);
- cal.add(Calendar.DAY_OF_MONTH, -1);
-
- return cal.getTime();
- }
-
- /**
- * return YYYY-MM-DD 00:00:00
- *
- * @param inputDay date
- * @return start day
- */
- public static Date getStartOfDay(Date inputDay) {
- Calendar cal = Calendar.getInstance();
- cal.setTime(inputDay);
- cal.set(Calendar.HOUR_OF_DAY, 0);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- return cal.getTime();
- }
-
- /**
- * return YYYY-MM-DD 23:59:59
- *
- * @param inputDay day
- * @return end of day
- */
- public static Date getEndOfDay(Date inputDay) {
- Calendar cal = Calendar.getInstance();
- cal.setTime(inputDay);
- cal.set(Calendar.HOUR_OF_DAY, 23);
- cal.set(Calendar.MINUTE, 59);
- cal.set(Calendar.SECOND, 59);
- cal.set(Calendar.MILLISECOND, 999);
- return cal.getTime();
- }
-
- /**
- * return YYYY-MM-DD 00:00:00
- *
- * @param inputDay day
- * @return start of hour
- */
- public static Date getStartOfHour(Date inputDay) {
- Calendar cal = Calendar.getInstance();
- cal.setTime(inputDay);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- return cal.getTime();
- }
-
- /**
- * return YYYY-MM-DD 23:59:59
- *
- * @param inputDay day
- * @return end of hour
- */
- public static Date getEndOfHour(Date inputDay) {
- Calendar cal = Calendar.getInstance();
- cal.setTime(inputDay);
- cal.set(Calendar.MINUTE, 59);
- cal.set(Calendar.SECOND, 59);
- cal.set(Calendar.MILLISECOND, 999);
- return cal.getTime();
- }
-
- /**
- * get current date
- * @return current date
- */
- public static Date getCurrentDate() {
- return DateUtils.parse(DateUtils.getCurrentTime(),
- Constants.YYYY_MM_DD_HH_MM_SS);
- }
-}
+/*
* 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.utils;
import org.apache.dolphinscheduler.common.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
/**
* date utils
*/
public class DateUtils {
private static final Logger logger = LoggerFactory.getLogger(DateUtils.class);
/**
* date to local datetime
*
* @param date date
* @return local datetime
*/
private static LocalDateTime date2LocalDateTime(Date date) {
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
}
/**
* local datetime to date
*
* @param localDateTime local datetime
* @return date
*/
private static Date localDateTime2Date(LocalDateTime localDateTime) {
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
return Date.from(instant);
}
/**
* get current date str
*
* @return date string
*/
public static String getCurrentTime() {
return getCurrentTime(Constants.YYYY_MM_DD_HH_MM_SS);
}
/**
* get the date string in the specified format of the current time
*
* @param format date format
* @return date string
*/
public static String getCurrentTime(String format) {
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(format));
}
/**
* get the formatted date string
*
* @param date date
* @param format e.g. yyyy-MM-dd HH:mm:ss
* @return date string
*/
public static String format(Date date, String format) {
return format(date2LocalDateTime(date), format);
}
/**
* get the formatted date string
*
* @param localDateTime local data time
* @param format yyyy-MM-dd HH:mm:ss
* @return date string
*/
public static String format(LocalDateTime localDateTime, String format) {
return localDateTime.format(DateTimeFormatter.ofPattern(format));
}
/**
* convert time to yyyy-MM-dd HH:mm:ss format
*
* @param date date
* @return date string
*/
public static String dateToString(Date date) {
return format(date, Constants.YYYY_MM_DD_HH_MM_SS);
}
/**
* convert string to date and time
*
* @param date date
* @param format format
* @return date
*/
public static Date parse(String date, String format) {
try {
LocalDateTime ldt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(format));
return localDateTime2Date(ldt);
} catch (Exception e) {
logger.error("error while parse date:" + date, e);
}
return null;
}
/**
* convert date str to yyyy-MM-dd HH:mm:ss format
*
* @param str date string
* @return yyyy-MM-dd HH:mm:ss format
*/
public static Date stringToDate(String str) {
return parse(str, Constants.YYYY_MM_DD_HH_MM_SS);
}
/**
* get seconds between two dates
*
* @param d1 date1
* @param d2 date2
* @return differ seconds
*/
public static long differSec(Date d1, Date d2) {
if(d1 == null || d2 == null){
return 0;
}
return (long) Math.ceil(differMs(d1, d2) / 1000.0);
}
/**
* get ms between two dates
*
* @param d1 date1
* @param d2 date2
* @return differ ms
*/
public static long differMs(Date d1, Date d2) {
return Math.abs(d1.getTime() - d2.getTime());
}
/**
* get hours between two dates
*
* @param d1 date1
* @param d2 date2
* @return differ hours
*/
public static long diffHours(Date d1, Date d2) {
return (long) Math.ceil(diffMin(d1, d2) / 60.0);
}
/**
* get minutes between two dates
*
* @param d1 date1
* @param d2 date2
* @return differ minutes
*/
public static long diffMin(Date d1, Date d2) {
return (long) Math.ceil(differSec(d1, d2) / 60.0);
}
/**
* get the date of the specified date in the days before and after
*
* @param date date
* @param day day
* @return the date of the specified date in the days before and after
*/
public static Date getSomeDay(Date date, int day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, day);
return calendar.getTime();
}
/**
* compare two dates
*
* @param future future date
* @param old old date
* @return true if future time greater than old time
*/
public static boolean compare(Date future, Date old) {
return future.getTime() > old.getTime();
}
/**
* convert schedule string to date
*
* @param schedule schedule
* @return convert schedule string to date
*/
public static Date getScheduleDate(String schedule) {
return stringToDate(schedule);
}
/**
* format time to readable
*
* @param ms ms
* @return format time
*/
public static String format2Readable(long ms) {
long days = ms / (1000 * 60 * 60 * 24);
long hours = (ms % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
long minutes = (ms % (1000 * 60 * 60)) / (1000 * 60);
long seconds = (ms % (1000 * 60)) / 1000;
return String.format("%02d %02d:%02d:%02d", days, hours, minutes, seconds);
}
/**
* get monday
*
* note: Set the first day of the week to Monday, the default is Sunday
* @param date date
* @return get monday
*/
public static Date getMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return cal.getTime();
}
/**
* get sunday
*
* note: Set the first day of the week to Monday, the default is Sunday
* @param date date
* @return get sunday
*/
public static Date getSunday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
return cal.getTime();
}
/**
* get first day of month
*
* @param date date
* @return first day of month
* */
public static Date getFirstDayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}
/**
* get some hour of day
*
* @param date date
* @param offsetHour hours
* @return some hour of day
* */
public static Date getSomeHourOfDay(Date date, int offsetHour) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY) + offsetHour);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* get last day of month
*
* @param date date
* @return get last day of month
*/
public static Date getLastDayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.add(Calendar.DAY_OF_MONTH, -1);
return cal.getTime();
}
/**
* return YYYY-MM-DD 00:00:00
*
* @param inputDay date
* @return start day
*/
public static Date getStartOfDay(Date inputDay) {
Calendar cal = Calendar.getInstance();
cal.setTime(inputDay);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* return YYYY-MM-DD 23:59:59
*
* @param inputDay day
* @return end of day
*/
public static Date getEndOfDay(Date inputDay) {
Calendar cal = Calendar.getInstance();
cal.setTime(inputDay);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTime();
}
/**
* return YYYY-MM-DD 00:00:00
*
* @param inputDay day
* @return start of hour
*/
public static Date getStartOfHour(Date inputDay) {
Calendar cal = Calendar.getInstance();
cal.setTime(inputDay);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* return YYYY-MM-DD 23:59:59
*
* @param inputDay day
* @return end of hour
*/
public static Date getEndOfHour(Date inputDay) {
Calendar cal = Calendar.getInstance();
cal.setTime(inputDay);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTime();
}
/**
* get current date
* @return current date
*/
public static Date getCurrentDate() {
return DateUtils.parse(DateUtils.getCurrentTime(),
Constants.YYYY_MM_DD_HH_MM_SS);
}
/**
* get date
* @return result date
*/
public static Date add(final Date date, final int calendarField, final int amount) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
}
final Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(calendarField, amount);
return c.getTime();
}
}
\ No newline at end of file
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/EnumUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/EnumUtils.java
index dc2e3a0750..924e8ff719 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/EnumUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/EnumUtils.java
@@ -30,4 +30,16 @@ public class EnumUtils {
return null;
}
}
+
+ public static > boolean isValidEnum(final Class enumClass, final String enumName) {
+ if (enumName == null) {
+ return false;
+ }
+ try {
+ Enum.valueOf(enumClass, enumName);
+ return true;
+ } catch (final IllegalArgumentException ex) {
+ return false;
+ }
+ }
}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java
index 072266fb7f..afc3c44825 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java
@@ -116,9 +116,9 @@ public class HadoopUtils implements Closeable {
if(StringUtils.isNotBlank(defaultFSProp)){
Map fsRelatedProps = PropertyUtils.getPrefixedProperties("fs.");
configuration.set(Constants.FS_DEFAULTFS,defaultFSProp);
- fsRelatedProps.entrySet().stream().forEach(entry -> configuration.set(entry.getKey(), entry.getValue()));
+ fsRelatedProps.forEach((key, value) -> configuration.set(key, value));
}else{
- logger.error("property:{} can not to be empty, please set!");
+ logger.error("property:{} can not to be empty, please set!", Constants.FS_DEFAULTFS );
throw new RuntimeException("property:{} can not to be empty, please set!");
}
}else{
@@ -337,7 +337,6 @@ public class HadoopUtils implements Closeable {
* @throws Exception errors
*/
public FileStatus[] listFileStatus(String filePath)throws Exception{
- Path path = new Path(filePath);
try {
return fs.listStatus(new Path(filePath));
} catch (IOException e) {
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HttpUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HttpUtils.java
index 7bb93d8c46..c163dcab3d 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HttpUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HttpUtils.java
@@ -67,7 +67,7 @@ public class HttpUtils {
logger.warn("http entity is null");
}
}else{
- logger.error("htt get:{} response status code is not 200!");
+ logger.error("http get:{} response status code is not 200!", response.getStatusLine().getStatusCode());
}
}catch (Exception e){
logger.error(e.getMessage(),e);
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/IOUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/IOUtils.java
new file mode 100644
index 0000000000..73df158aa3
--- /dev/null
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/IOUtils.java
@@ -0,0 +1,45 @@
+
+/*
+ * 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.utils;
+
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+public class IOUtils {
+
+ public static void closeQuietly(InputStream fis){
+ if(fis != null){
+ try {
+ fis.close();
+ } catch (IOException ignore) {
+ }
+ }
+ }
+
+ public static void closeQuietly(InputStreamReader reader){
+ if(reader != null){
+ try {
+ reader.close();
+ } catch (IOException ignore) {
+ }
+ }
+ }
+}
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/StringUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/StringUtils.java
index 64dd4f3dcd..12b75fb0e5 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/StringUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/StringUtils.java
@@ -18,6 +18,8 @@ package org.apache.dolphinscheduler.common.utils;
import java.nio.charset.StandardCharsets;
+import java.util.Iterator;
+import java.util.Objects;
import java.util.regex.Pattern;
@@ -122,4 +124,32 @@ public class StringUtils {
}
return false;
}
+
+ public static String join(final Iterable> iterable, final String separator){
+ Iterator> iterator = iterable.iterator();
+ if (iterator == null) {
+ return null;
+ }
+ if (!iterator.hasNext()) {
+ return EMPTY;
+ }
+ final Object first = iterator.next();
+ if (!iterable.iterator().hasNext()) {
+ return Objects.toString(first, "");
+ }
+ final StringBuilder buf = new StringBuilder(64);
+ if (first != null) {
+ buf.append(first);
+ }
+ while (iterator.hasNext()) {
+ if (separator != null) {
+ buf.append(separator);
+ }
+ final Object obj = iterator.next();
+ if (obj != null) {
+ buf.append(obj);
+ }
+ }
+ return buf.toString();
+ }
}
diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DependentUtilsTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DependentUtilsTest.java
index 7311dcf5b6..43745c4e3c 100644
--- a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DependentUtilsTest.java
+++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DependentUtilsTest.java
@@ -34,18 +34,73 @@ public class DependentUtilsTest {
private static final Logger logger = LoggerFactory.getLogger(ShellExecutorTest.class);
@Test
public void getDependResultForRelation() {
-
+ //failed
DependentRelation dependentRelation = DependentRelation.AND;
List dependResultList = new ArrayList<>();
dependResultList.add(DependResult.FAILED);
dependResultList.add(DependResult.SUCCESS);
- DependResult result = DependentUtils.getDependResultForRelation( dependentRelation, dependResultList);
+ DependResult result = DependentUtils.getDependResultForRelation(dependentRelation, dependResultList);
+ Assert.assertEquals(result, DependResult.FAILED);
+
+ //waiting
+ dependResultList = new ArrayList<>();
+ dependResultList.add(DependResult.WAITING);
+ dependResultList.add(DependResult.SUCCESS);
+ result = DependentUtils.getDependResultForRelation(dependentRelation, dependResultList);
+ Assert.assertEquals(result, DependResult.WAITING);
+
+ //success
+ dependResultList = new ArrayList<>();
+ dependResultList.add(DependResult.SUCCESS);
+ dependResultList.add(DependResult.SUCCESS);
+ result = DependentUtils.getDependResultForRelation(dependentRelation, dependResultList);
+ Assert.assertEquals(result, DependResult.SUCCESS);
+
+ //one success
+ dependResultList = new ArrayList<>();
+ dependResultList.add(DependResult.SUCCESS);
+ result = DependentUtils.getDependResultForRelation(dependentRelation, dependResultList);
+ Assert.assertEquals(result, DependResult.SUCCESS);
+
+ //one failed
+ dependResultList = new ArrayList<>();
+ dependResultList.add(DependResult.FAILED);
+ result = DependentUtils.getDependResultForRelation(dependentRelation, dependResultList);
Assert.assertEquals(result, DependResult.FAILED);
+ //or success
dependentRelation = DependentRelation.OR;
+ dependResultList = new ArrayList<>();
+ dependResultList.add(DependResult.FAILED);
+ dependResultList.add(DependResult.SUCCESS);
+ result = DependentUtils.getDependResultForRelation(dependentRelation, dependResultList);
+ Assert.assertEquals(result, DependResult.SUCCESS);
+
+ //waiting
+ dependResultList = new ArrayList<>();
+ dependResultList.add(DependResult.WAITING);
+ dependResultList.add(DependResult.FAILED);
+ result = DependentUtils.getDependResultForRelation(dependentRelation, dependResultList);
+ Assert.assertEquals(result, DependResult.WAITING);
- Assert.assertEquals(DependentUtils.getDependResultForRelation( dependentRelation, dependResultList),
- DependResult.SUCCESS);
+ //success
+ dependResultList = new ArrayList<>();
+ dependResultList.add(DependResult.SUCCESS);
+ dependResultList.add(DependResult.SUCCESS);
+ result = DependentUtils.getDependResultForRelation(dependentRelation, dependResultList);
+ Assert.assertEquals(result, DependResult.SUCCESS);
+
+ //one success
+ dependResultList = new ArrayList<>();
+ dependResultList.add(DependResult.SUCCESS);
+ result = DependentUtils.getDependResultForRelation(dependentRelation, dependResultList);
+ Assert.assertEquals(result, DependResult.SUCCESS);
+
+ //one failed
+ dependResultList = new ArrayList<>();
+ dependResultList.add(DependResult.FAILED);
+ result = DependentUtils.getDependResultForRelation(dependentRelation, dependResultList);
+ Assert.assertEquals(result, DependResult.FAILED);
}
@Test
@@ -101,6 +156,115 @@ public class DependentUtilsTest {
Assert.assertEquals(dateIntervals.get(0), monthHead);
Assert.assertEquals(dateIntervals.get(dateIntervals.size() - 1), monthThis);
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-04 10:00:00"), "last1Hour");
+ DateInterval expect = new DateInterval(DateUtils.stringToDate("2019-02-04 09:00:00"),
+ DateUtils.getEndOfHour(DateUtils.stringToDate("2019-02-04 09:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-04 10:00:00"), "last2Hours");
+ expect = new DateInterval(DateUtils.stringToDate("2019-02-04 08:00:00"),
+ DateUtils.getEndOfHour(DateUtils.stringToDate("2019-02-04 08:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-04 10:00:00"), "last3Hours");
+ expect = new DateInterval(DateUtils.stringToDate("2019-02-04 07:00:00"),
+ DateUtils.getEndOfHour(DateUtils.stringToDate("2019-02-04 07:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+
+ dateValue = "last3Days";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-02-07 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-02-07 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+
+ dateValue = "last7Days";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-02-03 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-02-03 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+
+ dateValue = "lastWeek";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-01-28 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-01-28 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+ expect = new DateInterval(DateUtils.stringToDate("2019-02-03 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-02-03 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(6));
+ Assert.assertEquals(7, dateIntervals.size());
+
+ dateValue = "lastMonday";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-01-28 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-01-28 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+ Assert.assertEquals(1, dateIntervals.size());
+
+ dateValue = "lastTuesday";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-01-29 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-01-29 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+ Assert.assertEquals(1, dateIntervals.size());
+
+ dateValue = "lastWednesday";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-01-30 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-01-30 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+ Assert.assertEquals(1, dateIntervals.size());
+
+ dateValue = "lastThursday";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-01-31 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-01-31 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+ Assert.assertEquals(1, dateIntervals.size());
+
+ dateValue = "lastFriday";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-02-01 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-02-01 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+ Assert.assertEquals(1, dateIntervals.size());
+
+ dateValue = "lastSaturday";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-02-02 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-02-02 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+ Assert.assertEquals(1, dateIntervals.size());
+
+ dateValue = "lastSunday";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-02-03 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-02-03 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+ Assert.assertEquals(1, dateIntervals.size());
+
+ dateValue = "lastMonth";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-01-01 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-01-01 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+ expect = new DateInterval(DateUtils.stringToDate("2019-01-31 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-01-31 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(30));
+ Assert.assertEquals(31, dateIntervals.size());
+
+ dateValue = "lastMonthBegin";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-01-01 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-01-01 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+ Assert.assertEquals(1, dateIntervals.size());
+
+ dateValue = "lastMonthEnd";
+ dateIntervals = DependentUtils.getDateIntervalList(DateUtils.stringToDate("2019-02-10 07:00:00"), dateValue);
+ expect = new DateInterval(DateUtils.stringToDate("2019-01-31 00:00:00"),
+ DateUtils.getEndOfDay(DateUtils.stringToDate("2019-01-31 00:00:00")));
+ Assert.assertEquals(expect, dateIntervals.get(0));
+ Assert.assertEquals(1, dateIntervals.size());
}
@Test
@@ -197,4 +361,4 @@ public class DependentUtilsTest {
Assert.assertEquals(dateIntervals.get(30), di2);
}
-}
\ No newline at end of file
+}
diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/PreconditionsTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/PreconditionsTest.java
new file mode 100644
index 0000000000..dcb0e1370e
--- /dev/null
+++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/PreconditionsTest.java
@@ -0,0 +1,170 @@
+/*
+ * 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.utils;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static org.hamcrest.core.StringContains.containsString;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+
+
+public class PreconditionsTest {
+ public static final Logger logger = LoggerFactory.getLogger(PreconditionsTest.class);
+
+ /**
+ * Test checkNotNull
+ */
+ @Test
+ public void testCheckNotNull() throws Exception {
+ String testReference = "test reference";
+ //test reference is not null
+ Assert.assertEquals(testReference,Preconditions.checkNotNull(testReference));
+ Assert.assertEquals(testReference,Preconditions.checkNotNull(testReference,"reference is null"));
+ Assert.assertEquals(testReference,Preconditions.checkNotNull(testReference,"%s is null",testReference));
+
+ //test reference is null
+ try {
+ Preconditions.checkNotNull(null);
+ } catch (NullPointerException ex) {
+ assertNull(ex.getMessage());
+ }
+
+ try {
+ Preconditions.checkNotNull("");
+ } catch (NullPointerException ex) {
+ assertNull(ex.getMessage());
+ }
+ //test reference is null ,expect contains errorMessage
+ try {
+ Preconditions.checkNotNull(null,"reference is null");
+ } catch (NullPointerException ex) {
+ assertThat(ex.getMessage(), containsString("reference is null"));
+ }
+
+ try {
+ Preconditions.checkNotNull("","reference is null");
+ } catch (NullPointerException ex) {
+ assertThat(ex.getMessage(), containsString("reference is null"));
+ }
+
+ //test reference is null ,expect contains errorMessageTemplate and errorMessageArgs
+ try {
+ Preconditions.checkNotNull(null,"%s is null",testReference);
+ } catch (NullPointerException ex) {
+ assertThat(ex.getMessage(), containsString(testReference + " is null"));
+ }
+
+ try {
+ Preconditions.checkNotNull("","%s is null",testReference);
+ } catch (NullPointerException ex) {
+ assertThat(ex.getMessage(), containsString(testReference + " is null"));
+ }
+ }
+
+ /**
+ * Test checkArgument
+ */
+ @Test
+ public void testCheckArgument() throws Exception {
+
+ int argument = 100;
+ //boolean condition is true
+ Preconditions.checkArgument(argument > 0 && argument < 200);
+
+ //boolean condition is false
+ try {
+ Preconditions.checkArgument(argument > 0 && argument < 50);
+ } catch (IllegalArgumentException ex) {
+ assertNull(ex.getMessage());
+ }
+
+ //boolean condition is false ,expect contains errorMessage
+ try {
+ Preconditions.checkArgument(argument > 300, "argument is error");
+ } catch (IllegalArgumentException ex) {
+ assertThat(ex.getMessage(), containsString("argument is error"));
+ }
+
+ //boolean condition is false,expect contains errorMessageTemplate and errorMessageArgs
+ try {
+ Preconditions.checkArgument(argument > 0 && argument < 99, "argument %s is error",argument);
+ } catch (IllegalArgumentException ex) {
+ assertThat(ex.getMessage(), containsString( "argument " + argument + " is error"));
+ }
+ }
+
+ /**
+ * Test checkState
+ */
+ @Test
+ public void testCheckState() throws Exception {
+ int state = 1;
+ //boolean condition is true
+ Preconditions.checkState(state == 1);
+ Preconditions.checkState(state > -1);
+
+ //boolean condition is false
+ try {
+ Preconditions.checkState(state > 2);
+ } catch (IllegalStateException ex) {
+ assertNull(ex.getMessage());
+ }
+
+ //boolean condition is false ,expect contains errorMessage
+ try {
+ Preconditions.checkState(state < 1, "state is error");
+ } catch (IllegalStateException ex) {
+ assertThat(ex.getMessage(), containsString("state is error"));
+ }
+
+ //boolean condition is false,expect contains errorMessageTemplate and errorMessageArgs
+ try {
+ Preconditions.checkState(state < -1 , "state %s is error",state);
+ } catch (IllegalStateException ex) {
+ assertThat(ex.getMessage(), containsString( "state " + state + " is error"));
+ }
+ }
+
+ /**
+ * Test checkElementIndex
+ */
+ @Test
+ public void testCheckElementIndex() throws Exception {
+ int index = 2;
+ int size = 30;
+
+ //boolean condition is true
+ Preconditions.checkElementIndex(index, size);
+
+ //boolean condition is false
+ try {
+ Preconditions.checkElementIndex(-1, 10);
+ } catch (IndexOutOfBoundsException ex) {
+ assertThat(ex.getMessage(), containsString("Index: -1, Size: 10"));
+ }
+
+ //boolean condition is false ,expect contains errorMessage
+ try {
+ Preconditions.checkElementIndex(100, 50, "index is greater than size");
+ } catch (IndexOutOfBoundsException ex) {
+ assertThat(ex.getMessage(), containsString("index is greater than size Index: 100, Size: 50"));
+ }
+ }
+}
diff --git a/dolphinscheduler-dao/pom.xml b/dolphinscheduler-dao/pom.xml
index af1cdb8b78..c994716517 100644
--- a/dolphinscheduler-dao/pom.xml
+++ b/dolphinscheduler-dao/pom.xml
@@ -108,14 +108,6 @@
commons-httpclient
commons-httpclient
-
- org.apache.commons
- commons-lang3
-
-
- commons-lang
- commons-lang
-
com.alibaba
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/AlertDao.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/AlertDao.java
index 2f2314c91f..19dbf46a6b 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/AlertDao.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/AlertDao.java
@@ -17,9 +17,9 @@
package org.apache.dolphinscheduler.dao;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.common.enums.AlertStatus;
import org.apache.dolphinscheduler.common.enums.AlertType;
import org.apache.dolphinscheduler.common.enums.ShowType;
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/ProcessDao.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/ProcessDao.java
index 66948951f6..ffb6febd66 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/ProcessDao.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/ProcessDao.java
@@ -18,20 +18,19 @@ package org.apache.dolphinscheduler.dao;
import com.alibaba.fastjson.JSONObject;
import com.cronutils.model.Cron;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.*;
import org.apache.dolphinscheduler.common.model.DateInterval;
import org.apache.dolphinscheduler.common.model.TaskNode;
import org.apache.dolphinscheduler.common.process.Property;
import org.apache.dolphinscheduler.common.queue.ITaskQueue;
-import org.apache.dolphinscheduler.common.queue.TaskQueueFactory;
import org.apache.dolphinscheduler.common.task.subprocess.SubProcessParameters;
+import org.apache.dolphinscheduler.common.utils.ArrayUtils;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.common.utils.IpUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.common.utils.ParameterUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.*;
import org.apache.dolphinscheduler.dao.mapper.*;
import org.apache.dolphinscheduler.dao.utils.cron.CronUtils;
@@ -458,9 +457,12 @@ public class ProcessDao {
if(tenantId >= 0){
tenant = tenantMapper.queryById(tenantId);
}
- if(tenant == null){
+ if(null == tenant){
User user = userMapper.selectById(userId);
- tenant = tenantMapper.queryById(user.getTenantId());
+
+ if (null != user) {
+ tenant = tenantMapper.queryById(user.getTenantId());
+ }
}
return tenant;
}
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/TaskRecordDao.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/TaskRecordDao.java
index 4e6b1df7e6..f7ba1054a5 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/TaskRecordDao.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/TaskRecordDao.java
@@ -20,11 +20,11 @@ import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.TaskRecordStatus;
import org.apache.dolphinscheduler.common.utils.CollectionUtils;
import org.apache.dolphinscheduler.common.utils.DateUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.TaskRecord;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AccessToken.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AccessToken.java
index 33f6d2e24b..af9d9cd507 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AccessToken.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AccessToken.java
@@ -20,11 +20,9 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
import java.util.Date;
-@Data
@TableName("t_ds_access_token")
public class AccessToken {
@@ -105,4 +103,45 @@ public class AccessToken {
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ AccessToken that = (AccessToken) o;
+
+ if (id != that.id) return false;
+ if (userId != that.userId) return false;
+ if (token != null ? !token.equals(that.token) : that.token != null) return false;
+ if (userName != null ? !userName.equals(that.userName) : that.userName != null) return false;
+ if (expireTime != null ? !expireTime.equals(that.expireTime) : that.expireTime != null) return false;
+ if (createTime != null ? !createTime.equals(that.createTime) : that.createTime != null) return false;
+ return updateTime != null ? updateTime.equals(that.updateTime) : that.updateTime == null;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = id;
+ result = 31 * result + userId;
+ result = 31 * result + (token != null ? token.hashCode() : 0);
+ result = 31 * result + (userName != null ? userName.hashCode() : 0);
+ result = 31 * result + (expireTime != null ? expireTime.hashCode() : 0);
+ result = 31 * result + (createTime != null ? createTime.hashCode() : 0);
+ result = 31 * result + (updateTime != null ? updateTime.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ return "AccessToken{" +
+ "id=" + id +
+ ", userId=" + userId +
+ ", token='" + token + '\'' +
+ ", userName='" + userName + '\'' +
+ ", expireTime=" + expireTime +
+ ", createTime=" + createTime +
+ ", updateTime=" + updateTime +
+ '}';
+ }
}
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Alert.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Alert.java
index dac96e8695..d60a54269d 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Alert.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Alert.java
@@ -20,7 +20,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
import org.apache.dolphinscheduler.common.enums.AlertStatus;
import org.apache.dolphinscheduler.common.enums.AlertType;
import org.apache.dolphinscheduler.common.enums.ShowType;
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AlertGroup.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AlertGroup.java
index d5ecc04b69..80e4a99935 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AlertGroup.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AlertGroup.java
@@ -20,11 +20,9 @@ import org.apache.dolphinscheduler.common.enums.AlertType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
import java.util.Date;
-@Data
@TableName("t_ds_alertgroup")
public class AlertGroup {
@@ -145,4 +143,16 @@ public class AlertGroup {
result = 31 * result + (updateTime != null ? updateTime.hashCode() : 0);
return result;
}
+
+ @Override
+ public String toString() {
+ return "AlertGroup{" +
+ "id=" + id +
+ ", groupName='" + groupName + '\'' +
+ ", groupType=" + groupType +
+ ", description='" + description + '\'' +
+ ", createTime=" + createTime +
+ ", updateTime=" + updateTime +
+ '}';
+ }
}
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Command.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Command.java
index 2d47b7874a..25667924ac 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Command.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Command.java
@@ -20,7 +20,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
import org.apache.dolphinscheduler.common.enums.*;
import java.util.Date;
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DataSource.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DataSource.java
index 433fa2ebbf..236ae8f91e 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DataSource.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DataSource.java
@@ -16,18 +16,14 @@
*/
package org.apache.dolphinscheduler.dao.entity;
-
-
import org.apache.dolphinscheduler.common.enums.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
import java.util.Date;
-@Data
@TableName("t_ds_datasource")
public class DataSource {
/**
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
index 66a0d6c30a..f708e49e4f 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
@@ -21,7 +21,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import lombok.Data;
import org.apache.dolphinscheduler.common.enums.*;
import java.util.Date;
@@ -29,7 +28,6 @@ import java.util.Date;
/**
* process instance
*/
-@Data
@TableName("t_ds_process_instance")
public class ProcessInstance {
@@ -619,4 +617,98 @@ public class ProcessInstance {
", receiversCc='" + receiversCc + '\'' +
'}';
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ ProcessInstance that = (ProcessInstance) o;
+
+ if (id != that.id) return false;
+ if (processDefinitionId != that.processDefinitionId) return false;
+ if (runTimes != that.runTimes) return false;
+ if (maxTryTimes != that.maxTryTimes) return false;
+ if (executorId != that.executorId) return false;
+ if (workerGroupId != that.workerGroupId) return false;
+ if (timeout != that.timeout) return false;
+ if (tenantId != that.tenantId) return false;
+ if (state != that.state) return false;
+ if (recovery != that.recovery) return false;
+ if (startTime != null ? !startTime.equals(that.startTime) : that.startTime != null) return false;
+ if (endTime != null ? !endTime.equals(that.endTime) : that.endTime != null) return false;
+ if (name != null ? !name.equals(that.name) : that.name != null) return false;
+ if (host != null ? !host.equals(that.host) : that.host != null) return false;
+ if (processDefinition != null ? !processDefinition.equals(that.processDefinition) : that.processDefinition != null)
+ return false;
+ if (commandType != that.commandType) return false;
+ if (commandParam != null ? !commandParam.equals(that.commandParam) : that.commandParam != null) return false;
+ if (taskDependType != that.taskDependType) return false;
+ if (failureStrategy != that.failureStrategy) return false;
+ if (warningType != that.warningType) return false;
+ if (warningGroupId != null ? !warningGroupId.equals(that.warningGroupId) : that.warningGroupId != null)
+ return false;
+ if (scheduleTime != null ? !scheduleTime.equals(that.scheduleTime) : that.scheduleTime != null) return false;
+ if (commandStartTime != null ? !commandStartTime.equals(that.commandStartTime) : that.commandStartTime != null)
+ return false;
+ if (globalParams != null ? !globalParams.equals(that.globalParams) : that.globalParams != null) return false;
+ if (processInstanceJson != null ? !processInstanceJson.equals(that.processInstanceJson) : that.processInstanceJson != null)
+ return false;
+ if (tenantCode != null ? !tenantCode.equals(that.tenantCode) : that.tenantCode != null) return false;
+ if (queue != null ? !queue.equals(that.queue) : that.queue != null) return false;
+ if (isSubProcess != that.isSubProcess) return false;
+ if (locations != null ? !locations.equals(that.locations) : that.locations != null) return false;
+ if (connects != null ? !connects.equals(that.connects) : that.connects != null) return false;
+ if (historyCmd != null ? !historyCmd.equals(that.historyCmd) : that.historyCmd != null) return false;
+ if (dependenceScheduleTimes != null ? !dependenceScheduleTimes.equals(that.dependenceScheduleTimes) : that.dependenceScheduleTimes != null)
+ return false;
+ if (duration != null ? !duration.equals(that.duration) : that.duration != null) return false;
+ if (processInstancePriority != that.processInstancePriority) return false;
+ if (workerGroupName != null ? !workerGroupName.equals(that.workerGroupName) : that.workerGroupName != null)
+ return false;
+ if (receivers != null ? !receivers.equals(that.receivers) : that.receivers != null) return false;
+ return receiversCc != null ? receiversCc.equals(that.receiversCc) : that.receiversCc == null;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = id;
+ result = 31 * result + processDefinitionId;
+ result = 31 * result + (state != null ? state.hashCode() : 0);
+ result = 31 * result + (recovery != null ? recovery.hashCode() : 0);
+ result = 31 * result + (startTime != null ? startTime.hashCode() : 0);
+ result = 31 * result + (endTime != null ? endTime.hashCode() : 0);
+ result = 31 * result + runTimes;
+ result = 31 * result + (name != null ? name.hashCode() : 0);
+ result = 31 * result + (host != null ? host.hashCode() : 0);
+ result = 31 * result + (processDefinition != null ? processDefinition.hashCode() : 0);
+ result = 31 * result + (commandType != null ? commandType.hashCode() : 0);
+ result = 31 * result + (commandParam != null ? commandParam.hashCode() : 0);
+ result = 31 * result + (taskDependType != null ? taskDependType.hashCode() : 0);
+ result = 31 * result + maxTryTimes;
+ result = 31 * result + (failureStrategy != null ? failureStrategy.hashCode() : 0);
+ result = 31 * result + (warningType != null ? warningType.hashCode() : 0);
+ result = 31 * result + (warningGroupId != null ? warningGroupId.hashCode() : 0);
+ result = 31 * result + (scheduleTime != null ? scheduleTime.hashCode() : 0);
+ result = 31 * result + (commandStartTime != null ? commandStartTime.hashCode() : 0);
+ result = 31 * result + (globalParams != null ? globalParams.hashCode() : 0);
+ result = 31 * result + (processInstanceJson != null ? processInstanceJson.hashCode() : 0);
+ result = 31 * result + executorId;
+ result = 31 * result + (tenantCode != null ? tenantCode.hashCode() : 0);
+ result = 31 * result + (queue != null ? queue.hashCode() : 0);
+ result = 31 * result + (isSubProcess != null ? isSubProcess.hashCode() : 0);
+ result = 31 * result + (locations != null ? locations.hashCode() : 0);
+ result = 31 * result + (connects != null ? connects.hashCode() : 0);
+ result = 31 * result + (historyCmd != null ? historyCmd.hashCode() : 0);
+ result = 31 * result + (dependenceScheduleTimes != null ? dependenceScheduleTimes.hashCode() : 0);
+ result = 31 * result + (duration != null ? duration.hashCode() : 0);
+ result = 31 * result + (processInstancePriority != null ? processInstancePriority.hashCode() : 0);
+ result = 31 * result + workerGroupId;
+ result = 31 * result + timeout;
+ result = 31 * result + tenantId;
+ result = 31 * result + (workerGroupName != null ? workerGroupName.hashCode() : 0);
+ result = 31 * result + (receivers != null ? receivers.hashCode() : 0);
+ result = 31 * result + (receiversCc != null ? receiversCc.hashCode() : 0);
+ return result;
+ }
}
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstanceMap.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstanceMap.java
index c85a6b73e0..637d573b11 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstanceMap.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstanceMap.java
@@ -19,12 +19,10 @@ package org.apache.dolphinscheduler.dao.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
/**
* process instance map
*/
-@Data
@TableName("t_ds_relation_process_instance")
public class ProcessInstanceMap {
@@ -90,4 +88,26 @@ public class ProcessInstanceMap {
", processInstanceId=" + processInstanceId +
'}';
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ ProcessInstanceMap that = (ProcessInstanceMap) o;
+
+ if (id != that.id) return false;
+ if (parentProcessInstanceId != that.parentProcessInstanceId) return false;
+ if (parentTaskInstanceId != that.parentTaskInstanceId) return false;
+ return processInstanceId == that.processInstanceId;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = id;
+ result = 31 * result + parentProcessInstanceId;
+ result = 31 * result + parentTaskInstanceId;
+ result = 31 * result + processInstanceId;
+ return result;
+ }
}
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Project.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Project.java
index 3385cd676c..feddb598f0 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Project.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Project.java
@@ -20,14 +20,12 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
import java.util.Date;
/**
* project
*/
-@Data
@TableName("t_ds_project")
public class Project {
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java
index 1dc4ad14e7..aed93038f5 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java
@@ -17,14 +17,13 @@
package org.apache.dolphinscheduler.dao.upgrade;
import com.alibaba.druid.pool.DruidDataSource;
-import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.DbType;
import org.apache.dolphinscheduler.common.utils.ConnectionUtils;
import org.apache.dolphinscheduler.common.utils.SchemaUtils;
import org.apache.dolphinscheduler.common.utils.ScriptRunner;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.AbstractBaseDao;
import org.apache.dolphinscheduler.dao.datasource.ConnectionFactory;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -156,7 +155,9 @@ public abstract class UpgradeDao extends AbstractBaseDao {
throw new RuntimeException(e.getMessage(),e);
} catch (Exception e) {
try {
- conn.rollback();
+ if (null != conn) {
+ conn.rollback();
+ }
} catch (SQLException e1) {
logger.error(e1.getMessage(),e1);
}
@@ -313,7 +314,9 @@ public abstract class UpgradeDao extends AbstractBaseDao {
throw new RuntimeException(e.getMessage(),e);
} catch (SQLException e) {
try {
- conn.rollback();
+ if (null != conn) {
+ conn.rollback();
+ }
} catch (SQLException e1) {
logger.error(e1.getMessage(),e1);
}
@@ -321,7 +324,9 @@ public abstract class UpgradeDao extends AbstractBaseDao {
throw new RuntimeException(e.getMessage(),e);
} catch (Exception e) {
try {
- conn.rollback();
+ if (null != conn) {
+ conn.rollback();
+ }
} catch (SQLException e1) {
logger.error(e1.getMessage(),e1);
}
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/DagHelper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/DagHelper.java
index c4b312d608..26d0f1e8e2 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/DagHelper.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/DagHelper.java
@@ -24,9 +24,9 @@ import org.apache.dolphinscheduler.common.model.TaskNodeRelation;
import org.apache.dolphinscheduler.common.process.ProcessDag;
import org.apache.dolphinscheduler.common.utils.CollectionUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.ProcessData;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -78,17 +78,17 @@ public class DagHelper {
List startNodeList = startNodeNameList;
if(taskDependType != TaskDependType.TASK_POST
- && startNodeList.size() == 0){
+ && CollectionUtils.isEmpty(startNodeList)){
logger.error("start node list is empty! cannot continue run the process ");
return destFlowNodeList;
}
List destTaskNodeList = new ArrayList<>();
List tmpTaskNodeList = new ArrayList<>();
if (taskDependType == TaskDependType.TASK_POST
- && recoveryNodeNameList.size() > 0) {
+ && CollectionUtils.isNotEmpty(recoveryNodeNameList)) {
startNodeList = recoveryNodeNameList;
}
- if (startNodeList == null || startNodeList.size() == 0) {
+ if (CollectionUtils.isEmpty(startNodeList)) {
// no special designation start nodes
tmpTaskNodeList = taskNodeList;
} else {
@@ -126,10 +126,8 @@ public class DagHelper {
List resultList = new ArrayList<>();
for (TaskNode taskNode : taskNodeList) {
List depList = taskNode.getDepList();
- if (depList != null) {
- if (depList.contains(startNode.getName())) {
- resultList.addAll(getFlowNodeListPost(taskNode, taskNodeList));
- }
+ if (null != depList && null != startNode && depList.contains(startNode.getName())) {
+ resultList.addAll(getFlowNodeListPost(taskNode, taskNodeList));
}
}
@@ -149,9 +147,12 @@ public class DagHelper {
List resultList = new ArrayList<>();
- List depList = startNode.getDepList();
- resultList.add(startNode);
- if (depList == null || depList.size() == 0) {
+ List depList = new ArrayList<>();
+ if (null != startNode) {
+ depList = startNode.getDepList();
+ resultList.add(startNode);
+ }
+ if (CollectionUtils.isEmpty(depList)) {
return resultList;
}
for (String depNodeName : depList) {
@@ -180,7 +181,10 @@ public class DagHelper {
TaskDependType depNodeType) throws Exception {
ProcessData processData = JSONUtils.parseObject(processDefinitionJson, ProcessData.class);
- List taskNodeList = processData.getTasks();
+ List taskNodeList = new ArrayList<>();
+ if (null != processData) {
+ taskNodeList = processData.getTasks();
+ }
List destTaskNodeList = generateFlowNodeListByStartNode(taskNodeList, startNodeNameList, recoveryNodeNameList, depNodeType);
if (destTaskNodeList.isEmpty()) {
return null;
@@ -201,7 +205,10 @@ public class DagHelper {
Map forbidTaskNodeMap = new ConcurrentHashMap<>();
ProcessData processData = JSONUtils.parseObject(processDefinitionJson, ProcessData.class);
- List taskNodeList = processData.getTasks();
+ List taskNodeList = new ArrayList<>();
+ if (null != processData) {
+ taskNodeList = processData.getTasks();
+ }
for(TaskNode node : taskNodeList){
if(node.isForbidden()){
forbidTaskNodeMap.putIfAbsent(node.getName(), node);
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MysqlPerformance.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MysqlPerformance.java
index 019ef0cd72..40d12ab36f 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MysqlPerformance.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MysqlPerformance.java
@@ -17,12 +17,7 @@
package org.apache.dolphinscheduler.dao.utils;
-import org.apache.dolphinscheduler.common.enums.DbType;
-import org.apache.dolphinscheduler.common.enums.Flag;
-import org.apache.dolphinscheduler.dao.MonitorDBDao;
-import org.apache.dolphinscheduler.dao.entity.MonitorRecord;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import static org.apache.dolphinscheduler.dao.MonitorDBDao.VARIABLE_NAME;
import java.sql.Connection;
import java.sql.ResultSet;
@@ -30,7 +25,12 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
-import static org.apache.dolphinscheduler.dao.MonitorDBDao.VARIABLE_NAME;
+import org.apache.dolphinscheduler.common.enums.DbType;
+import org.apache.dolphinscheduler.common.enums.Flag;
+import org.apache.dolphinscheduler.dao.MonitorDBDao;
+import org.apache.dolphinscheduler.dao.entity.MonitorRecord;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* mysql performance
@@ -55,26 +55,28 @@ public class MysqlPerformance extends BaseDBPerformance{
try{
pstmt = conn.createStatement();
- ResultSet rs1 = pstmt.executeQuery("show global variables");
- while(rs1.next()){
- if(rs1.getString(VARIABLE_NAME).toUpperCase().equals("MAX_CONNECTIONS")){
- monitorRecord.setMaxConnections( Long.parseLong(rs1.getString("value")));
+ try (ResultSet rs1 = pstmt.executeQuery("show global variables")) {
+ while(rs1.next()){
+ if(rs1.getString(VARIABLE_NAME).equalsIgnoreCase("MAX_CONNECTIONS")){
+ monitorRecord.setMaxConnections( Long.parseLong(rs1.getString("value")));
+ }
}
}
- ResultSet rs2 = pstmt.executeQuery("show global status");
- while(rs2.next()){
- if(rs2.getString(VARIABLE_NAME).toUpperCase().equals("MAX_USED_CONNECTIONS")){
- monitorRecord.setMaxUsedConnections(Long.parseLong(rs2.getString("value")));
- }else if(rs2.getString(VARIABLE_NAME).toUpperCase().equals("THREADS_CONNECTED")){
- monitorRecord.setThreadsConnections(Long.parseLong(rs2.getString("value")));
- }else if(rs2.getString(VARIABLE_NAME).toUpperCase().equals("THREADS_RUNNING")){
- monitorRecord.setThreadsRunningConnections(Long.parseLong(rs2.getString("value")));
+ try (ResultSet rs2 = pstmt.executeQuery("show global status")) {
+ while(rs2.next()){
+ if(rs2.getString(VARIABLE_NAME).equalsIgnoreCase("MAX_USED_CONNECTIONS")){
+ monitorRecord.setMaxUsedConnections(Long.parseLong(rs2.getString("value")));
+ }else if(rs2.getString(VARIABLE_NAME).equalsIgnoreCase("THREADS_CONNECTED")){
+ monitorRecord.setThreadsConnections(Long.parseLong(rs2.getString("value")));
+ }else if(rs2.getString(VARIABLE_NAME).equalsIgnoreCase("THREADS_RUNNING")){
+ monitorRecord.setThreadsRunningConnections(Long.parseLong(rs2.getString("value")));
+ }
}
}
}catch (Exception e) {
monitorRecord.setState(Flag.NO);
- logger.error("SQLException " + e);
+ logger.error("SQLException ", e);
}finally {
try {
if (pstmt != null) {
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/PostgrePerformance.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/PostgrePerformance.java
index d6471a9a9e..031fd00681 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/PostgrePerformance.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/PostgrePerformance.java
@@ -16,6 +16,12 @@
*/
package org.apache.dolphinscheduler.dao.utils;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Date;
+
import org.apache.dolphinscheduler.common.enums.DbType;
import org.apache.dolphinscheduler.common.enums.Flag;
import org.apache.dolphinscheduler.dao.MonitorDBDao;
@@ -23,12 +29,6 @@ import org.apache.dolphinscheduler.dao.entity.MonitorRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.Date;
-
/**
* postgresql performance
*/
@@ -50,26 +50,27 @@ public class PostgrePerformance extends BaseDBPerformance {
Statement pstmt= null;
try{
pstmt = conn.createStatement();
- ResultSet rs1 = pstmt.executeQuery("select count(*) from pg_stat_activity;");
- while(rs1.next()){
- monitorRecord.setThreadsConnections(rs1.getInt("count"));
- break;
+
+ try (ResultSet rs1 = pstmt.executeQuery("select count(*) from pg_stat_activity;")) {
+ if(rs1.next()){
+ monitorRecord.setThreadsConnections(rs1.getInt("count"));
+ }
}
- ResultSet rs2 = pstmt.executeQuery("show max_connections");
- while(rs2.next()){
- monitorRecord.setMaxConnections( rs2.getInt("max_connections"));
- break;
+ try (ResultSet rs2 = pstmt.executeQuery("show max_connections")) {
+ if(rs2.next()){
+ monitorRecord.setMaxConnections( rs2.getInt("max_connections"));
+ }
}
- ResultSet rs3 = pstmt.executeQuery("select count(*) from pg_stat_activity pg where pg.state = 'active';");
- while(rs3.next()){
- monitorRecord.setThreadsRunningConnections(rs3.getInt("count"));
- break;
+ try (ResultSet rs3 = pstmt.executeQuery("select count(*) from pg_stat_activity pg where pg.state = 'active';")) {
+ if(rs3.next()){
+ monitorRecord.setThreadsRunningConnections(rs3.getInt("count"));
+ }
}
}catch (Exception e) {
monitorRecord.setState(Flag.NO);
- logger.error("SQLException " + e);
+ logger.error("SQLException ", e);
}finally {
try {
if (pstmt != null) {
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
index 1f5b16a25a..c4cec68683 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
@@ -16,7 +16,6 @@
*/
package org.apache.dolphinscheduler.server.master;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.IStoppable;
import org.apache.dolphinscheduler.common.thread.Stopper;
@@ -24,6 +23,7 @@ import org.apache.dolphinscheduler.common.thread.ThreadPoolExecutors;
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
import org.apache.dolphinscheduler.common.utils.OSUtils;
import org.apache.dolphinscheduler.common.utils.SpringApplicationContext;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.ProcessDao;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.master.runner.MasterSchedulerThread;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
index 3481b79caa..ade4738884 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
@@ -18,7 +18,6 @@ package org.apache.dolphinscheduler.server.master.runner;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.*;
import org.apache.dolphinscheduler.common.graph.DAG;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/SubProcessTaskExecThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/SubProcessTaskExecThread.java
index 5ee5d01b7a..0026de7c25 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/SubProcessTaskExecThread.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/SubProcessTaskExecThread.java
@@ -81,9 +81,11 @@ public class SubProcessTaskExecThread extends MasterBaseTaskExecThread {
result = true;
}catch (Exception e){
- logger.error("exception: "+ e.getMessage(),e);
- logger.error("wait task quit failed, instance id:{}, task id:{}",
- processInstance.getId(), taskInstance.getId());
+ logger.error("exception: ",e);
+ if (null != taskInstance) {
+ logger.error("wait task quit failed, instance id:{}, task id:{}",
+ processInstance.getId(), taskInstance.getId());
+ }
}
return result;
}
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/monitor/AbstractMonitor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/monitor/AbstractMonitor.java
index ab30ce890f..15fef1e95d 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/monitor/AbstractMonitor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/monitor/AbstractMonitor.java
@@ -16,8 +16,8 @@
*/
package org.apache.dolphinscheduler.server.monitor;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.common.utils.CollectionUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/ProcessUtils.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/ProcessUtils.java
index 748c8f007e..7cba139cec 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/ProcessUtils.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/ProcessUtils.java
@@ -19,10 +19,10 @@ package org.apache.dolphinscheduler.server.utils;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.utils.CommonUtils;
import org.apache.dolphinscheduler.common.utils.OSUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
import org.apache.dolphinscheduler.server.rpc.LogClient;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/UDFUtils.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/UDFUtils.java
index 937e35454d..5e2e535cdb 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/UDFUtils.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/UDFUtils.java
@@ -18,8 +18,8 @@ package org.apache.dolphinscheduler.server.utils;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.utils.HadoopUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.UdfFunc;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import java.text.MessageFormat;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/log/SensitiveDataConverter.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/log/SensitiveDataConverter.java
index be8d3d12a0..2406a4da88 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/log/SensitiveDataConverter.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/log/SensitiveDataConverter.java
@@ -20,8 +20,8 @@ package org.apache.dolphinscheduler.server.worker.log;
import ch.qos.logback.classic.pattern.MessageConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.server.utils.SensitiveLogUtil;
import java.util.regex.Matcher;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/FetchTaskThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/FetchTaskThread.java
index ae67716da2..60cfd82cdd 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/FetchTaskThread.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/FetchTaskThread.java
@@ -16,16 +16,12 @@
*/
package org.apache.dolphinscheduler.server.worker.runner;
-import org.apache.commons.lang3.StringUtils;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.queue.ITaskQueue;
import org.apache.dolphinscheduler.common.thread.Stopper;
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
-import org.apache.dolphinscheduler.common.utils.CollectionUtils;
-import org.apache.dolphinscheduler.common.utils.FileUtils;
-import org.apache.dolphinscheduler.common.utils.OSUtils;
-import org.apache.dolphinscheduler.common.utils.SpringApplicationContext;
+import org.apache.dolphinscheduler.common.utils.*;
import org.apache.dolphinscheduler.common.zk.AbstractZKClient;
import org.apache.dolphinscheduler.dao.ProcessDao;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
index 32a92d1b8f..715fda108e 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
@@ -20,11 +20,11 @@ import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
import org.apache.dolphinscheduler.common.utils.HadoopUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.ProcessDao;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
import org.apache.dolphinscheduler.server.utils.LoggerUtils;
import org.apache.dolphinscheduler.server.utils.ProcessUtils;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import java.io.*;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/PythonCommandExecutor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/PythonCommandExecutor.java
index 17413999e2..c1ff89d4cf 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/PythonCommandExecutor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/PythonCommandExecutor.java
@@ -18,7 +18,7 @@ package org.apache.dolphinscheduler.server.worker.task;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.utils.FileUtils;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/TaskManager.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/TaskManager.java
index ce27e1974c..310d9cad9a 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/TaskManager.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/TaskManager.java
@@ -18,6 +18,7 @@ package org.apache.dolphinscheduler.server.worker.task;
import org.apache.dolphinscheduler.common.enums.TaskType;
+import org.apache.dolphinscheduler.common.utils.EnumUtils;
import org.apache.dolphinscheduler.server.worker.task.dependent.DependentTask;
import org.apache.dolphinscheduler.server.worker.task.flink.FlinkTask;
import org.apache.dolphinscheduler.server.worker.task.http.HttpTask;
@@ -27,7 +28,6 @@ import org.apache.dolphinscheduler.server.worker.task.python.PythonTask;
import org.apache.dolphinscheduler.server.worker.task.shell.ShellTask;
import org.apache.dolphinscheduler.server.worker.task.spark.SparkTask;
import org.apache.dolphinscheduler.server.worker.task.sql.SqlTask;
-import org.apache.commons.lang3.EnumUtils;
import org.slf4j.Logger;
/**
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/flink/FlinkTask.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/flink/FlinkTask.java
index 58ca74a204..0fa9e11ce5 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/flink/FlinkTask.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/flink/FlinkTask.java
@@ -21,12 +21,12 @@ import org.apache.dolphinscheduler.common.task.AbstractParameters;
import org.apache.dolphinscheduler.common.task.flink.FlinkParameters;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.common.utils.ParameterUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
import org.apache.dolphinscheduler.server.utils.FlinkArgsUtils;
import org.apache.dolphinscheduler.server.utils.ParamUtils;
import org.apache.dolphinscheduler.server.worker.task.AbstractYarnTask;
import org.apache.dolphinscheduler.server.worker.task.TaskProps;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import java.util.ArrayList;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTask.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTask.java
index 39bcd922c8..97e6cb7bee 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTask.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTask.java
@@ -19,7 +19,6 @@ package org.apache.dolphinscheduler.server.worker.task.http;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.Charsets;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.HttpMethod;
import org.apache.dolphinscheduler.common.enums.HttpParametersType;
@@ -30,6 +29,7 @@ import org.apache.dolphinscheduler.common.task.http.HttpParameters;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.common.utils.ParameterUtils;
import org.apache.dolphinscheduler.common.utils.SpringApplicationContext;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.ProcessDao;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
import org.apache.dolphinscheduler.server.utils.ParamUtils;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/mr/MapReduceTask.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/mr/MapReduceTask.java
index 4da3d2c656..b86ff9952e 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/mr/MapReduceTask.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/mr/MapReduceTask.java
@@ -23,10 +23,10 @@ import org.apache.dolphinscheduler.common.task.AbstractParameters;
import org.apache.dolphinscheduler.common.task.mr.MapreduceParameters;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.common.utils.ParameterUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.server.utils.ParamUtils;
import org.apache.dolphinscheduler.server.worker.task.AbstractYarnTask;
import org.apache.dolphinscheduler.server.worker.task.TaskProps;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import java.util.ArrayList;
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTask.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTask.java
index 34f7d13ca8..203c0fe146 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTask.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTask.java
@@ -16,13 +16,13 @@
*/
package org.apache.dolphinscheduler.server.worker.task.spark;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.common.enums.SparkVersion;
import org.apache.dolphinscheduler.common.process.Property;
import org.apache.dolphinscheduler.common.task.AbstractParameters;
import org.apache.dolphinscheduler.common.task.spark.SparkParameters;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.common.utils.ParameterUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.server.utils.ParamUtils;
import org.apache.dolphinscheduler.server.utils.SparkArgsUtils;
import org.apache.dolphinscheduler.server.worker.task.AbstractYarnTask;
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 08a90c62ce..bacb3f22eb 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
@@ -19,8 +19,6 @@ package org.apache.dolphinscheduler.server.worker.task.sql;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang3.EnumUtils;
import org.apache.dolphinscheduler.alert.utils.MailUtils;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.ShowType;
@@ -33,10 +31,7 @@ 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.CollectionUtils;
-import org.apache.dolphinscheduler.common.utils.CommonUtils;
-import org.apache.dolphinscheduler.common.utils.ParameterUtils;
-import org.apache.dolphinscheduler.common.utils.SpringApplicationContext;
+import org.apache.dolphinscheduler.common.utils.*;
import org.apache.dolphinscheduler.dao.AlertDao;
import org.apache.dolphinscheduler.dao.ProcessDao;
import org.apache.dolphinscheduler.dao.entity.DataSource;
@@ -124,6 +119,13 @@ public class SqlTask extends AbstractTask {
}
dataSource= processDao.findDataSourceById(sqlParameters.getDatasource());
+
+ if (null == dataSource){
+ logger.error("datasource not exists");
+ exitStatusCode = -1;
+ return;
+ }
+
logger.info("datasource name : {} , type : {} , desc : {} , user_id : {} , parameter : {}",
dataSource.getName(),
dataSource.getType(),
@@ -131,12 +133,6 @@ public class SqlTask extends AbstractTask {
dataSource.getUserId(),
dataSource.getConnectionParams());
- if (dataSource == null){
- logger.error("datasource not exists");
- exitStatusCode = -1;
- return;
- }
-
Connection con = null;
List createFuncs = null;
try {
@@ -182,7 +178,7 @@ public class SqlTask extends AbstractTask {
try {
con.close();
} catch (SQLException e) {
- throw e;
+ logger.error(e.getMessage(),e);
}
}
}
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTaskTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTaskTest.java
index b502e13bc6..a18e0b2a9d 100644
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTaskTest.java
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTaskTest.java
@@ -16,12 +16,12 @@
*/
package org.apache.dolphinscheduler.server.worker.task.spark;
-import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.common.enums.SparkVersion;
import org.apache.dolphinscheduler.common.process.Property;
import org.apache.dolphinscheduler.common.task.spark.SparkParameters;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.common.utils.ParameterUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.server.utils.ParamUtils;
import org.apache.dolphinscheduler.server.utils.SparkArgsUtils;
import org.apache.dolphinscheduler.server.worker.task.TaskProps;
diff --git a/dolphinscheduler-ui/pom.xml b/dolphinscheduler-ui/pom.xml
index 28f584f49a..3fd9aa6650 100644
--- a/dolphinscheduler-ui/pom.xml
+++ b/dolphinscheduler-ui/pom.xml
@@ -31,6 +31,7 @@
v12.12.0
6.11.3
+ src
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js
index 11f22132c7..8225673ecd 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js
@@ -177,8 +177,6 @@ Dag.prototype.backfill = function (arg) {
// Number of tree node levels
let countTree = getLeafCountTree(datas[0])
function getMaxFloor(treeData) {
- let floor = 0
- let v = this
let max = 0
function each (data, floor) {
data.forEach(e => {
@@ -224,9 +222,8 @@ Dag.prototype.backfill = function (arg) {
return []
}
function toLine(data){
- return data.reduce((arr, {id, name, targetarr, x, y, children = []}) =>
- arr.concat([{id, name, targetarr, x, y}], toLine(children)), [])
- return result;
+ return data.reduce((arrData, {id, name, targetarr, x, y, children = []}) =>
+ arrData.concat([{id, name, targetarr, x, y}], toLine(children)), [])
}
let listarr = toLine(datas);
let listarrs = toLine(datas)
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 7fdb5e64f2..237e6f5cd9 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.scss
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.scss
@@ -309,14 +309,15 @@ svg path:hover {
//min-width: calc(100% - 220px);
width: 8000px;
height: 5000px;
- position: relative;
svg:not(:root){
z-index: 11;
}
}
.jtk-demo-canvas {
+ position: relative;
height: 100%;
+ display: flex;
}
.jtk-bootstrap {
@@ -359,10 +360,6 @@ svg path:hover {
list-style-type: disc !important;
}
-.jtk-demo-canvas {
- display: flex;
-}
-
.canvas-wide {
padding-top: 10px;
margin-left: 0;
@@ -459,6 +456,12 @@ svg path:hover {
-webkit-transition: background-color 0.25s ease-in;
-moz-transition: background-color 0.25s ease-in;
transition: background-color 0.25s ease-in;
+ background-color: white;
+ opacity: 0.8;
+ padding: 0.3em;
+ border-radius: 0.5em;
+ border: 1px solid #346789;
+ cursor: pointer;
}
.aLabel.jtk-hover,
@@ -485,14 +488,6 @@ svg path:hover {
}
}
-.aLabel {
- background-color: white;
- opacity: 0.8;
- padding: 0.3em;
- border-radius: 0.5em;
- border: 1px solid #346789;
- cursor: pointer;
-}
.jtk-ep {
.ep {
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue
index 8b1c353d41..feb756dabe 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue
@@ -58,7 +58,7 @@
{{name}}
-
+
@@ -68,7 +68,7 @@
:id="item.code"
:key="$index"
@click="_ckOperation(item,$event)">
-
+
@@ -156,12 +156,12 @@
},
methods: {
...mapActions('dag', ['saveDAGchart', 'updateInstance', 'updateDefinition', 'getTaskState']),
- ...mapMutations('dag', ['addTasks', 'resetParams', 'setIsEditDag', 'setName']),
-
+ ...mapMutations('dag', ['addTasks', 'cacheTasks', 'resetParams', 'setIsEditDag', 'setName']),
+
// DAG automatic layout
dagAutomaticLayout() {
$('#canvas').html('')
-
+
// Destroy round robin
Dag.init({
dag: this,
@@ -187,6 +187,13 @@
})
if (this.tasks.length) {
Dag.backfill(true)
+ if (this.type === 'instance') {
+ this._getTaskState(false).then(res => {})
+ // Round robin acquisition status
+ this.setIntervalP = setInterval(() => {
+ this._getTaskState(true).then(res => {})
+ }, 90000)
+ }
} else {
Dag.create()
}
@@ -250,8 +257,8 @@
let state = dom.find('.state-p')
dom.attr('data-state-id', v1.stateId)
dom.attr('data-dependent-result', v1.dependentResult || '')
- state.append(`
`)
- state.find('b').attr('title', titleTpl(v2, v1.desc))
+ state.append(`
`)
+ state.find('strong').attr('title', titleTpl(v2, v1.desc))
}
})
})
@@ -488,6 +495,14 @@
removeNodesEvent(fromThis)
}, 100)
},
+ /**
+ * Cache the item
+ * @param item
+ * @param fromThis
+ */
+ cacheTaskInfo({item, fromThis}) {
+ self.cacheTasks(item)
+ },
close ({ flag, fromThis }) {
// Edit status does not allow deletion of nodes
if (flag) {
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/_source/selectInput.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/_source/selectInput.vue
index f04e8f41d9..1d3902c83b 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/_source/selectInput.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/_source/selectInput.vue
@@ -32,8 +32,8 @@
:value="selectedModel === null ? '0' : selectedModel.value"
style="width: 100%;"
@on-click-icon.stop="_ckIcon">
-
-
+
+
-
+
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/localParams.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/localParams.vue
index 2b4ade1ad5..0bbbb661f4 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/localParams.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/localParams.vue
@@ -66,18 +66,18 @@
-
+
-
+
-
+
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 c16d18cc38..91e1cb7e08 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
@@ -28,7 +28,7 @@
-
+
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/statementList.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/statementList.vue
index 226e23219a..ecd10a9411 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/statementList.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/statementList.vue
@@ -32,18 +32,18 @@
-
+
-
+
-
+
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/dependent.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/dependent.vue
index 785a4fe193..cca9ec7003 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/dependent.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/dependent.vue
@@ -23,8 +23,8 @@
-
-
+
+
@@ -40,13 +40,13 @@
@click="!isDetails && _setRelation($index)">
{{el.relation === 'AND' ? $t('and') : $t('or')}}
-
-
+
-
+
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue
index 9cef7bb801..7ab032a798 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue
@@ -45,7 +45,7 @@
- * {{$t('Title')}}
+ * {{$t('Title')}}
- * {{$t('Recipient')}}
+ * {{$t('Recipient')}}
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/jumpAffirm/index.js b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/jumpAffirm/index.js
index 72e7d5a2b9..6ac87b3372 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/jumpAffirm/index.js
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/jumpAffirm/index.js
@@ -67,7 +67,6 @@ Affirm.paramVerification = (name) => {
if (!dagStore.name) {
store.commit('dag/setName', `${uuid('dag_')}${uuid() + uuid()}`)
}
- flag = false
} else {
flag = true
}
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/downChart.js b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/downChart.js
index 8ee991f3e6..3dd13895b0 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/downChart.js
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/downChart.js
@@ -54,12 +54,12 @@ DownChart.prototype.download = function ({ dagThis }) {
const copyDom = $('#canvas')
// gain
const scale = 1
- // svg handle
- const nodesToRecover = []
- const nodesToRemove = []
// divReport is the id of the dom that needs to be intercepted into a picture
const svgElem = copyDom.find('svg')
svgElem.each((index, node) => {
+ // svg handle
+ const nodesToRecover = []
+ const nodesToRemove = []
let parentNode = node.parentNode
let svg = node.outerHTML.trim()
let canvas = document.createElement('canvas')
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js
index a918b80ca1..6523a1c298 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js
@@ -266,10 +266,10 @@ JSP.prototype.tasksContextmenu = function (event) {
let isTwo = store.state.dag.isDetails
let html = [
- `${i18n.$t('Start')} `,
- `${i18n.$t('Edit')} `,
- `${i18n.$t('Copy')} `,
- `${i18n.$t('Delete')} `
+ `${i18n.$t('Start')} `,
+ `${i18n.$t('Edit')} `,
+ `${i18n.$t('Copy')} `,
+ `${i18n.$t('Delete')} `
]
let operationHtml = () => {
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js
index d9338a01d4..c10dfda5d6 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js
@@ -37,7 +37,7 @@ const saveTargetarr = (valId, domId) => {
}
const rtBantpl = () => {
- return ` `
+ return ` `
}
/**
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/startingParam/index.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/startingParam/index.vue
index d5956a4c4b..892cead413 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/startingParam/index.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/startingParam/index.vue
@@ -18,7 +18,7 @@
-
{{$t('Startup parameter')}}
+
{{$t('Startup parameter')}}
{{$t('Startup type')}}: {{_rtRunningType(startupParam.commandType)}}
{{$t('Complement range')}}: {{startupParam.commandParam.complementStartDate}}-{{startupParam.commandParam.complementEndDate}} -
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/variable/variablesView.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/variable/variablesView.vue
index d139e5de41..7209c4daff 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/variable/variablesView.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/variable/variablesView.vue
@@ -18,7 +18,7 @@
-
{{$t('Global parameters')}}
+
{{$t('Global parameters')}}
- {{item.prop}} = {{item.value}}
+ {{item.prop}} = {{item.value}}
-
{{$t('Local parameters')}}
+
{{$t('Local parameters')}}
@@ -47,11 +47,11 @@
- {{k}} = {{e}}
+ {{k}} = {{e}}
- {{k}} = {{e}}
+ {{k}} = {{e}}
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue b/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue
index d308ceee15..07e0e8d83e 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue
@@ -22,7 +22,7 @@
- * {{$t('Datasource')}}
+ * {{$t('Datasource')}}
MYSQL
@@ -37,7 +37,7 @@
- * {{$t('Datasource Name')}}
+ * {{$t('Datasource Name')}}
- * {{$t('IP')}}
+ * {{$t('IP')}}
- * {{$t('Port')}}
+ * {{$t('Port')}}
- * Principal
+ * Principal
- * {{$t('User Name')}}
+ * {{$t('User Name')}}
- * {{$t('Database Name')}}
+ * {{$t('Database Name')}}
-
+
{{$t('#')}}
-
+
{{$t('Datasource Name')}}
-
+
{{$t('Datasource Type')}}
-
+
{{$t('Datasource Parameter')}}
-
+
{{$t('Description')}}
-
+
{{$t('Create Time')}}
-
+
{{$t('Update Time')}}
-
+
{{$t('Operation')}}
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/_source/zookeeperList.vue b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/_source/zookeeperList.vue
index 24902ee469..de187dddc8 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/_source/zookeeperList.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/_source/zookeeperList.vue
@@ -97,8 +97,8 @@
-
-
+
+
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/db.vue b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/db.vue
index 2fca9663f8..873cd4a1e8 100755
--- a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/db.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/db.vue
@@ -30,8 +30,8 @@
-
-
+
+
{{$t('Health status')}}
@@ -43,7 +43,7 @@
{{$t('Max connections')}} - {{item.date | formatDate}}
- {{item.maxConnections}}
+ {{item.maxConnections}}
{{$t('Max connections')}}
@@ -54,7 +54,7 @@
{{$t('Threads connections')}}
- {{item.threadsConnections}}
+ {{item.threadsConnections}}
{{$t('Threads connections')}}
@@ -65,7 +65,7 @@
{{$t('Max used connections')}}
- {{item.maxUsedConnections}}
+ {{item.maxUsedConnections}}
{{$t('Max used connections')}}
@@ -78,7 +78,7 @@
{{$t('Threads running connections')}}
- {{item.threadsRunningConnections}}
+ {{item.threadsRunningConnections}}
{{$t('Threads running connections')}}
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue
index bd760d51cd..dc06712cd2 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue
@@ -48,7 +48,7 @@
- {{item.resInfo.loadAverage > 0? item.resInfo.loadAverage.toFixed(2):0}}
+ {{item.resInfo.loadAverage > 0? item.resInfo.loadAverage.toFixed(2):0}}
loadAverage
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/statistics.vue b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/statistics.vue
index f660b38682..e47c163c78 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/statistics.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/statistics.vue
@@ -25,7 +25,7 @@
{{$t('command number of waiting for running')}}
- {{commandCountData.normalCount}}
+ {{commandCountData.normalCount}}
@@ -35,7 +35,7 @@
{{$t('failure command number')}}
- {{commandCountData.errorCount}}
+ {{commandCountData.errorCount}}
@@ -45,7 +45,7 @@
{{$t('tasks number of waiting running')}}
- {{queueCount.taskQueue}}
+ {{queueCount.taskQueue}}
@@ -55,7 +55,7 @@
{{$t('task number of ready to kill')}}
- {{queueCount.taskKill}}
+ {{queueCount.taskKill}}
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue
index f935628520..b386ea0cc0 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue
@@ -48,7 +48,7 @@
- {{item.resInfo.loadAverage > 0? item.resInfo.loadAverage.toFixed(2):0}}
+ {{item.resInfo.loadAverage > 0? item.resInfo.loadAverage.toFixed(2):0}}
loadAverage
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/instanceConditions/index.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/instanceConditions/index.vue
index 6ca3836d05..bbade46f2c 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/instanceConditions/index.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/instanceConditions/index.vue
@@ -30,12 +30,12 @@
:value="[searchParams.startDate,searchParams.endDate]"
:panelNum="2">
-
-
+
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/taskRecordList/_source/conditions.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/taskRecordList/_source/conditions.vue
index 459f0fcfdc..a82bd45b02 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/taskRecordList/_source/conditions.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/taskRecordList/_source/conditions.vue
@@ -30,12 +30,12 @@
placement="bottom-end"
:panelNum="2">
-
-
+
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/email.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/email.vue
index ba99b14b08..2585744198 100755
--- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/email.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/email.vue
@@ -19,7 +19,7 @@