diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-api/src/main/java/org/apache/dolphinscheduler/alert/api/ShowType.java b/dolphinscheduler-alert/dolphinscheduler-alert-api/src/main/java/org/apache/dolphinscheduler/alert/api/ShowType.java index bb1b1b2afb..2f1b4f2b4b 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-api/src/main/java/org/apache/dolphinscheduler/alert/api/ShowType.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-api/src/main/java/org/apache/dolphinscheduler/alert/api/ShowType.java @@ -25,11 +25,13 @@ public enum ShowType { * 1 TEXT; * 2 attachment; * 3 TABLE+attachment; + * 4 MARKDOWN; */ TABLE(0, "table"), TEXT(1, "text"), ATTACHMENT(2, "attachment"), - TABLE_ATTACHMENT(3, "table attachment"); + TABLE_ATTACHMENT(3, "table attachment"), + MARKDOWN(4, "markdown"),; private final int code; private final String descp; diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatAlertChannelFactory.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatAlertChannelFactory.java index a77daf7e45..39a4a8159f 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatAlertChannelFactory.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatAlertChannelFactory.java @@ -56,14 +56,14 @@ public final class WeChatAlertChannelFactory implements AlertChannelFactory { .build(); InputParam usersParam = InputParam.newBuilder(WeChatAlertParamsConstants.NAME_ENTERPRISE_WE_CHAT_USERS, WeChatAlertParamsConstants.ENTERPRISE_WE_CHAT_USERS) - .setPlaceholder("please input users ") + .setPlaceholder("use `|` to separate userIds and `@all` to everyone ") .addValidate(Validate.newBuilder() - .setRequired(true) + .setRequired(false) .build()) .build(); InputParam agentIdParam = InputParam.newBuilder(WeChatAlertParamsConstants.NAME_ENTERPRISE_WE_CHAT_AGENT_ID, WeChatAlertParamsConstants.ENTERPRISE_WE_CHAT_AGENT_ID) - .setPlaceholder("please input agent id ") + .setPlaceholder("please input agent id or chat id ") .addValidate(Validate.newBuilder() .setRequired(true) .build()) @@ -77,9 +77,9 @@ public final class WeChatAlertChannelFactory implements AlertChannelFactory { .build(); RadioParam showType = RadioParam.newBuilder(AlertConstants.NAME_SHOW_TYPE, AlertConstants.SHOW_TYPE) - .addParamsOptions(new ParamsOptions(ShowType.TABLE.getDescp(), ShowType.TABLE.getDescp(), false)) + .addParamsOptions(new ParamsOptions(ShowType.MARKDOWN.getDescp(), ShowType.MARKDOWN.getDescp(), false)) .addParamsOptions(new ParamsOptions(ShowType.TEXT.getDescp(), ShowType.TEXT.getDescp(), false)) - .setValue(ShowType.TABLE.getDescp()) + .setValue(ShowType.MARKDOWN.getDescp()) .addValidate(Validate.newBuilder().setRequired(true).build()) .build(); diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatAlertParamsConstants.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatAlertParamsConstants.java index db9813dab8..d8085b901f 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatAlertParamsConstants.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatAlertParamsConstants.java @@ -24,9 +24,8 @@ public final class WeChatAlertParamsConstants { static final String NAME_ENTERPRISE_WE_CHAT_SECRET = "secret"; static final String ENTERPRISE_WE_CHAT_TEAM_SEND_MSG = "$t('teamSendMsg')"; static final String NAME_ENTERPRISE_WE_CHAT_TEAM_SEND_MSG = "teamSendMsg"; - static final String ENTERPRISE_WE_CHAT_AGENT_ID = "$t('agentId')"; - static final String NAME_ENTERPRISE_WE_CHAT_AGENT_ID = "agentId"; - static final String NAME_ENTERPRISE_WE_CHAT_CHAT_ID = "chatId"; + static final String ENTERPRISE_WE_CHAT_AGENT_ID = "$t('agentId/chatId')"; + static final String NAME_ENTERPRISE_WE_CHAT_AGENT_ID = "agentId/chatId"; static final String ENTERPRISE_WE_CHAT_USERS = "$t('users')"; static final String NAME_ENTERPRISE_WE_CHAT_USERS = "users"; diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatSender.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatSender.java index 8dfdf50986..b8ed73d587 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatSender.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WeChatSender.java @@ -17,15 +17,10 @@ package org.apache.dolphinscheduler.plugin.alert.wechat; -import static java.util.Objects.requireNonNull; -import static org.apache.dolphinscheduler.plugin.alert.wechat.WeChatAlertConstants.*; - import org.apache.dolphinscheduler.alert.api.AlertConstants; import org.apache.dolphinscheduler.alert.api.AlertResult; -import org.apache.dolphinscheduler.alert.api.ShowType; import org.apache.dolphinscheduler.spi.utils.JSONUtils; import org.apache.dolphinscheduler.spi.utils.StringUtils; - import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; @@ -34,18 +29,20 @@ import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.HashMap; -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.LoggerFactory; + +import static java.util.Objects.requireNonNull; +import static org.apache.dolphinscheduler.plugin.alert.wechat.WeChatAlertConstants.*; public final class WeChatSender { private static final Logger logger = LoggerFactory.getLogger(WeChatSender.class); @@ -57,8 +54,7 @@ public final class WeChatSender { private static final String CORP_ID_REGEX = "{corpId}"; private static final String SECRET_REGEX = "{secret}"; private static final String TOKEN_REGEX = "{token}"; - private final String weChatAgentId; - private final String weChatChatId; + private final String weChatAgentIdChatId; private final String weChatUsers; private final String weChatTokenUrlReplace; private final String weChatToken; @@ -66,8 +62,7 @@ public final class WeChatSender { private final String showType; WeChatSender(Map config) { - weChatAgentId = config.get(WeChatAlertParamsConstants.NAME_ENTERPRISE_WE_CHAT_AGENT_ID); - weChatChatId = config.get(WeChatAlertParamsConstants.NAME_ENTERPRISE_WE_CHAT_CHAT_ID); + weChatAgentIdChatId = config.get(WeChatAlertParamsConstants.NAME_ENTERPRISE_WE_CHAT_AGENT_ID); weChatUsers = config.get(WeChatAlertParamsConstants.NAME_ENTERPRISE_WE_CHAT_USERS); String weChatCorpId = config.get(WeChatAlertParamsConstants.NAME_ENTERPRISE_WE_CHAT_CORP_ID); String weChatSecret = config.get(WeChatAlertParamsConstants.NAME_ENTERPRISE_WE_CHAT_SECRET); @@ -76,8 +71,8 @@ public final class WeChatSender { showType = config.get(AlertConstants.NAME_SHOW_TYPE); requireNonNull(showType, AlertConstants.NAME_SHOW_TYPE + MUST_NOT_NULL); weChatTokenUrlReplace = weChatTokenUrl - .replace(CORP_ID_REGEX, weChatCorpId) - .replace(SECRET_REGEX, weChatSecret); + .replace(CORP_ID_REGEX, weChatCorpId) + .replace(SECRET_REGEX, weChatSecret); weChatToken = getToken(); } @@ -100,42 +95,10 @@ public final class WeChatSender { } } - /** - * convert table to markdown style - * - * @param title the title - * @param content the content - * @return markdown table content - */ - private static String markdownTable(String title, String content) { - List mapItemsList = JSONUtils.toList(content, LinkedHashMap.class); - if (null == mapItemsList || mapItemsList.isEmpty()) { - logger.error("itemsList is null"); - throw new RuntimeException("itemsList is null"); - } - StringBuilder contents = new StringBuilder(200); - for (LinkedHashMap mapItems : mapItemsList) { - Set> entries = mapItems.entrySet(); - Iterator> iterator = entries.iterator(); - StringBuilder t = new StringBuilder(String.format("`%s`%s", title, WeChatAlertConstants.MARKDOWN_ENTER)); - - while (iterator.hasNext()) { - - Map.Entry entry = iterator.next(); - t.append(WeChatAlertConstants.MARKDOWN_QUOTE); - t.append(entry.getKey()).append(":").append(entry.getValue()); - t.append(WeChatAlertConstants.MARKDOWN_ENTER); - } - contents.append(t); - } - - return contents.toString(); - } - /** * convert text to markdown style * - * @param title the title + * @param title the title * @param content the content * @return markdown text */ @@ -242,17 +205,17 @@ public final class WeChatSender { return alertResult; } String enterpriseWeChatPushUrlReplace = ""; - Map contentMap=new HashMap<>(); - contentMap.put(WeChatAlertConstants.WE_CHAT_CONTENT_KEY,data); - String msgJson=""; + Map contentMap = new HashMap<>(); + contentMap.put(WeChatAlertConstants.WE_CHAT_CONTENT_KEY, data); + String msgJson = ""; if (sendType.equals(WeChatType.APP.getDescp())) { enterpriseWeChatPushUrlReplace = WeChatAlertConstants.WE_CHAT_PUSH_URL.replace(TOKEN_REGEX, weChatToken); - WechatAppMessage wechatAppMessage=new WechatAppMessage(weChatUsers, WE_CHAT_MESSAGE_TYPE_TEXT, Integer.valueOf(weChatAgentId),contentMap, WE_CHAT_MESSAGE_SAFE_PUBLICITY, WE_CHAT_ENABLE_ID_TRANS, WE_CHAT_DUPLICATE_CHECK_INTERVAL_ZERO); - msgJson=JSONUtils.toJsonString(wechatAppMessage); + WechatAppMessage wechatAppMessage = new WechatAppMessage(weChatUsers, showType, Integer.valueOf(weChatAgentIdChatId), contentMap, WE_CHAT_MESSAGE_SAFE_PUBLICITY, WE_CHAT_ENABLE_ID_TRANS, WE_CHAT_DUPLICATE_CHECK_INTERVAL_ZERO); + msgJson = JSONUtils.toJsonString(wechatAppMessage); } else if (sendType.equals(WeChatType.APPCHAT.getDescp())) { enterpriseWeChatPushUrlReplace = WeChatAlertConstants.WE_CHAT_APP_CHAT_PUSH_URL.replace(TOKEN_REGEX, weChatToken); - WechatAppChatMessage wechatAppChatMessage=new WechatAppChatMessage(weChatChatId, WE_CHAT_MESSAGE_TYPE_TEXT, contentMap, WE_CHAT_MESSAGE_SAFE_PUBLICITY); - msgJson=JSONUtils.toJsonString(wechatAppChatMessage); + WechatAppChatMessage wechatAppChatMessage = new WechatAppChatMessage(weChatAgentIdChatId, showType, contentMap, WE_CHAT_MESSAGE_SAFE_PUBLICITY); + msgJson = JSONUtils.toJsonString(wechatAppChatMessage); } try { @@ -272,14 +235,7 @@ public final class WeChatSender { * @return the markdown alert table/text */ private String markdownByAlert(String title, String content) { - String result = ""; - if (showType.equals(ShowType.TABLE.getDescp())) { - result = markdownTable(title, content); - } else if (showType.equals(ShowType.TEXT.getDescp())) { - result = markdownText(title, content); - } - return result; - + return markdownText(title, content); } private String getToken() { diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WechatAppChatMessage.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WechatAppChatMessage.java index 5294972b3c..e04f7335b8 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WechatAppChatMessage.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WechatAppChatMessage.java @@ -17,6 +17,8 @@ package org.apache.dolphinscheduler.plugin.alert.wechat; +import org.apache.dolphinscheduler.alert.api.ShowType; + import java.util.Map; public class WechatAppChatMessage { @@ -24,6 +26,7 @@ public class WechatAppChatMessage { private String chatid; private String msgtype; private Map text; + private Map markdown; private Integer safe; public String getChatid() { @@ -58,13 +61,25 @@ public class WechatAppChatMessage { this.safe = safe; } + public Map getMarkdown() { + return markdown; + } + + public void setMarkdown(Map markdown) { + this.markdown = markdown; + } + public WechatAppChatMessage() { } - public WechatAppChatMessage(String chatid, String msgtype, Map text, Integer safe) { + public WechatAppChatMessage(String chatid, String msgtype, Map contentMap, Integer safe) { this.chatid = chatid; this.msgtype = msgtype; - this.text = text; + if (msgtype.equals(ShowType.MARKDOWN.getDescp())) { + this.markdown = contentMap; + } else { + this.text = contentMap; + } this.safe = safe; } } diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WechatAppMessage.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WechatAppMessage.java index 4032e4856f..dbb74a6a93 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WechatAppMessage.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-wechat/src/main/java/org/apache/dolphinscheduler/plugin/alert/wechat/WechatAppMessage.java @@ -17,6 +17,8 @@ package org.apache.dolphinscheduler.plugin.alert.wechat; +import org.apache.dolphinscheduler.alert.api.ShowType; + import java.util.Map; public class WechatAppMessage { @@ -24,7 +26,8 @@ public class WechatAppMessage { private String touser; private String msgtype; private Integer agentid; - private Map text; + private Map text; + private Map markdown; private Integer safe; private Integer enable_id_trans; private Integer enable_duplicate_check; @@ -85,16 +88,28 @@ public class WechatAppMessage { this.enable_duplicate_check = enable_duplicate_check; } + public Map getMarkdown() { + return markdown; + } + + public void setMarkdown(Map markdown) { + this.markdown = markdown; + } + public WechatAppMessage() { } - public WechatAppMessage(String touser, String msgtype, Integer agentid, Map text, Integer safe, Integer enable_id_trans, Integer enable_duplicate_check) { + public WechatAppMessage(String touser, String msgtype, Integer agentid, Map contentMap, Integer safe, Integer enableIdTrans, Integer enableDuplicateCheck) { this.touser = touser; this.msgtype = msgtype; this.agentid = agentid; - this.text = text; + if (msgtype.equals(ShowType.MARKDOWN.getDescp())) { + this.markdown = contentMap; + } else { + this.text = contentMap; + } this.safe = safe; - this.enable_id_trans = enable_id_trans; - this.enable_duplicate_check = enable_duplicate_check; + this.enable_id_trans = enableIdTrans; + this.enable_duplicate_check = enableDuplicateCheck; } } diff --git a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts b/dolphinscheduler-ui-next/src/locales/modules/en_US.ts index a76690effd..8faf9f9031 100644 --- a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts +++ b/dolphinscheduler-ui-next/src/locales/modules/en_US.ts @@ -1112,7 +1112,7 @@ const security = { Secret: 'Secret', users: 'Users', userSendMsg: 'UserSendMsg', - agentId: 'AgentId', + 'agentId/chatId': 'AgentId or ChatId', showType: 'Show Type', receivers: 'Receivers', receiverCcs: 'ReceiverCcs', diff --git a/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts b/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts index a435f59371..8e81fab7e7 100644 --- a/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts +++ b/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts @@ -1097,7 +1097,7 @@ const security = { Secret: '密钥', users: '群员', userSendMsg: '群员信息', - agentId: '应用ID', + 'agentId/chatId': '应用ID或群聊ID', showType: '内容展示类型', receivers: '收件人', receiverCcs: '抄送人',