Browse Source

[Improvement][alert] Refactor alert module to fix code smell (#4434)

* chore: Refactore dolphinscheduler-alert to fix code smell

* chore: Refactor code to fix codestyle error
pull/3/MERGE
Segun Ogundipe 4 years ago committed by GitHub
parent
commit
a0b2febd62
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 13
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java
  2. 11
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/manager/DingTalkManager.java
  3. 14
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/plugin/EmailAlertPlugin.java
  4. 9
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/template/AlertTemplateFactory.java
  5. 35
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplate.java
  6. 10
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/Constants.java
  7. 53
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/DingTalkUtils.java
  8. 30
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/EnterpriseWeChatUtils.java
  9. 25
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/ExcelUtils.java
  10. 5
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/FuncUtils.java
  11. 69
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/MailUtils.java
  12. 21
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/PropertyUtils.java
  13. 8
      dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/DingTalkUtilsTest.java
  14. 8
      dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/ExcelUtilsTest.java
  15. 48
      dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/PropertyUtilsTest.java

13
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java

@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.dolphinscheduler.alert; package org.apache.dolphinscheduler.alert;
import org.apache.dolphinscheduler.alert.plugin.EmailAlertPlugin; import org.apache.dolphinscheduler.alert.plugin.EmailAlertPlugin;
@ -25,11 +26,12 @@ import org.apache.dolphinscheduler.common.thread.Stopper;
import org.apache.dolphinscheduler.dao.AlertDao; import org.apache.dolphinscheduler.dao.AlertDao;
import org.apache.dolphinscheduler.dao.DaoFactory; import org.apache.dolphinscheduler.dao.DaoFactory;
import org.apache.dolphinscheduler.dao.entity.Alert; import org.apache.dolphinscheduler.dao.entity.Alert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* alert of start * alert of start
*/ */
@ -40,8 +42,6 @@ public class AlertServer {
*/ */
private AlertDao alertDao = DaoFactory.getDaoInstance(AlertDao.class); private AlertDao alertDao = DaoFactory.getDaoInstance(AlertDao.class);
private AlertSender alertSender;
private static AlertServer instance; private static AlertServer instance;
private FilePluginManager alertPluginManager; private FilePluginManager alertPluginManager;
@ -61,7 +61,7 @@ public class AlertServer {
alertPluginManager.addPlugin(new EmailAlertPlugin()); alertPluginManager.addPlugin(new EmailAlertPlugin());
} }
public synchronized static AlertServer getInstance() { public static synchronized AlertServer getInstance() {
if (null == instance) { if (null == instance) {
instance = new AlertServer(); instance = new AlertServer();
} }
@ -78,12 +78,11 @@ public class AlertServer {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
List<Alert> alerts = alertDao.listWaitExecutionAlert(); List<Alert> alerts = alertDao.listWaitExecutionAlert();
alertSender = new AlertSender(alerts, alertDao, alertPluginManager); AlertSender alertSender = new AlertSender(alerts, alertDao, alertPluginManager);
alertSender.run(); alertSender.run();
} }
} }
public static void main(String[] args) { public static void main(String[] args) {
AlertServer alertServer = AlertServer.getInstance(); AlertServer alertServer = AlertServer.getInstance();
alertServer.start(); alertServer.start();

11
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/manager/DingTalkManager.java

@ -14,23 +14,25 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.dolphinscheduler.alert.manager; package org.apache.dolphinscheduler.alert.manager;
import org.apache.dolphinscheduler.alert.utils.Constants; import org.apache.dolphinscheduler.alert.utils.Constants;
import org.apache.dolphinscheduler.alert.utils.DingTalkUtils; import org.apache.dolphinscheduler.alert.utils.DingTalkUtils;
import org.apache.dolphinscheduler.plugin.model.AlertInfo; import org.apache.dolphinscheduler.plugin.model.AlertInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* Ding Talk Manager * Ding Talk Manager
*/ */
public class DingTalkManager { public class DingTalkManager {
private static final Logger logger = LoggerFactory.getLogger(EnterpriseWeChatManager.class); private static final Logger logger = LoggerFactory.getLogger(DingTalkManager.class);
public Map<String, Object> send(AlertInfo alert) { public Map<String, Object> send(AlertInfo alert) {
Map<String, Object> retMap = new HashMap<>(); Map<String, Object> retMap = new HashMap<>();
@ -47,7 +49,6 @@ public class DingTalkManager {
} }
private String buildMessage(AlertInfo alert) { private String buildMessage(AlertInfo alert) {
String msg = alert.getAlertData().getContent(); return alert.getAlertData().getContent();
return msg;
} }
} }

14
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/plugin/EmailAlertPlugin.java

@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.dolphinscheduler.alert.plugin; package org.apache.dolphinscheduler.alert.plugin;
import org.apache.dolphinscheduler.alert.manager.DingTalkManager; import org.apache.dolphinscheduler.alert.manager.DingTalkManager;
@ -28,14 +29,19 @@ import org.apache.dolphinscheduler.plugin.api.AlertPlugin;
import org.apache.dolphinscheduler.plugin.model.AlertData; import org.apache.dolphinscheduler.plugin.model.AlertData;
import org.apache.dolphinscheduler.plugin.model.AlertInfo; import org.apache.dolphinscheduler.plugin.model.AlertInfo;
import org.apache.dolphinscheduler.plugin.model.PluginName; import org.apache.dolphinscheduler.plugin.model.PluginName;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.*;
/** /**
* EmailAlertPlugin * EmailAlertPlugin
* * <p>
* This plugin is a default plugin, and mix up email and enterprise wechat, because adapt with former alert behavior * This plugin is a default plugin, and mix up email and enterprise wechat, because adapt with former alert behavior
*/ */
public class EmailAlertPlugin implements AlertPlugin { public class EmailAlertPlugin implements AlertPlugin {
@ -125,7 +131,7 @@ public class EmailAlertPlugin implements AlertPlugin {
} }
} }
if (DingTalkUtils.isEnableDingTalk) { if (DingTalkUtils.IS_ENABLE_DING_TALK) {
logger.info("Ding Talk is enable."); logger.info("Ding Talk is enable.");
dingTalkManager.send(info); dingTalkManager.send(info);
} }

9
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/template/AlertTemplateFactory.java

@ -14,23 +14,22 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.dolphinscheduler.alert.template; package org.apache.dolphinscheduler.alert.template;
import org.apache.dolphinscheduler.alert.template.impl.DefaultHTMLTemplate; import org.apache.dolphinscheduler.alert.template.impl.DefaultHTMLTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* the alert template factory * the alert template factory
*/ */
public class AlertTemplateFactory { public class AlertTemplateFactory {
private static final Logger logger = LoggerFactory.getLogger(AlertTemplateFactory.class); private AlertTemplateFactory() {
}
private AlertTemplateFactory(){}
/** /**
* get a template from alert.properties conf file * get a template from alert.properties conf file
*
* @return a template, default is DefaultHTMLTemplate * @return a template, default is DefaultHTMLTemplate
*/ */
public static AlertTemplate getMessageTemplate() { public static AlertTemplate getMessageTemplate() {

35
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/template/impl/DefaultHTMLTemplate.java

@ -14,21 +14,29 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.dolphinscheduler.alert.template.impl; package org.apache.dolphinscheduler.alert.template.impl;
import com.fasterxml.jackson.databind.JsonNode; import static org.apache.dolphinscheduler.common.utils.Preconditions.checkNotNull;
import com.fasterxml.jackson.databind.node.ArrayNode;
import org.apache.dolphinscheduler.alert.template.AlertTemplate; import org.apache.dolphinscheduler.alert.template.AlertTemplate;
import org.apache.dolphinscheduler.alert.utils.Constants; import org.apache.dolphinscheduler.alert.utils.Constants;
import org.apache.dolphinscheduler.common.enums.ShowType; import org.apache.dolphinscheduler.common.enums.ShowType;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.common.utils.StringUtils; import org.apache.dolphinscheduler.common.utils.StringUtils;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.apache.dolphinscheduler.common.utils.*;
import java.util.*;
import static org.apache.dolphinscheduler.common.utils.Preconditions.*; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
/** /**
* the default html alert message template * the default html alert message template
@ -37,7 +45,6 @@ public class DefaultHTMLTemplate implements AlertTemplate {
public static final Logger logger = LoggerFactory.getLogger(DefaultHTMLTemplate.class); public static final Logger logger = LoggerFactory.getLogger(DefaultHTMLTemplate.class);
@Override @Override
public String getMessageFromTemplate(String content, ShowType showType, boolean showAll) { public String getMessageFromTemplate(String content, ShowType showType, boolean showAll) {
@ -45,7 +52,7 @@ public class DefaultHTMLTemplate implements AlertTemplate {
case TABLE: case TABLE:
return getTableTypeMessage(content, showAll); return getTableTypeMessage(content, showAll);
case TEXT: case TEXT:
return getTextTypeMessage(content,showAll); return getTextTypeMessage(content);
default: default:
throw new IllegalArgumentException(String.format("not support showType: %s in DefaultHTMLTemplate", showType)); throw new IllegalArgumentException(String.format("not support showType: %s in DefaultHTMLTemplate", showType));
} }
@ -53,6 +60,7 @@ public class DefaultHTMLTemplate implements AlertTemplate {
/** /**
* get alert message which type is TABLE * get alert message which type is TABLE
*
* @param content message content * @param content message content
* @param showAll weather to show all * @param showAll weather to show all
* @return alert message * @return alert message
@ -73,9 +81,9 @@ public class DefaultHTMLTemplate implements AlertTemplate {
String title = ""; String title = "";
for (LinkedHashMap mapItems : mapItemsList) { for (LinkedHashMap mapItems : mapItemsList) {
Set<Map.Entry<String, Object>> entries = mapItems.entrySet(); Set<Entry<String, Object>> entries = mapItems.entrySet();
Iterator<Map.Entry<String, Object>> iterator = entries.iterator(); Iterator<Entry<String, Object>> iterator = entries.iterator();
StringBuilder t = new StringBuilder(Constants.TR); StringBuilder t = new StringBuilder(Constants.TR);
StringBuilder cs = new StringBuilder(Constants.TR); StringBuilder cs = new StringBuilder(Constants.TR);
@ -103,11 +111,11 @@ public class DefaultHTMLTemplate implements AlertTemplate {
/** /**
* get alert message which type is TEXT * get alert message which type is TEXT
*
* @param content message content * @param content message content
* @param showAll weather to show all
* @return alert message * @return alert message
*/ */
private String getTextTypeMessage(String content,boolean showAll){ private String getTextTypeMessage(String content) {
if (StringUtils.isNotEmpty(content)) { if (StringUtils.isNotEmpty(content)) {
ArrayNode list = JSONUtils.parseArray(content); ArrayNode list = JSONUtils.parseArray(content);
@ -127,6 +135,7 @@ public class DefaultHTMLTemplate implements AlertTemplate {
/** /**
* get alert message from a html template * get alert message from a html template
*
* @param title message title * @param title message title
* @param content message content * @param content message content
* @return alert message which use html template * @return alert message which use html template
@ -134,7 +143,7 @@ public class DefaultHTMLTemplate implements AlertTemplate {
private String getMessageFromHtmlTemplate(String title, String content) { private String getMessageFromHtmlTemplate(String title, String content) {
checkNotNull(content); checkNotNull(content);
String htmlTableThead = StringUtils.isEmpty(title) ? "" : String.format("<thead>%s</thead>\n",title); String htmlTableThead = StringUtils.isEmpty(title) ? "" : String.format("<thead>%s</thead>%n", title);
return Constants.HTML_HEADER_PREFIX + htmlTableThead + content + Constants.TABLE_BODY_HTML_TAIL; return Constants.HTML_HEADER_PREFIX + htmlTableThead + content + Constants.TABLE_BODY_HTML_TAIL;
} }

10
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/Constants.java

@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.dolphinscheduler.alert.utils; package org.apache.dolphinscheduler.alert.utils;
/** /**
@ -23,6 +24,7 @@ public class Constants {
private Constants() { private Constants() {
throw new IllegalStateException("Constants class"); throw new IllegalStateException("Constants class");
} }
/** /**
* alert properties path * alert properties path
*/ */
@ -174,7 +176,13 @@ public class Constants {
public static final String DINGTALK_ENABLE = "dingtalk.isEnable"; public static final String DINGTALK_ENABLE = "dingtalk.isEnable";
public static final String HTML_HEADER_PREFIX = "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'><html><head><title>dolphinscheduler</title><meta name='Keywords' content=''><meta name='Description' content=''><style type=\"text/css\">table {margin-top:0px;padding-top:0px;border:1px solid;font-size: 14px;color: #333333;border-width: 1px;border-color: #666666;border-collapse: collapse;}table th {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #dedede;text-align: left;}table td {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #ffffff;text-align: left;}</style></head><body style=\"margin:0;padding:0\"><table border=\"1px\" cellpadding=\"5px\" cellspacing=\"-10px\"> "; public static final String HTML_HEADER_PREFIX = "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>"
+ "<html><head><title>dolphinscheduler</title><meta name='Keywords' content=''>"
+ "<meta name='Description' content=''>"
+ "<style type=\"text/css\">table {margin-top:0px;padding-top:0px;border:1px solid;font-size: 14px;color: #333333;border-width: 1px;border-color: #666666;border-collapse: collapse;}"
+ "table th {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #dedede;text-align: left;}"
+ "table td {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #ffffff;text-align: left;}</style>"
+ "/head><body style=\"margin:0;padding:0\"><table border=\"1px\" cellpadding=\"5px\" cellspacing=\"-10px\"> ";
public static final String TABLE_BODY_HTML_TAIL = "</table></body></html>"; public static final String TABLE_BODY_HTML_TAIL = "</table></body></html>";

53
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/DingTalkUtils.java

@ -14,10 +14,11 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.dolphinscheduler.alert.utils;
package org.apache.dolphinscheduler.alert.utils;
import org.apache.dolphinscheduler.common.utils.*; import org.apache.dolphinscheduler.common.utils.*;
import org.apache.commons.codec.binary.StringUtils; import org.apache.commons.codec.binary.StringUtils;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpHost; import org.apache.http.HttpHost;
@ -32,44 +33,50 @@ import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* DingTalkUtils utils * DingTalkUtils utils
* support send msg to ding talk by robot message push function. * support send msg to ding talk by robot message push function.
* support proxy setting * support PROXY setting
*/ */
public class DingTalkUtils { public class DingTalkUtils {
public static final Logger logger = LoggerFactory.getLogger(DingTalkUtils.class); public static final Logger logger = LoggerFactory.getLogger(DingTalkUtils.class);
public static final boolean isEnableDingTalk = PropertyUtils.getBoolean(Constants.DINGTALK_ENABLE); public static final boolean IS_ENABLE_DING_TALK = PropertyUtils.getBoolean(Constants.DINGTALK_ENABLE);
private static final String dingTaskUrl = PropertyUtils.getString(Constants.DINGTALK_WEBHOOK); private static final String DING_TASK_URL = PropertyUtils.getString(Constants.DINGTALK_WEBHOOK);
private static final String keyword = PropertyUtils.getString(Constants.DINGTALK_KEYWORD); private static final String KEYWORD = PropertyUtils.getString(Constants.DINGTALK_KEYWORD);
private static final Boolean isEnableProxy = PropertyUtils.getBoolean(Constants.DINGTALK_PROXY_ENABLE); private static final Boolean IS_ENABLE_PROXY = PropertyUtils.getBoolean(Constants.DINGTALK_PROXY_ENABLE);
private static final String proxy = PropertyUtils.getString(Constants.DINGTALK_PROXY); private static final String PROXY = PropertyUtils.getString(Constants.DINGTALK_PROXY);
private static final String user = PropertyUtils.getString(Constants.DINGTALK_USER); private static final String USER = PropertyUtils.getString(Constants.DINGTALK_USER);
private static final String passwd = PropertyUtils.getString(Constants.DINGTALK_PASSWORD); private static final String PASSWD = PropertyUtils.getString(Constants.DINGTALK_PASSWORD);
private static final Integer port = PropertyUtils.getInt(Constants.DINGTALK_PORT); private static final Integer PORT = PropertyUtils.getInt(Constants.DINGTALK_PORT);
private DingTalkUtils() {
throw new IllegalStateException(DingTalkUtils.class.getName());
}
/** /**
* send message interface * send message interface
* only support text message format now. * only support text message format now.
*
* @param msg message context to send * @param msg message context to send
* @param charset charset type * @param charset charset type
* @return result of sending msg * @return result of sending msg
* @throws IOException the IOException * @throws IOException the IOException
*/ */
public static String sendDingTalkMsg(String msg, String charset) throws IOException { public static String sendDingTalkMsg(String msg, String charset) throws IOException {
String msgToJson = textToJsonString(msg + "#" + keyword); String msgToJson = textToJsonString(msg + "#" + KEYWORD);
HttpPost httpPost = constructHttpPost(msgToJson, charset); HttpPost httpPost = constructHttpPost(msgToJson, charset);
CloseableHttpClient httpClient; CloseableHttpClient httpClient;
if (isEnableProxy) { if (Boolean.TRUE.equals(IS_ENABLE_PROXY)) {
httpClient = getProxyClient(); httpClient = getProxyClient();
RequestConfig rcf = getProxyConfig(); RequestConfig rcf = getProxyConfig();
httpPost.setConfig(rcf); httpPost.setConfig(rcf);
@ -87,7 +94,7 @@ public class DingTalkUtils {
} finally { } finally {
response.close(); response.close();
} }
logger.info("Ding Talk send [{}], resp:{%s}", msg, resp); logger.info("Ding Talk send [{}], resp:{%s}", msg);
return resp; return resp;
} finally { } finally {
httpClient.close(); httpClient.close();
@ -95,20 +102,18 @@ public class DingTalkUtils {
} }
public static HttpPost constructHttpPost(String msg, String charset) { public static HttpPost constructHttpPost(String msg, String charset) {
HttpPost post = new HttpPost(dingTaskUrl); HttpPost post = new HttpPost(DING_TASK_URL);
StringEntity entity = new StringEntity(msg, charset); StringEntity entity = new StringEntity(msg, charset);
post.setEntity(entity); post.setEntity(entity);
post.addHeader("Content-Type", "application/json; charset=utf-8"); post.addHeader("Content-Type", "application/json; charset=utf-8");
return post; return post;
} }
public static CloseableHttpClient getProxyClient() { public static CloseableHttpClient getProxyClient() {
HttpHost httpProxy = new HttpHost(proxy, port); HttpHost httpProxy = new HttpHost(PROXY, PORT);
CredentialsProvider provider = new BasicCredentialsProvider(); CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(new AuthScope(httpProxy), new UsernamePasswordCredentials(user, passwd)); provider.setCredentials(new AuthScope(httpProxy), new UsernamePasswordCredentials(USER, PASSWD));
CloseableHttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(provider).build(); return HttpClients.custom().setDefaultCredentialsProvider(provider).build();
return httpClient;
} }
public static CloseableHttpClient getDefaultClient() { public static CloseableHttpClient getDefaultClient() {
@ -116,14 +121,14 @@ public class DingTalkUtils {
} }
public static RequestConfig getProxyConfig() { public static RequestConfig getProxyConfig() {
HttpHost httpProxy = new HttpHost(proxy, port); HttpHost httpProxy = new HttpHost(PROXY, PORT);
return RequestConfig.custom().setProxy(httpProxy).build(); return RequestConfig.custom().setProxy(httpProxy).build();
} }
public static String textToJsonString(String text) { public static String textToJsonString(String text) {
Map<String, Object> items = new HashMap<String, Object>(); Map<String, Object> items = new HashMap<>();
items.put("msgtype", "text"); items.put("msgtype", "text");
Map<String, String> textContent = new HashMap<String, String>(); Map<String, String> textContent = new HashMap<>();
byte[] byt = StringUtils.getBytesUtf8(text); byte[] byt = StringUtils.getBytesUtf8(text);
String txt = StringUtils.newStringUtf8(byt); String txt = StringUtils.newStringUtf8(byt);
textContent.put("content", txt); textContent.put("content", txt);

30
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/EnterpriseWeChatUtils.java

@ -60,9 +60,13 @@ public class EnterpriseWeChatUtils {
private static final String ENTERPRISE_WE_CHAT_TEAM_SEND_MSG = PropertyUtils.getString(Constants.ENTERPRISE_WECHAT_TEAM_SEND_MSG); private static final String ENTERPRISE_WE_CHAT_TEAM_SEND_MSG = PropertyUtils.getString(Constants.ENTERPRISE_WECHAT_TEAM_SEND_MSG);
private static final String ENTERPRISE_WE_CHAT_USER_SEND_MSG = PropertyUtils.getString(Constants.ENTERPRISE_WECHAT_USER_SEND_MSG); private static final String ENTERPRISE_WE_CHAT_USER_SEND_MSG = PropertyUtils.getString(Constants.ENTERPRISE_WECHAT_USER_SEND_MSG);
private static final String agentIdRegExp = "\\{agentId}"; private static final String AGENT_ID_REG_EXP = "\\{agentId}";
private static final String msgRegExp = "\\{msg}"; private static final String MSG_REG_EXP = "\\{msg}";
private static final String userRegExp = "\\{toUser}"; private static final String USER_REG_EXP = "\\{toUser}";
private EnterpriseWeChatUtils() {
throw new IllegalStateException(EnterpriseWeChatUtils.class.getName());
}
/** /**
* get Enterprise WeChat is enable * get Enterprise WeChat is enable
@ -120,8 +124,8 @@ public class EnterpriseWeChatUtils {
*/ */
public static String makeTeamSendMsg(String toParty, String agentId, String msg) { public static String makeTeamSendMsg(String toParty, String agentId, String msg) {
return ENTERPRISE_WE_CHAT_TEAM_SEND_MSG.replaceAll("\\{toParty}", toParty) return ENTERPRISE_WE_CHAT_TEAM_SEND_MSG.replaceAll("\\{toParty}", toParty)
.replaceAll(agentIdRegExp, agentId) .replaceAll(AGENT_ID_REG_EXP, agentId)
.replaceAll(msgRegExp, msg); .replaceAll(MSG_REG_EXP, msg);
} }
/** /**
@ -135,8 +139,8 @@ public class EnterpriseWeChatUtils {
public static String makeTeamSendMsg(Collection<String> toParty, String agentId, String msg) { public static String makeTeamSendMsg(Collection<String> toParty, String agentId, String msg) {
String listParty = FuncUtils.mkString(toParty, "|"); String listParty = FuncUtils.mkString(toParty, "|");
return ENTERPRISE_WE_CHAT_TEAM_SEND_MSG.replaceAll("\\{toParty}", listParty) return ENTERPRISE_WE_CHAT_TEAM_SEND_MSG.replaceAll("\\{toParty}", listParty)
.replaceAll(agentIdRegExp, agentId) .replaceAll(AGENT_ID_REG_EXP, agentId)
.replaceAll(msgRegExp, msg); .replaceAll(MSG_REG_EXP, msg);
} }
/** /**
@ -148,9 +152,9 @@ public class EnterpriseWeChatUtils {
* @return Enterprise WeChat send message * @return Enterprise WeChat send message
*/ */
public static String makeUserSendMsg(String toUser, String agentId, String msg) { public static String makeUserSendMsg(String toUser, String agentId, String msg) {
return ENTERPRISE_WE_CHAT_USER_SEND_MSG.replaceAll("\\{toUser}", toUser) return ENTERPRISE_WE_CHAT_USER_SEND_MSG.replaceAll(USER_REG_EXP, toUser)
.replaceAll(agentIdRegExp, agentId) .replaceAll(AGENT_ID_REG_EXP, agentId)
.replaceAll(msgRegExp, msg); .replaceAll(MSG_REG_EXP, msg);
} }
/** /**
@ -163,9 +167,9 @@ public class EnterpriseWeChatUtils {
*/ */
public static String makeUserSendMsg(Collection<String> toUser, String agentId, String msg) { public static String makeUserSendMsg(Collection<String> toUser, String agentId, String msg) {
String listUser = FuncUtils.mkString(toUser, "|"); String listUser = FuncUtils.mkString(toUser, "|");
return ENTERPRISE_WE_CHAT_USER_SEND_MSG.replaceAll(userRegExp, listUser) return ENTERPRISE_WE_CHAT_USER_SEND_MSG.replaceAll(USER_REG_EXP, listUser)
.replaceAll(agentIdRegExp, agentId) .replaceAll(AGENT_ID_REG_EXP, agentId)
.replaceAll(msgRegExp, msg); .replaceAll(MSG_REG_EXP, msg);
} }
/** /**

25
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/ExcelUtils.java

@ -14,23 +14,29 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.dolphinscheduler.alert.utils; package org.apache.dolphinscheduler.alert.utils;
import org.apache.dolphinscheduler.common.utils.CollectionUtils; import org.apache.dolphinscheduler.common.utils.CollectionUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.ArrayList;
import org.apache.dolphinscheduler.common.utils.*; import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* excel utils * excel utils
@ -38,8 +44,14 @@ import org.apache.dolphinscheduler.common.utils.*;
public class ExcelUtils { public class ExcelUtils {
private static final Logger logger = LoggerFactory.getLogger(ExcelUtils.class); private static final Logger logger = LoggerFactory.getLogger(ExcelUtils.class);
private ExcelUtils() {
throw new IllegalStateException(ExcelUtils.class.getName());
}
/** /**
* generate excel file * generate excel file
*
* @param content the content * @param content the content
* @param title the title * @param title the title
* @param xlsFilePath the xls path * @param xlsFilePath the xls path
@ -59,9 +71,7 @@ public class ExcelUtils {
List<String> headerList = new ArrayList<>(); List<String> headerList = new ArrayList<>();
Iterator<Map.Entry<String, Object>> iter = headerMap.entrySet().iterator(); for (Map.Entry<String, Object> en : headerMap.entrySet()) {
while (iter.hasNext()){
Map.Entry<String, Object> en = iter.next();
headerList.add(en.getKey()); headerList.add(en.getKey());
} }
@ -117,7 +127,6 @@ public class ExcelUtils {
wb.write(fos); wb.write(fos);
} catch (Exception e) { } catch (Exception e) {
logger.error("generate excel error",e);
throw new RuntimeException("generate excel error", e); throw new RuntimeException("generate excel error", e);
} finally { } finally {
if (wb != null) { if (wb != null) {

5
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/FuncUtils.java

@ -14,12 +14,17 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.dolphinscheduler.alert.utils; package org.apache.dolphinscheduler.alert.utils;
import org.apache.dolphinscheduler.common.utils.StringUtils; import org.apache.dolphinscheduler.common.utils.StringUtils;
public class FuncUtils { public class FuncUtils {
private FuncUtils() {
throw new IllegalStateException(FuncUtils.class.getName());
}
public static String mkString(Iterable<String> list, String split) { public static String mkString(Iterable<String> list, String split) {
if (null == list || StringUtils.isEmpty(split)) { if (null == list || StringUtils.isEmpty(split)) {

69
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/MailUtils.java

@ -14,23 +14,39 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.dolphinscheduler.alert.utils; package org.apache.dolphinscheduler.alert.utils;
import org.apache.dolphinscheduler.alert.template.AlertTemplate; import org.apache.dolphinscheduler.alert.template.AlertTemplate;
import org.apache.dolphinscheduler.alert.template.AlertTemplateFactory; import org.apache.dolphinscheduler.alert.template.AlertTemplateFactory;
import org.apache.dolphinscheduler.common.enums.ShowType; import org.apache.dolphinscheduler.common.enums.ShowType;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.dolphinscheduler.common.utils.CollectionUtils; import org.apache.dolphinscheduler.common.utils.CollectionUtils;
import org.apache.dolphinscheduler.common.utils.StringUtils; import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.mail.*; import org.apache.commons.mail.EmailException;
import javax.mail.internet.*; import org.apache.commons.mail.HtmlEmail;
import java.io.*;
import java.util.*; import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* mail utils * mail utils
@ -55,7 +71,7 @@ public class MailUtils {
public static final Boolean MAIL_USE_SSL = PropertyUtils.getBoolean(Constants.MAIL_SMTP_SSL_ENABLE); public static final Boolean MAIL_USE_SSL = PropertyUtils.getBoolean(Constants.MAIL_SMTP_SSL_ENABLE);
public static final String xlsFilePath = PropertyUtils.getString(Constants.XLS_FILE_PATH,"/tmp/xls"); public static final String XLS_FILE_PATH = PropertyUtils.getString(Constants.XLS_FILE_PATH, "/tmp/xls");
public static final String STARTTLS_ENABLE = PropertyUtils.getString(Constants.MAIL_SMTP_STARTTLS_ENABLE); public static final String STARTTLS_ENABLE = PropertyUtils.getString(Constants.MAIL_SMTP_STARTTLS_ENABLE);
@ -70,8 +86,13 @@ public class MailUtils {
System.setProperty("mail.mime.splitlongparameters", "false"); System.setProperty("mail.mime.splitlongparameters", "false");
} }
private MailUtils() {
throw new IllegalStateException(MailUtils.class.getName());
}
/** /**
* send mail to receivers * send mail to receivers
*
* @param receivers the receiver list * @param receivers the receiver list
* @param title the title * @param title the title
* @param content the content * @param content the content
@ -84,6 +105,7 @@ public class MailUtils {
/** /**
* send mail * send mail
*
* @param receivers the receiver list * @param receivers the receiver list
* @param receiversCc cc list * @param receiversCc cc list
* @param title the title * @param title the title
@ -149,6 +171,7 @@ public class MailUtils {
/** /**
* html table content * html table content
*
* @param content the content * @param content the content
* @param showAll if show the whole content * @param showAll if show the whole content
* @return the html table form * @return the html table form
@ -159,6 +182,7 @@ public class MailUtils {
/** /**
* html table content * html table content
*
* @param content the content * @param content the content
* @return the html table form * @return the html table form
*/ */
@ -168,6 +192,7 @@ public class MailUtils {
/** /**
* html text content * html text content
*
* @param content the content * @param content the content
* @return text in html form * @return text in html form
*/ */
@ -177,9 +202,9 @@ public class MailUtils {
/** /**
* send mail as Excel attachment * send mail as Excel attachment
*
* @param receivers the receiver list * @param receivers the receiver list
* @param title the title * @param title the title
* @throws Exception
*/ */
private static void attachment(Collection<String> receivers, Collection<String> receiversCc, String title, String content, String partContent) throws Exception { private static void attachment(Collection<String> receivers, Collection<String> receiversCc, String title, String content, String partContent) throws Exception {
MimeMessage msg = getMimeMessage(receivers); MimeMessage msg = getMimeMessage(receivers);
@ -189,9 +214,9 @@ public class MailUtils {
/** /**
* get MimeMessage * get MimeMessage
*
* @param receivers receivers * @param receivers receivers
* @return the MimeMessage * @return the MimeMessage
* @throws MessagingException
*/ */
private static MimeMessage getMimeMessage(Collection<String> receivers) throws MessagingException { private static MimeMessage getMimeMessage(Collection<String> receivers) throws MessagingException {
@ -223,7 +248,7 @@ public class MailUtils {
props.setProperty(Constants.MAIL_SMTP_AUTH, Constants.STRING_TRUE); props.setProperty(Constants.MAIL_SMTP_AUTH, Constants.STRING_TRUE);
props.setProperty(Constants.MAIL_TRANSPORT_PROTOCOL, MAIL_PROTOCOL); props.setProperty(Constants.MAIL_TRANSPORT_PROTOCOL, MAIL_PROTOCOL);
props.setProperty(Constants.MAIL_SMTP_STARTTLS_ENABLE, STARTTLS_ENABLE); props.setProperty(Constants.MAIL_SMTP_STARTTLS_ENABLE, STARTTLS_ENABLE);
if (SSL_ENABLE) { if (Boolean.TRUE.equals(SSL_ENABLE)) {
props.setProperty(Constants.MAIL_SMTP_SSL_ENABLE, "true"); props.setProperty(Constants.MAIL_SMTP_SSL_ENABLE, "true");
props.setProperty(Constants.MAIL_SMTP_SSL_TRUST, SSL_TRUST); props.setProperty(Constants.MAIL_SMTP_SSL_TRUST, SSL_TRUST);
} }
@ -241,16 +266,15 @@ public class MailUtils {
/** /**
* attach content * attach content
*
* @param receiversCc the cc list * @param receiversCc the cc list
* @param title the title * @param title the title
* @param content the content * @param content the content
* @param partContent the partContent * @param partContent the partContent
* @param msg the message * @param msg the message
* @throws MessagingException
* @throws IOException
*/ */
private static void attachContent(Collection<String> receiversCc, String title, String content, String partContent, MimeMessage msg) throws MessagingException, IOException { private static void attachContent(Collection<String> receiversCc, String title, String content, String partContent, MimeMessage msg) throws MessagingException, IOException {
/** /*
* set receiverCc * set receiverCc
*/ */
if (CollectionUtils.isNotEmpty(receiversCc)) { if (CollectionUtils.isNotEmpty(receiversCc)) {
@ -267,13 +291,13 @@ public class MailUtils {
part1.setContent(partContent, Constants.TEXT_HTML_CHARSET_UTF_8); part1.setContent(partContent, Constants.TEXT_HTML_CHARSET_UTF_8);
// set attach file // set attach file
MimeBodyPart part2 = new MimeBodyPart(); MimeBodyPart part2 = new MimeBodyPart();
File file = new File(xlsFilePath + Constants.SINGLE_SLASH + title + Constants.EXCEL_SUFFIX_XLS); File file = new File(XLS_FILE_PATH + Constants.SINGLE_SLASH + title + Constants.EXCEL_SUFFIX_XLS);
if (!file.getParentFile().exists()) { if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs(); file.getParentFile().mkdirs();
} }
// make excel file // make excel file
ExcelUtils.genExcelFile(content,title,xlsFilePath); ExcelUtils.genExcelFile(content, title, XLS_FILE_PATH);
part2.attachFile(file); part2.attachFile(file);
part2.setFileName(MimeUtility.encodeText(title + Constants.EXCEL_SUFFIX_XLS, Constants.UTF_8, "B")); part2.setFileName(MimeUtility.encodeText(title + Constants.EXCEL_SUFFIX_XLS, Constants.UTF_8, "B"));
@ -289,21 +313,21 @@ public class MailUtils {
/** /**
* the string object map * the string object map
*
* @param title the title * @param title the title
* @param content the content * @param content the content
* @param showType the showType * @param showType the showType
* @param retMap the result map * @param retMap the result map
* @param email the email * @param email the email
* @return the result map * @return the result map
* @throws EmailException
*/ */
private static Map<String, Object> getStringObjectMap(String title, String content, String showType, Map<String, Object> retMap, HtmlEmail email) throws EmailException { private static Map<String, Object> getStringObjectMap(String title, String content, String showType, Map<String, Object> retMap, HtmlEmail email) throws EmailException {
/** /*
* the subject of the message to be sent * the subject of the message to be sent
*/ */
email.setSubject(title); email.setSubject(title);
/** /*
* to send information, you can use HTML tags in mail content because of the use of HtmlEmail * to send information, you can use HTML tags in mail content because of the use of HtmlEmail
*/ */
if (showType.equals(ShowType.TABLE.getDescp())) { if (showType.equals(ShowType.TABLE.getDescp())) {
@ -322,6 +346,7 @@ public class MailUtils {
/** /**
* file delete * file delete
*
* @param file the file to delete * @param file the file to delete
*/ */
public static void deleteFile(File file) { public static void deleteFile(File file) {
@ -336,9 +361,9 @@ public class MailUtils {
} }
} }
/** /**
* handle exception * handle exception
*
* @param receivers the receiver list * @param receivers the receiver list
* @param retMap the result map * @param retMap the result map
* @param e the exception * @param e the exception
@ -347,6 +372,4 @@ public class MailUtils {
logger.error("Send email to {} failed", receivers, e); logger.error("Send email to {} failed", receivers, e);
retMap.put(Constants.MESSAGE, "Send email to {" + String.join(",", receivers) + "} failed," + e.toString()); retMap.put(Constants.MESSAGE, "Send email to {" + String.join(",", receivers) + "} failed," + e.toString());
} }
} }

21
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/PropertyUtils.java

@ -14,19 +14,21 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.dolphinscheduler.alert.utils; package org.apache.dolphinscheduler.alert.utils;
import static org.apache.dolphinscheduler.alert.utils.Constants.ALERT_PROPERTIES_PATH;
import org.apache.dolphinscheduler.common.utils.IOUtils; import org.apache.dolphinscheduler.common.utils.IOUtils;
import org.apache.dolphinscheduler.common.utils.StringUtils; import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Properties; import java.util.Properties;
import java.util.regex.PatternSyntaxException; import java.util.regex.PatternSyntaxException;
import static org.apache.dolphinscheduler.alert.utils.Constants.ALERT_PROPERTIES_PATH; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* property utils * property utils
@ -41,8 +43,6 @@ public class PropertyUtils {
private static final Properties properties = new Properties(); private static final Properties properties = new Properties();
private static final PropertyUtils propertyUtils = new PropertyUtils();
private PropertyUtils() { private PropertyUtils() {
init(); init();
} }
@ -69,6 +69,7 @@ public class PropertyUtils {
/** /**
* get property value * get property value
*
* @param key property name * @param key property name
* @return the value * @return the value
*/ */
@ -104,6 +105,7 @@ public class PropertyUtils {
/** /**
* get int value * get int value
*
* @param key the key * @param key the key
* @param defaultValue the default value * @param defaultValue the default value
* @return the value related the key or the default value if the key not existed * @return the value related the key or the default value if the key not existed
@ -124,6 +126,7 @@ public class PropertyUtils {
/** /**
* get property value * get property value
*
* @param key property name * @param key property name
* @return the boolean result value * @return the boolean result value
*/ */
@ -143,6 +146,7 @@ public class PropertyUtils {
/** /**
* get long value * get long value
*
* @param key the key * @param key the key
* @return if the value not existed, return -1, or will return the related value * @return if the value not existed, return -1, or will return the related value
*/ */
@ -152,6 +156,7 @@ public class PropertyUtils {
/** /**
* get long value * get long value
*
* @param key the key * @param key the key
* @param defaultVal the default value * @param defaultVal the default value
* @return the value related the key or the default value if the key not existed * @return the value related the key or the default value if the key not existed
@ -174,16 +179,17 @@ public class PropertyUtils {
/** /**
* get double value * get double value
*
* @param key the key * @param key the key
* @return if the value not existed, return -1.0, or will return the related value * @return if the value not existed, return -1.0, or will return the related value
*/ */
public static double getDouble(String key) { public static double getDouble(String key) {
String val = getString(key);
return getDouble(key, -1.0); return getDouble(key, -1.0);
} }
/** /**
* get double value * get double value
*
* @param key the key * @param key the key
* @param defaultVal the default value * @param defaultVal the default value
* @return the value related the key or the default value if the key not existed * @return the value related the key or the default value if the key not existed
@ -204,9 +210,9 @@ public class PropertyUtils {
return defaultVal; return defaultVal;
} }
/** /**
* get array * get array
*
* @param key property name * @param key property name
* @param splitStr separator * @param splitStr separator
* @return the result array * @return the result array
@ -226,6 +232,7 @@ public class PropertyUtils {
/** /**
* get enum * get enum
*
* @param key the key * @param key the key
* @param type the class type * @param type the class type
* @param defaultValue the default value * @param defaultValue the default value

8
dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/DingTalkUtilsTest.java

@ -32,8 +32,6 @@ import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import static org.junit.Assert.*;
@PrepareForTest(PropertyUtils.class) @PrepareForTest(PropertyUtils.class)
@RunWith(PowerMockRunner.class) @RunWith(PowerMockRunner.class)
@PowerMockIgnore("javax.net.ssl.*") @PowerMockIgnore("javax.net.ssl.*")
@ -97,8 +95,8 @@ public class DingTalkUtilsTest {
@Test @Test
public void testProxyConfig() { public void testProxyConfig() {
RequestConfig rc = DingTalkUtils.getProxyConfig(); RequestConfig rc = DingTalkUtils.getProxyConfig();
Assert.assertEquals(rc.getProxy().getPort(), 80); Assert.assertEquals(80, rc.getProxy().getPort());
Assert.assertEquals(rc.getProxy().getHostName(), "proxy.com.cn"); Assert.assertEquals("proxy.com.cn", rc.getProxy().getHostName());
} }
@Test @Test
@ -114,7 +112,7 @@ public class DingTalkUtilsTest {
String msg = DingTalkUtils.textToJsonString("this is test:中文"); String msg = DingTalkUtils.textToJsonString("this is test:中文");
logger.info("test support utf8, actual:" + msg); logger.info("test support utf8, actual:" + msg);
logger.info("test support utf8, actual:" + DingTalkUtils.isEnableDingTalk); logger.info("test support utf8, actual:" + DingTalkUtils.IS_ENABLE_DING_TALK);
String expect = "{\"text\":{\"content\":\"this is test:中文\"},\"msgtype\":\"text\"}"; String expect = "{\"text\":{\"content\":\"this is test:中文\"},\"msgtype\":\"text\"}";
Assert.assertEquals(expect, msg); Assert.assertEquals(expect, msg);
} }

8
dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/ExcelUtilsTest.java

@ -17,6 +17,10 @@
package org.apache.dolphinscheduler.alert.utils; package org.apache.dolphinscheduler.alert.utils;
import static org.junit.Assert.assertTrue;
import java.io.File;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
@ -25,8 +29,6 @@ import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder; import org.junit.rules.TemporaryFolder;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.File;
import static org.junit.Assert.assertTrue;
public class ExcelUtilsTest { public class ExcelUtilsTest {
@ -61,7 +63,7 @@ public class ExcelUtilsTest {
//Define dest file path //Define dest file path
String xlsFilePath = rootPath + System.getProperty("file.separator"); String xlsFilePath = rootPath + System.getProperty("file.separator");
logger.info("xlsFilePath: "+xlsFilePath); logger.info("XLS_FILE_PATH: " + xlsFilePath);
//Define correctContent //Define correctContent
String correctContent = "[{\"name\":\"ds name\",\"value\":\"ds value\"}]"; String correctContent = "[{\"name\":\"ds name\",\"value\":\"ds value\"}]";

48
dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/PropertyUtilsTest.java

@ -41,11 +41,11 @@ public class PropertyUtilsTest {
//Expected "EMAIL" //Expected "EMAIL"
String result = PropertyUtils.getString("alert.type"); String result = PropertyUtils.getString("alert.type");
logger.info(result); logger.info(result);
assertEquals(result, "EMAIL"); assertEquals("EMAIL", result);
//Expected "xxx.xxx.test" //Expected "xxx.xxx.test"
result = PropertyUtils.getString("mail.server.host"); result = PropertyUtils.getString("mail.server.host");
assertEquals(result, "xxx.xxx.test"); assertEquals("xxx.xxx.test", result);
//If key is undefine in alert.properties, then return null //If key is undefine in alert.properties, then return null
result = PropertyUtils.getString("abc"); result = PropertyUtils.getString("abc");
@ -88,23 +88,23 @@ public class PropertyUtilsTest {
//Expected 25 //Expected 25
long result = PropertyUtils.getLong("mail.server.port"); long result = PropertyUtils.getLong("mail.server.port");
assertSame(result, 25L); assertSame(25L, result);
//If key is null, then return -1 //If key is null, then return -1
result = PropertyUtils.getLong(null); result = PropertyUtils.getLong(null);
assertSame(result, -1L); assertSame(-1L, result);
//If key is undefine in alert.properties, then return -1 //If key is undefine in alert.properties, then return -1
result = PropertyUtils.getLong("abc"); result = PropertyUtils.getLong("abc");
assertSame(result, -1L); assertSame(-1L, result);
//If key is undefine in alert.properties, and there is a defaultval, then return defaultval //If key is undefine in alert.properties, and there is a defaultval, then return defaultval
result = PropertyUtils.getLong("abc", 200); result = PropertyUtils.getLong("abc", 200);
assertEquals(result, 200L); assertEquals(200L, result);
//If the value can not parse to long ,it will log the error and return -1L //If the value can not parse to long ,it will log the error and return -1L
result = PropertyUtils.getLong("test.server.testnumber"); result = PropertyUtils.getLong("test.server.testnumber");
assertSame(result, -1L); assertSame(-1L, result);
} }
/** /**
@ -115,23 +115,23 @@ public class PropertyUtilsTest {
//Expected 3.0 //Expected 3.0
double result = PropertyUtils.getDouble("test.server.factor"); double result = PropertyUtils.getDouble("test.server.factor");
assertEquals(result, 3.0, 0); assertEquals(3.0, result, 0);
//If key is null, then return -1.0 //If key is null, then return -1.0
result = PropertyUtils.getDouble(null); result = PropertyUtils.getDouble(null);
assertEquals(result, -1.0, 0); assertEquals(-1.0, result, 0);
//If key is undefine in alert.properties, then return -1 //If key is undefine in alert.properties, then return -1
result = PropertyUtils.getDouble("abc"); result = PropertyUtils.getDouble("abc");
assertEquals(result, -1.0, 0); assertEquals(-1.0, result, 0);
//If key is undefine in alert.properties, and there is a defaultval, then return defaultval //If key is undefine in alert.properties, and there is a defaultval, then return defaultval
result = PropertyUtils.getDouble("abc", 5.0); result = PropertyUtils.getDouble("abc", 5.0);
assertEquals(result, 5.0, 0); assertEquals(5.0, result, 0);
//If the value can not parse to double ,it will log the error and return -1.0 //If the value can not parse to double ,it will log the error and return -1.0
result = PropertyUtils.getDouble("test.server.testnumber"); result = PropertyUtils.getDouble("test.server.testnumber");
assertEquals(result, -1.0, 0); assertEquals(-1.0, result, 0);
} }
/** /**
@ -145,9 +145,9 @@ public class PropertyUtilsTest {
assertEquals(result.length, 3); assertEquals(result.length, 3);
//Equal array values //Equal array values
assertEquals(result[0], "xxx.xxx.test1"); assertEquals("xxx.xxx.test1", result[0]);
assertEquals(result[1], "xxx.xxx.test2"); assertEquals("xxx.xxx.test2", result[1]);
assertEquals(result[2], "xxx.xxx.test3"); assertEquals("xxx.xxx.test3", result[2]);
//If key is null, then return -1 //If key is null, then return -1
result = PropertyUtils.getArray(null, ","); result = PropertyUtils.getArray(null, ",");
@ -170,23 +170,23 @@ public class PropertyUtilsTest {
//Expected 25 //Expected 25
int result = PropertyUtils.getInt("mail.server.port"); int result = PropertyUtils.getInt("mail.server.port");
assertSame(result, 25); assertSame(25, result);
//If key is null, then return -1 //If key is null, then return -1
result = PropertyUtils.getInt(null); result = PropertyUtils.getInt(null);
assertSame(result, -1); assertSame(-1, result);
//If key is undefine in alert.properties, then return -1 //If key is undefine in alert.properties, then return -1
result = PropertyUtils.getInt("abc"); result = PropertyUtils.getInt("abc");
assertSame(result, -1); assertSame(-1, result);
//If key is undefine in alert.properties, and there is a defaultval, then return defaultval //If key is undefine in alert.properties, and there is a defaultval, then return defaultval
result = PropertyUtils.getInt("abc", 300); result = PropertyUtils.getInt("abc", 300);
assertEquals(result, 300); assertEquals(300, result);
//If the value can not parse to int ,it will log the error and return -1 //If the value can not parse to int ,it will log the error and return -1
result = PropertyUtils.getInt("test.server.testnumber"); result = PropertyUtils.getInt("test.server.testnumber");
assertSame(result, -1); assertSame(-1, result);
} }
/** /**
@ -197,19 +197,19 @@ public class PropertyUtilsTest {
//Expected MASTER //Expected MASTER
ZKNodeType zkNodeType = PropertyUtils.getEnum("test.server.enum1", ZKNodeType.class,ZKNodeType.WORKER); ZKNodeType zkNodeType = PropertyUtils.getEnum("test.server.enum1", ZKNodeType.class,ZKNodeType.WORKER);
assertEquals(zkNodeType, ZKNodeType.MASTER); assertEquals(ZKNodeType.MASTER, zkNodeType);
//Expected DEAD_SERVER //Expected DEAD_SERVER
zkNodeType = PropertyUtils.getEnum("test.server.enum2", ZKNodeType.class,ZKNodeType.WORKER); zkNodeType = PropertyUtils.getEnum("test.server.enum2", ZKNodeType.class,ZKNodeType.WORKER);
assertEquals(zkNodeType, ZKNodeType.DEAD_SERVER); assertEquals(ZKNodeType.DEAD_SERVER, zkNodeType);
//If key is null, then return defaultval //If key is null, then return defaultval
zkNodeType = PropertyUtils.getEnum(null, ZKNodeType.class,ZKNodeType.WORKER); zkNodeType = PropertyUtils.getEnum(null, ZKNodeType.class,ZKNodeType.WORKER);
assertEquals(zkNodeType, ZKNodeType.WORKER); assertEquals(ZKNodeType.WORKER, zkNodeType);
//If the value doesn't define in enum ,it will log the error and return -1 //If the value doesn't define in enum ,it will log the error and return -1
zkNodeType = PropertyUtils.getEnum("test.server.enum3", ZKNodeType.class,ZKNodeType.WORKER); zkNodeType = PropertyUtils.getEnum("test.server.enum3", ZKNodeType.class,ZKNodeType.WORKER);
assertEquals(zkNodeType, ZKNodeType.WORKER); assertEquals(ZKNodeType.WORKER, zkNodeType);
} }
} }
Loading…
Cancel
Save