Skip to content

Commit

Permalink
Merge pull request #294 from dromara/optimize
Browse files Browse the repository at this point in the history
[ISSUE #293] Fix WeChat alert @ does not prompt.
  • Loading branch information
yanhom1314 committed Jun 25, 2023
2 parents 31c878b + 8537ef0 commit 4839177
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ private WechatNotifyConst() { }

public static final String COMMENT_COLOR = "comment";

/**
* receivers only supports userid, view more,
* see <a href="https://developers.weixin.qq.com/community/develop/doc/000a00b208c05076e49c0e5d451000">more</a>.
*/
public static final String WECHAT_ALARM_TEMPLATE =
"<font color='warning'>【报警】</font> 动态线程池告警 \n" +
"> <font color='comment'>服务名称:%s</font> \n" +
Expand All @@ -61,7 +65,7 @@ private WechatNotifyConst() { }
"> <font color='queueTimeoutCount'>等待超时任务数量:%s</font> \n" +
"> <font color='comment'>上次报警时间:%s</font> \n" +
"> <font color='comment'>报警时间:%s</font> \n" +
"> <font color='comment'>接收人:@%s</font> \n" +
"> <font color='comment'>接收人:<@%s></font> \n" +
"> <font color='comment'>tid:%s</font> \n" +
"> <font color='info'>报警间隔:%ss</font> \n";

Expand All @@ -78,6 +82,6 @@ private WechatNotifyConst() { }
"> <font color='comment'>队列类型:%s</font> \n" +
"> <font color='queueCapacity'>队列容量:%s => %s</font> \n" +
"> <font color='rejectType'>拒绝策略:%s => %s</font> \n" +
"> <font color='comment'>接收人:@%s</font> \n" +
"> <font color='comment'>接收人:<@%s></font> \n" +
"> <font color='comment'>通知时间:%s</font> \n";
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@

package org.dromara.dynamictp.core.notifier;

import cn.hutool.core.util.StrUtil;
import com.google.common.base.Joiner;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.dromara.dynamictp.common.constant.DynamicTpConst;
import org.dromara.dynamictp.common.em.NotifyItemEnum;
import org.dromara.dynamictp.common.em.NotifyPlatformEnum;
import org.dromara.dynamictp.common.entity.AlarmInfo;
import org.dromara.dynamictp.common.entity.NotifyItem;
import org.dromara.dynamictp.common.entity.NotifyPlatform;
Expand All @@ -33,24 +36,15 @@
import org.dromara.dynamictp.core.notifier.context.BaseNotifyCtx;
import org.dromara.dynamictp.core.notifier.context.DtpNotifyCtxHolder;
import org.dromara.dynamictp.core.support.ExecutorWrapper;
import com.google.common.base.Joiner;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.MDC;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

import static org.dromara.dynamictp.common.constant.LarkNotifyConst.LARK_AT_FORMAT_OPENID;
import static org.dromara.dynamictp.common.constant.LarkNotifyConst.LARK_AT_FORMAT_USERNAME;
import static org.dromara.dynamictp.common.constant.LarkNotifyConst.LARK_OPENID_PREFIX;
import static org.dromara.dynamictp.common.constant.DynamicTpConst.UNKNOWN;
import static org.dromara.dynamictp.core.notifier.manager.NotifyHelper.getAlarmKeys;
import static org.dromara.dynamictp.core.notifier.manager.NotifyHelper.getAllAlarmKeys;

Expand All @@ -65,8 +59,7 @@ public abstract class AbstractDtpNotifier implements DtpNotifier {

protected Notifier notifier;

protected AbstractDtpNotifier() {
}
protected AbstractDtpNotifier() { }

protected AbstractDtpNotifier(Notifier notifier) {
this.notifier = notifier;
Expand All @@ -92,27 +85,6 @@ public void sendAlarmMsg(NotifyPlatform notifyPlatform, NotifyItemEnum notifyIte
notifier.send(notifyPlatform, content);
}

/**
* Implement by subclass, get notice template.
*
* @return notice template
*/
protected abstract String getNoticeTemplate();

/**
* Implement by subclass, get alarm template.
*
* @return alarm template
*/
protected abstract String getAlarmTemplate();

/**
* Implement by subclass, get content color config.
*
* @return left: highlight color, right: other content color
*/
protected abstract Pair<String, String> getColors();

protected String buildAlarmContent(NotifyPlatform platform, NotifyItemEnum notifyItemEnum) {
AlarmCtx context = (AlarmCtx) DtpNotifyCtxHolder.get();
ExecutorWrapper executorWrapper = context.getExecutorWrapper();
Expand Down Expand Up @@ -144,10 +116,10 @@ protected String buildAlarmContent(NotifyPlatform platform, NotifyItemEnum notif
alarmCounter.getLeft(),
alarmCounter.getMiddle(),
alarmCounter.getRight(),
Optional.ofNullable(context.getAlarmInfo()).map(AlarmInfo::getLastAlarmTime).orElse(DynamicTpConst.UNKNOWN),
Optional.ofNullable(context.getAlarmInfo()).map(AlarmInfo::getLastAlarmTime).orElse(UNKNOWN),
DateUtil.now(),
getReceives(platform.getPlatform(), StrUtil.isBlank(notifyItem.getReceivers()) ? platform.getReceivers() : notifyItem.getReceivers()),
Optional.ofNullable(MDC.get(DynamicTpConst.TRACE_ID)).orElse(DynamicTpConst.UNKNOWN),
getReceives(notifyItem, platform),
Optional.ofNullable(MDC.get(DynamicTpConst.TRACE_ID)).orElse(UNKNOWN),
notifyItem.getInterval()
);
return highlightAlarmContent(content, notifyItemEnum);
Expand All @@ -171,25 +143,24 @@ protected String buildNoticeContent(NotifyPlatform platform, TpMainFields oldFie
executor.getQueueType(),
oldFields.getQueueCapacity(), executor.getQueueCapacity(),
oldFields.getRejectType(), executor.getRejectHandlerType(),
getReceives(platform.getPlatform(), platform.getReceivers()),
getReceives(context.getNotifyItem(), platform),
DateUtil.now()
);
return highlightNotifyContent(content, diffs);
}

private String getReceives(String platform, String receives) {
protected String getReceives(NotifyItem notifyItem, NotifyPlatform platform) {
String receives = StringUtils.isBlank(notifyItem.getReceivers()) ?
platform.getReceivers() : notifyItem.getReceivers();
if (StringUtils.isBlank(receives)) {
return "";
return StringUtils.EMPTY;
}
if (!NotifyPlatformEnum.LARK.name().toLowerCase().equals(platform)) {
String[] receivers = StringUtils.split(receives, ',');
return Joiner.on(", @").join(receivers);
}
return Arrays.stream(receives.split(","))
.map(receive -> StringUtils.startsWith(receive, LARK_OPENID_PREFIX)
? String.format(LARK_AT_FORMAT_OPENID, receive) :
String.format(LARK_AT_FORMAT_USERNAME, receive))
.collect(Collectors.joining(" "));
return formatReceivers(receives);
}

protected String formatReceivers(String receives) {
String[] receivers = StringUtils.split(receives, ',');
return Joiner.on(", @").join(receivers);
}

protected String populatePoolName(ExecutorWrapper executorWrapper) {
Expand Down Expand Up @@ -230,4 +201,25 @@ private String highlightAlarmContent(String content, NotifyItemEnum notifyItemEn
}
return content;
}

/**
* Implement by subclass, get notice template.
*
* @return notice template
*/
protected abstract String getNoticeTemplate();

/**
* Implement by subclass, get alarm template.
*
* @return alarm template
*/
protected abstract String getAlarmTemplate();

/**
* Implement by subclass, get content color config.
*
* @return left: highlight color, right: other content color
*/
protected abstract Pair<String, String> getColors();
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,20 @@

package org.dromara.dynamictp.core.notifier;

import org.dromara.dynamictp.common.constant.LarkNotifyConst;
import org.dromara.dynamictp.common.em.NotifyPlatformEnum;
import org.dromara.dynamictp.core.notifier.base.Notifier;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.dromara.dynamictp.common.constant.LarkNotifyConst;
import org.dromara.dynamictp.common.em.NotifyPlatformEnum;
import org.dromara.dynamictp.core.notifier.base.Notifier;

import java.util.Arrays;
import java.util.stream.Collectors;

import static org.dromara.dynamictp.common.constant.LarkNotifyConst.LARK_AT_FORMAT_OPENID;
import static org.dromara.dynamictp.common.constant.LarkNotifyConst.LARK_AT_FORMAT_USERNAME;
import static org.dromara.dynamictp.common.constant.LarkNotifyConst.LARK_OPENID_PREFIX;

/**
* DtpLarkNotifier
Expand Down Expand Up @@ -57,4 +65,12 @@ protected String getAlarmTemplate() {
protected Pair<String, String> getColors() {
return new ImmutablePair<>(LarkNotifyConst.WARNING_COLOR, LarkNotifyConst.COMMENT_COLOR);
}

@Override
protected String formatReceivers(String receives) {
return Arrays.stream(receives.split(","))
.map(r -> StringUtils.startsWith(r, LARK_OPENID_PREFIX) ?
String.format(LARK_AT_FORMAT_OPENID, r) : String.format(LARK_AT_FORMAT_USERNAME, r))
.collect(Collectors.joining(" "));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ public final void send(NotifyPlatform platform, String content) {
protected abstract void sendMode(NotifyPlatform platform, String content);

/**
* Get the notifyItem.receivers
* Get the notify receivers
* @param platform platform
* @return Receivers
*/
protected String[] getNotifyItemReceivers(NotifyPlatform platform) {
protected String[] getNotifyReceivers(NotifyPlatform platform) {
BaseNotifyCtx context = DtpNotifyCtxHolder.get();
String receivers = Optional.ofNullable(context)
.map(BaseNotifyCtx::getNotifyItem)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ protected String buildMsgBody(NotifyPlatform platform, String content) {

MarkdownReq.At at = new MarkdownReq.At();

List<String> mobiles = Lists.newArrayList(getNotifyItemReceivers(platform));
List<String> mobiles = Lists.newArrayList(getNotifyReceivers(platform));
at.setAtMobiles(mobiles);
if (CollectionUtils.isEmpty(mobiles)) {
at.setAtAll(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@
package org.dromara.dynamictp.extension.notify.email;

import lombok.SneakyThrows;
import org.dromara.dynamictp.common.entity.NotifyPlatform;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.em.NotifyPlatformEnum;
import org.dromara.dynamictp.common.entity.NotifyPlatform;
import org.dromara.dynamictp.core.notifier.base.AbstractNotifier;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
Expand Down Expand Up @@ -65,7 +65,7 @@ protected void sendMode(NotifyPlatform platform, String content) {
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setSubject(title);
messageHelper.setFrom(sendFrom);
messageHelper.setTo(getNotifyItemReceivers(platform));
messageHelper.setTo(getNotifyReceivers(platform));
messageHelper.setSentDate(new Date());
messageHelper.setText(content, true);
javaMailSender.send(mimeMessage);
Expand Down

0 comments on commit 4839177

Please sign in to comment.