refactor: optimize extension package

This commit is contained in:
tjq 2023-07-16 18:14:20 +08:00
parent 5e9935fed4
commit fc57226d3a
18 changed files with 97 additions and 54 deletions

View File

@ -1,9 +1,10 @@
package tech.powerjob.server.extension.defaultimpl.alarm;
package tech.powerjob.server.core.alarm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import tech.powerjob.server.extension.defaultimpl.alarm.module.Alarm;
import tech.powerjob.server.extension.Alarmable;
import tech.powerjob.server.extension.alarm.Alarm;
import tech.powerjob.server.extension.alarm.AlarmTarget;
import tech.powerjob.server.extension.alarm.Alarmable;
import tech.powerjob.server.persistence.remote.model.UserInfoDO;
import com.google.common.collect.Lists;
import com.google.common.collect.Queues;
@ -12,6 +13,7 @@ import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.concurrent.*;
import java.util.stream.Collectors;
/**
* 报警服务
@ -41,10 +43,18 @@ public class AlarmCenter {
public void alarmFailed(Alarm alarm, List<UserInfoDO> targetUserList) {
POOL.execute(() -> BEANS.forEach(alarmable -> {
try {
alarmable.onFailed(alarm, targetUserList);
alarmable.onFailed(alarm, targetUserList.stream().map(AlarmCenter::convertUserInfo2AlarmTarget).collect(Collectors.toList()));
}catch (Exception e) {
log.warn("[AlarmCenter] alarm failed.", e);
}
}));
}
private static AlarmTarget convertUserInfo2AlarmTarget(UserInfoDO userInfoDO) {
AlarmTarget alarmTarget = new AlarmTarget();
BeanUtils.copyProperties(userInfoDO, alarmTarget);
alarmTarget.setName(userInfoDO.getUsername());
return alarmTarget;
}
}

View File

@ -1,4 +1,4 @@
package tech.powerjob.server.extension.defaultimpl.alarm.impl;
package tech.powerjob.server.core.alarm.impl;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
@ -14,9 +14,9 @@ import tech.powerjob.common.exception.PowerJobException;
import tech.powerjob.common.utils.NetUtils;
import tech.powerjob.server.common.PowerJobServerConfigKey;
import tech.powerjob.server.common.SJ;
import tech.powerjob.server.extension.Alarmable;
import tech.powerjob.server.extension.defaultimpl.alarm.module.Alarm;
import tech.powerjob.server.persistence.remote.model.UserInfoDO;
import tech.powerjob.server.extension.alarm.AlarmTarget;
import tech.powerjob.server.extension.alarm.Alarmable;
import tech.powerjob.server.extension.alarm.Alarm;
import javax.annotation.PostConstruct;
import java.util.List;
@ -46,7 +46,7 @@ public class DingTalkAlarmService implements Alarmable {
private static final String EMPTY_TAG = "EMPTY";
@Override
public void onFailed(Alarm alarm, List<UserInfoDO> targetUserList) {
public void onFailed(Alarm alarm, List<AlarmTarget> targetUserList) {
if (dingTalkUtils == null) {
return;
}

View File

@ -1,4 +1,4 @@
package tech.powerjob.server.extension.defaultimpl.alarm.impl;
package tech.powerjob.server.core.alarm.impl;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;

View File

@ -1,10 +1,10 @@
package tech.powerjob.server.extension.defaultimpl.alarm.impl;
package tech.powerjob.server.core.alarm.impl;
import org.springframework.beans.factory.annotation.Value;
import org.apache.commons.lang3.StringUtils;
import tech.powerjob.server.persistence.remote.model.UserInfoDO;
import tech.powerjob.server.extension.defaultimpl.alarm.module.Alarm;
import tech.powerjob.server.extension.Alarmable;
import tech.powerjob.server.extension.alarm.AlarmTarget;
import tech.powerjob.server.extension.alarm.Alarm;
import tech.powerjob.server.extension.alarm.Alarmable;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
@ -36,7 +36,7 @@ public class MailAlarmService implements Alarmable {
private String from;
@Override
public void onFailed(Alarm alarm, List<UserInfoDO> targetUserList) {
public void onFailed(Alarm alarm, List<AlarmTarget> targetUserList) {
if (CollectionUtils.isEmpty(targetUserList) || javaMailSender == null || StringUtils.isEmpty(from)) {
return;
}
@ -44,7 +44,7 @@ public class MailAlarmService implements Alarmable {
SimpleMailMessage sm = new SimpleMailMessage();
try {
sm.setFrom(from);
sm.setTo(targetUserList.stream().map(UserInfoDO::getEmail).filter(Objects::nonNull).toArray(String[]::new));
sm.setTo(targetUserList.stream().map(AlarmTarget::getEmail).filter(Objects::nonNull).toArray(String[]::new));
sm.setSubject(alarm.fetchTitle());
sm.setText(alarm.fetchContent());

View File

@ -1,11 +1,11 @@
package tech.powerjob.server.extension.defaultimpl.alarm.impl;
package tech.powerjob.server.core.alarm.impl;
import com.alibaba.fastjson.JSONObject;
import tech.powerjob.common.OmsConstant;
import tech.powerjob.common.utils.HttpUtils;
import tech.powerjob.server.persistence.remote.model.UserInfoDO;
import tech.powerjob.server.extension.defaultimpl.alarm.module.Alarm;
import tech.powerjob.server.extension.Alarmable;
import tech.powerjob.server.extension.alarm.AlarmTarget;
import tech.powerjob.server.extension.alarm.Alarm;
import tech.powerjob.server.extension.alarm.Alarmable;
import lombok.extern.slf4j.Slf4j;
import okhttp3.MediaType;
import okhttp3.RequestBody;
@ -29,7 +29,7 @@ public class WebHookAlarmService implements Alarmable {
private static final String HTTPS_PROTOCOL_PREFIX = "https://";
@Override
public void onFailed(Alarm alarm, List<UserInfoDO> targetUserList) {
public void onFailed(Alarm alarm, List<AlarmTarget> targetUserList) {
if (CollectionUtils.isEmpty(targetUserList)) {
return;
}

View File

@ -1,6 +1,7 @@
package tech.powerjob.server.extension.defaultimpl.alarm.module;
package tech.powerjob.server.core.alarm.module;
import lombok.Data;
import tech.powerjob.server.extension.alarm.Alarm;
/**
* 任务执行失败告警对象

View File

@ -1,7 +1,8 @@
package tech.powerjob.server.extension.defaultimpl.alarm.module;
package tech.powerjob.server.core.alarm.module;
import tech.powerjob.common.model.PEWorkflowDAG;
import lombok.Data;
import tech.powerjob.server.extension.alarm.Alarm;
/**
* 工作流执行失败告警对象

View File

@ -17,8 +17,8 @@ import tech.powerjob.server.common.timewheel.holder.HashedWheelTimerHolder;
import tech.powerjob.server.common.utils.SpringUtils;
import tech.powerjob.server.core.service.UserService;
import tech.powerjob.server.core.workflow.WorkflowInstanceManager;
import tech.powerjob.server.extension.defaultimpl.alarm.AlarmCenter;
import tech.powerjob.server.extension.defaultimpl.alarm.module.JobInstanceAlarm;
import tech.powerjob.server.core.alarm.AlarmCenter;
import tech.powerjob.server.core.alarm.module.JobInstanceAlarm;
import tech.powerjob.server.persistence.remote.model.InstanceInfoDO;
import tech.powerjob.server.persistence.remote.model.JobInfoDO;
import tech.powerjob.server.persistence.remote.model.UserInfoDO;

View File

@ -1,4 +1,4 @@
package tech.powerjob.server.extension.defaultimpl;
package tech.powerjob.server.core.lock;
import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.common.utils.NetUtils;

View File

@ -26,8 +26,8 @@ import tech.powerjob.server.core.service.UserService;
import tech.powerjob.server.core.service.WorkflowNodeHandleService;
import tech.powerjob.server.core.uid.IdGenerateService;
import tech.powerjob.server.core.workflow.algorithm.WorkflowDAGUtils;
import tech.powerjob.server.extension.defaultimpl.alarm.AlarmCenter;
import tech.powerjob.server.extension.defaultimpl.alarm.module.WorkflowInstanceAlarm;
import tech.powerjob.server.core.alarm.AlarmCenter;
import tech.powerjob.server.core.alarm.module.WorkflowInstanceAlarm;
import tech.powerjob.server.persistence.remote.model.*;
import tech.powerjob.server.persistence.remote.repository.JobInfoRepository;
import tech.powerjob.server.persistence.remote.repository.WorkflowInfoRepository;

View File

@ -1,17 +0,0 @@
package tech.powerjob.server.extension;
import tech.powerjob.server.persistence.remote.model.UserInfoDO;
import tech.powerjob.server.extension.defaultimpl.alarm.module.Alarm;
import java.util.List;
/**
* 报警接口
*
* @author tjq
* @since 2020/4/19
*/
public interface Alarmable {
void onFailed(Alarm alarm, List<UserInfoDO> targetUserList);
}

View File

@ -1,4 +1,4 @@
package tech.powerjob.server.extension.defaultimpl.alarm.module;
package tech.powerjob.server.extension.alarm;
import com.alibaba.fastjson.JSONObject;
import tech.powerjob.common.OmsConstant;

View File

@ -0,0 +1,37 @@
package tech.powerjob.server.extension.alarm;
import lombok.Data;
import java.io.Serializable;
import java.util.Map;
import java.util.Objects;
/**
* 报警目标
*
* @author tjq
* @since 2023/7/16
*/
@Data
public class AlarmTarget implements Serializable {
private String name;
/**
* 手机号
*/
private String phone;
/**
* 邮箱地址
*/
private String email;
/**
* webHook
*/
private String webHook;
/**
* 扩展字段
*/
private String extra;
private Map<String, Objects> attributes;
}

View File

@ -0,0 +1,14 @@
package tech.powerjob.server.extension.alarm;
import java.util.List;
/**
* 报警接口
*
* @author tjq
* @since 2020/4/19
*/
public interface Alarmable {
void onFailed(Alarm alarm, List<AlarmTarget> alarmTargets);
}

View File

@ -1,4 +1,4 @@
package tech.powerjob.server.extension.defaultimpl.workerfilter;
package tech.powerjob.server.remote.worker.filter;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,4 +1,4 @@
package tech.powerjob.server.extension.defaultimpl.workerfilter;
package tech.powerjob.server.remote.worker.filter;
import tech.powerjob.server.extension.WorkerFilter;
import tech.powerjob.server.persistence.remote.model.JobInfoDO;

View File

@ -1,4 +1,4 @@
package tech.powerjob.server.extension.defaultimpl.workerfilter;
package tech.powerjob.server.remote.worker.filter;
import tech.powerjob.common.model.SystemMetrics;
import tech.powerjob.server.extension.WorkerFilter;

View File

@ -1,12 +1,9 @@
package tech.powerjob.server.test;
import org.junit.jupiter.api.Disabled;
import tech.powerjob.server.extension.defaultimpl.alarm.impl.DingTalkUtils;
import com.google.common.collect.Lists;
import tech.powerjob.server.core.alarm.impl.DingTalkUtils;
import org.junit.jupiter.api.Test;
import java.util.List;
/**
* 测试钉钉消息工具
*