feat(sj_1.0.0):
1、告警新增Webhook 2、asyncSendMessage抽象放父类
This commit is contained in:
parent
af8521e068
commit
e4fe69d870
@ -0,0 +1,29 @@
|
||||
package com.aizuda.snailjob.common.core.alarm.attribute;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* @author: opensnail
|
||||
* @date : 2024-05-07 16:13
|
||||
*/
|
||||
@Data
|
||||
@Slf4j
|
||||
public class WebhookAttribute {
|
||||
|
||||
/**
|
||||
* webhook
|
||||
*/
|
||||
private String webhookUrl;
|
||||
|
||||
/**
|
||||
* 请求类型
|
||||
*/
|
||||
private Integer contentType;
|
||||
|
||||
/**
|
||||
* 秘钥
|
||||
*/
|
||||
private String secret;
|
||||
|
||||
}
|
@ -2,10 +2,7 @@ package com.aizuda.snailjob.common.core.alarm.strategy;
|
||||
|
||||
import com.aizuda.snailjob.common.core.alarm.Alarm;
|
||||
import com.aizuda.snailjob.common.core.alarm.SnailJobAlarmFactory;
|
||||
import com.aizuda.snailjob.common.core.context.SpringContext;
|
||||
import com.aizuda.snailjob.common.core.util.EnvironmentUtils;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.core.env.Environment;
|
||||
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
@ -17,10 +14,17 @@ import java.util.concurrent.TimeUnit;
|
||||
*/
|
||||
public abstract class AbstractAlarm<T> implements Alarm<T>, InitializingBean {
|
||||
|
||||
protected static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 10, 1, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
|
||||
protected static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 10, 1, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
SnailJobAlarmFactory.register(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean asyncSendMessage(T t) {
|
||||
threadPoolExecutor.execute(() -> syncSendMessage(t));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
SnailJobAlarmFactory.register(this);
|
||||
}
|
||||
}
|
||||
|
@ -21,12 +21,6 @@ public class DingdingAlarm extends AbstractAlarm<AlarmContext> {
|
||||
return AlarmTypeEnum.DING_DING.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean asyncSendMessage(AlarmContext context) {
|
||||
threadPoolExecutor.execute(() -> syncSendMessage(context));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean syncSendMessage(AlarmContext context) {
|
||||
DingDingAttribute dingDingAttribute = JsonUtil.parseObject(context.getNotifyAttribute(), DingDingAttribute.class);
|
||||
|
@ -30,12 +30,6 @@ public class EmailAlarm extends AbstractAlarm<AlarmContext> {
|
||||
return AlarmTypeEnum.EMAIL.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean asyncSendMessage(AlarmContext alarmContext) {
|
||||
threadPoolExecutor.execute(() -> syncSendMessage(alarmContext));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean syncSendMessage(AlarmContext alarmContext) {
|
||||
if (Objects.isNull(mailAccount)) {
|
||||
@ -43,11 +37,16 @@ public class EmailAlarm extends AbstractAlarm<AlarmContext> {
|
||||
return false;
|
||||
}
|
||||
|
||||
String notifyAttribute = alarmContext.getNotifyAttribute();
|
||||
EmailAttribute emailAttribute = JsonUtil.parseObject(notifyAttribute, EmailAttribute.class);
|
||||
String text = alarmContext.getText();
|
||||
text = text.replaceAll("\n", "<br/>");
|
||||
MailUtils.send(mailAccount, emailAttribute.getTos(), alarmContext.getTitle(), text, true);
|
||||
try {
|
||||
String notifyAttribute = alarmContext.getNotifyAttribute();
|
||||
EmailAttribute emailAttribute = JsonUtil.parseObject(notifyAttribute, EmailAttribute.class);
|
||||
String text = alarmContext.getText();
|
||||
text = text.replaceAll("\n", "<br/>");
|
||||
MailUtils.send(mailAccount, emailAttribute.getTos(), alarmContext.getTitle(), text, true);
|
||||
} catch (Exception e) {
|
||||
SnailJobLog.LOCAL.error("发送email消息失败:", e);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -43,13 +43,6 @@ public class LarkAlarm extends AbstractAlarm<AlarmContext> {
|
||||
return AlarmTypeEnum.LARK.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean asyncSendMessage(AlarmContext context) {
|
||||
threadPoolExecutor.execute(() -> syncSendMessage(context));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean syncSendMessage(AlarmContext context) {
|
||||
try {
|
||||
|
@ -33,12 +33,6 @@ public class QiYeWechatAlarm extends AbstractAlarm<AlarmContext> {
|
||||
return AlarmTypeEnum.WE_COM.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean asyncSendMessage(AlarmContext context) {
|
||||
threadPoolExecutor.execute(() -> syncSendMessage(context));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean syncSendMessage(AlarmContext context) {
|
||||
try {
|
||||
|
@ -0,0 +1,73 @@
|
||||
package com.aizuda.snailjob.common.core.alarm.strategy;
|
||||
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import cn.hutool.http.HttpResponse;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import com.aizuda.snailjob.common.core.alarm.AlarmContext;
|
||||
import com.aizuda.snailjob.common.core.alarm.attribute.WebhookAttribute;
|
||||
import com.aizuda.snailjob.common.core.enums.AlarmTypeEnum;
|
||||
import com.aizuda.snailjob.common.core.enums.ContentTypeEnum;
|
||||
import com.aizuda.snailjob.common.core.util.JsonUtil;
|
||||
import com.aizuda.snailjob.common.log.SnailJobLog;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author: opensnail
|
||||
* @date : 2024-05-07 10:15
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class WebhookAlarm extends AbstractAlarm<AlarmContext> {
|
||||
|
||||
@Override
|
||||
public Integer getAlarmType() {
|
||||
return AlarmTypeEnum.WEBHOOK.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean syncSendMessage(AlarmContext alarmContext) {
|
||||
|
||||
WebhookAttribute webhookAttribute = JsonUtil.parseObject(alarmContext.getNotifyAttribute(), WebhookAttribute.class);
|
||||
for (int i = 0; i < 2; i++) {
|
||||
try {
|
||||
WebhookMessage webhookMessage = WebhookMessage.builder().text(alarmContext.getTitle()).build();
|
||||
|
||||
HttpRequest post = HttpUtil.createPost(webhookAttribute.getWebhookUrl());
|
||||
HttpRequest request = post.body(JsonUtil.toJsonString(webhookMessage), ContentTypeEnum.valueOf(webhookAttribute.getContentType()).getMediaType().toString())
|
||||
.header("secret", webhookAttribute.getSecret());
|
||||
HttpResponse execute = request.execute();
|
||||
if (execute.isOk()) {
|
||||
return true;
|
||||
}
|
||||
SnailJobLog.LOCAL.info("发送Webhook告警结果. webHook:[{}],结果: [{}]", webhookAttribute.getWebhookUrl(), execute.body());
|
||||
break;
|
||||
} catch (Exception e) {
|
||||
SnailJobLog.LOCAL.error("发送Webhook告警异常. webHook:[{}]", webhookAttribute, e);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
private static class WebhookMessage {
|
||||
|
||||
private String text;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean asyncSendMessage(List<AlarmContext> alarmContexts) {
|
||||
for (AlarmContext alarmContext : alarmContexts) {
|
||||
asyncSendMessage(alarmContext);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +27,11 @@ public enum AlarmTypeEnum {
|
||||
* 飞书
|
||||
*/
|
||||
LARK(4),
|
||||
|
||||
/**
|
||||
* Webhook
|
||||
*/
|
||||
WEBHOOK(5),
|
||||
;
|
||||
|
||||
private final int value;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.aizuda.snailjob.server.common.enums;
|
||||
package com.aizuda.snailjob.common.core.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
@ -103,7 +103,7 @@ public abstract class AbstractAlarm<E extends ApplicationEvent, A extends AlarmI
|
||||
List<NotifyConfig> notifyConfigs = accessTemplate.getNotifyConfigAccess().list(
|
||||
new LambdaQueryWrapper<NotifyConfig>()
|
||||
.eq(NotifyConfig::getNotifyStatus, StatusEnum.YES.getStatus())
|
||||
.in(NotifyConfig::getSystemTaskType, getSystemTaskType())
|
||||
.in(NotifyConfig::getSystemTaskType, getSystemTaskType().stream().map(i -> i.getType()).collect(Collectors.toList()))
|
||||
.eq(NotifyConfig::getNotifyScene, getNotifyScene())
|
||||
.in(NotifyConfig::getNamespaceId, namespaceIds)
|
||||
.in(NotifyConfig::getGroupName, groupNames)
|
||||
|
@ -2,16 +2,11 @@ package com.aizuda.snailjob.server.job.task.support.executor.workflow;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.aizuda.snailjob.common.core.constant.SystemConstants;
|
||||
import com.aizuda.snailjob.common.core.enums.JobOperationReasonEnum;
|
||||
import com.aizuda.snailjob.common.core.enums.JobTaskBatchStatusEnum;
|
||||
import com.aizuda.snailjob.common.core.enums.JobTaskStatusEnum;
|
||||
import com.aizuda.snailjob.common.core.enums.StatusEnum;
|
||||
import com.aizuda.snailjob.common.core.enums.WorkflowNodeTypeEnum;
|
||||
import com.aizuda.snailjob.common.core.enums.*;
|
||||
import com.aizuda.snailjob.common.core.util.JsonUtil;
|
||||
import com.aizuda.snailjob.common.log.SnailJobLog;
|
||||
import com.aizuda.snailjob.server.common.rpc.okhttp.RequestInterceptor;
|
||||
import com.aizuda.snailjob.server.common.dto.CallbackConfig;
|
||||
import com.aizuda.snailjob.server.common.enums.ContentTypeEnum;
|
||||
import com.aizuda.snailjob.server.common.dto.JobLogMetaDTO;
|
||||
import com.aizuda.snailjob.server.job.task.support.WorkflowTaskConverter;
|
||||
import com.aizuda.snailjob.server.model.dto.CallbackParamsDTO;
|
||||
|
Loading…
Reference in New Issue
Block a user